Как получить категорию в классе элемента списка

Вопрос или проблема

Мне нужно знать, как сделать так, чтобы категория динамически вводилась в WP_Query

Вот код, который я использую:

<li class="<?php the_category(' ')?>">

но вывод не работает.

Это весь код

 <ul id="portfolio-list">

<?php

$args = array(
    'post_type' => 'post',
    'post__and' => array( 15, 14, 17, 13, 10, 8, 12, 11, 9, 16),
);

$the_query = new WP_Query( $args );
?>

<?php if ( $the_query->have_posts() ) :?> 

    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

  <li class="<?php the_category(' '); ?>">

<?php the_post_thumbnail( $size, $attr ); ?> 

    <?php the_title(); ?>

    <br />

    <?php //the_category('cat-slug'); ?>

<?php endwhile; else: ?>

    <p>Здесь нет записей или страниц</p>

<?php endif; ?>

<?php wp_reset_postdata(); ?>

    </li>

</ul>

Первая проблема, которую я вижу, заключается в том, что вы пытаетесь использовать the_category как класс. Это не сработает, так как эта функция предназначена для вывода ссылок на категории, присвоенные этой записи. Поэтому href попадает внутрь вашего класса.

Вы можете отладить и посмотреть, как это работает, убрав ваш li и класс. Затем посмотрите, как the_category работает самостоятельно. Вы сможете просмотреть это в своем браузере и увидеть разметку. Вы увидите разницу и поймете, почему это не сработает с вашим подходом. Так что, если у вас есть категория под названием “яблоки” и “груши” в записи, и вы имеете the_category( ' ' ); отдельно в цикле, вы должны увидеть что-то вроде этого в вашей проверке.

<a href="http://yoursite.com/category/apples/" rel="category tag">Яблоки</a> 
<a href="http://yoursite.com/category/pears/" rel="category tag">Груши</a>

Теперь с вашим кодом так, как вы его написали, как <li class="<?php the_category(' '); ?>></li>, вы увидите что-то вроде этого в вашей проверке.

<li class="  ">Это не работает</li>

Так что, если вы просто хотите имена категорий, чтобы использовать их как классы, возможно, стоит попробовать get_the_category вместо этого. Также, что происходит, если есть больше одной категории? Вы хотите, чтобы они все были в вашем классе?

Предполагая, что вы хотите только первую категорию, вы бы написали что-то вроде этого:

<?php
$post_cat = get_the_category(); //получить категорию этой записи
$cat_name = $post_cat[0]->cat_name; //получить имя первой категории
?>

<li class="<?php echo $cat_name; ?>">Ваша первая категория теперь является классом.</li>

Если вы хотите что-то другое, вам нужно будет более конкретно задать свой вопрос.

Вторая проблема, которую я вижу, касается разметки. <li>, используемый для оборачивания вашей категории с классом, открывается внутри цикла и, похоже, закрывается снаружи цикла после endwhile. Возможно, нужно поместить закрывающий </li> перед endwhile, чтобы это тоже помогло.

Надеюсь, это поможет!

Ответ или решение

Как динамически получить категорию в классе элемента списка в WordPress

При работе с WordPress и выводом произвольного списка постов с помощью WP_Query возникает необходимость корректно отображать категории в качестве классов элементов списка. Существующая реализация вашего кода сталкивается с несколькими проблемами, которые мы сегодня разберем.

Проблема 1: Неверное использование функции the_category()

Ваша текущая реализация использует the_category(), что предназначено для вывода ссылок на категории. Это приводит к тому, что в выходной код попадают ненужные теги, и ваш класс становится пустым. Например, если пост относится к категориям "яблоки" и "груши", результат использования the_category(' ') выведет:

<a href="http://yoursite.com/category/apples/" rel="category tag">Apples</a>
<a href="http://yoursite.com/category/pears/" rel="category tag">Pears</a>

Это наблюдение следует учесть: если вы поместите вывод в тег <li>, он не сработает должным образом.

Решение: Использование функции get_the_category()

Для решения этой проблемы рекомендуется использовать get_the_category(). Данная функция возвращает массив объектов категорий, который можно использовать для извлечения нужной информации. Рассмотрим пример:

<ul id="portfolio-list">
<?php
$args = array(
    'post_type' => 'post',
    'post__in' => array( 15, 14, 17, 13, 10, 8, 12, 11, 9, 16),
);

$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) : 
    while ( $the_query->have_posts() ) : $the_query->the_post(); 

        $post_cat = get_the_category(); // Получаем категории поста
        $cat_name = !empty($post_cat) ? esc_attr($post_cat[0]->cat_name) : ''; // Получаем имя первой категории

?>
    <li class="<?php echo $cat_name; ?>">
        <?php the_post_thumbnail(); ?>
        <?php the_title(); ?>
        <br />
    </li>
<?php 
    endwhile; 
else:
?>
    <p>Постов нет.</p>
<?php 
endif; 
wp_reset_postdata(); 
?>
</ul>

Объяснение кода:

  1. Получение категорий: Для каждого поста мы используем get_the_category(), чтобы получить массив категорий.
  2. Извлечение первой категории: Мы проверяем, что массив не пуст, и извлекаем имя первой категории. Это важно, так как пост может принадлежать нескольким категориям.
  3. Экранирование названия класса: Используем esc_attr() для обеспечения безопасного вывода на экран, что позволяет избежать проблем с незапланированным выводом HTML.
  4. Корректная разметка: Теперь </li> закрывается внутри цикла while, что обеспечивает правильную структуру HTML.

Вывод

Следуя приведенным рекомендациям, вы сможете динамически добавлять категории в качестве классов для элементов списка в WordPress. Это внесет ясность в ваш код и улучшит его функциональность. Убедитесь, что вы внимательно относитесь к структуре вашего HTML и используете правильные функции для получения необходимой информации.

Оцените материал
Добавить комментарий

Капча загружается...