Отображение названия категории пользовательского типа записи

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

Итак, у меня есть пользовательский запрос, в котором я отображаю некоторые результаты записей пользовательского типа записи под названием “staff”. Этот пользовательский тип записи связан с пользовательской таксономией под названием “department”. Я могу отображать результаты, но не могу напечатать категорию, связанную с каждой записью.

Вот мой код:

        <?php
          $args = array(
            'post_type' => 'staff', 'posts_per_page' => -1, 'orderby' => 'menu_order', 'order' => 'ASC',
            'tax_query' => array(
              array(
                'taxonomy' => 'departments',
                'field' => 'slug',
                'terms' => 'board'
              )
            )
          );
          $loop = new WP_Query( $args );
        ?>

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

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

                    <p class="text-center name"><?php the_title(); ?></p>
                    <?php the_category(' '); ?>

            <?php endwhile; ?>        

        <?php endif; ?>

Я думаю, что проблема в том, что я использую, но не уверен.

Есть идеи, что может быть неправильно?

Спасибо!

Итак, вот что мне нужно было:

<?php
$terms = get_the_terms( $post->ID , 'board' );
foreach ( $terms as $term ) {
echo $term->name;
}
?>

используйте термины вот так:

$terms = get_the_terms($post->ID, 'Введите_вашу_таксономию_здесь' );
if ($terms && ! is_wp_error($terms)) :
    $tslugs_arr = array();
    foreach ($terms as $term) {
        $tslugs_arr[] = $term->slug;
    }
    $terms_slug_str = join( " ", $tslugs_arr);
endif;
echo $terms_slug_str;

На случай, если кто-то ищет это в 2019 году. С этим вы получаете имя ПОЛЬЗОВАТЕЛЬСКОГО ТИПА ЗАПИСИ с URL

$terms = wp_get_post_terms( $post->ID, 'МЕСТО-ДЛЯ-ВАШЕЙ-ТАКСОНОМИИ');
foreach ( $terms as $term ) {
  $term_link = get_term_link( $term );
  echo '<a href="' . $term_link . '">' . $term->name . '</a>' . ' ';
}

$categories = get_terms(array(
‘taxonomy’ => ‘course_categories’,
‘hide_empty’ => false,
));

        $output .= '<select name="category">';
        $output .= '<option value="">Выберите категорию</option>';
        foreach ($categories as $category) {
            
            $output .= '<option value="' . $category->slug . '">' . $category->name . '</option>';
            
        }

if (!empty($category_data)) {
// Если категория выбрана, отфильтровать по этой категории
$post[‘tax_query’] = array(
array(
‘taxonomy’ => ‘course_categories’,
‘field’ => ‘slug’,
‘terms’ => $category_data,
‘operator’ => ‘IN’,
),
);
}

.

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

Отображение названия категории для пользовательского типа записи в WordPress

В WordPress существует возможность создавать пользовательские типы записей и таксономии, чтобы структурировать контент более гибко. В вашем случае вы создали пользовательский тип записи "staff" и связали его с пользовательской таксономией "department". Вы хотите отобразить название категории, связанной с каждой записью. Давайте разберемся, как это правильно реализовать.

Проблема

В вашем коде используется функция the_category(), которая предназначена для вывода категорий стандартного типа записей (например, постов). Однако так как вы работаете с пользовательским типом записи и таксономией, правильным подходом будет использование функции get_the_terms().

Решение

Вот пример того, как вы можете изменить ваш код, чтобы получить и отобразить название связанных категорий (термов) из пользовательской таксономии "department":

<?php
$args = array(
    'post_type' => 'staff',
    'posts_per_page' => -1,
    'orderby' => 'menu_order',
    'order' => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'departments',
            'field' => 'slug',
            'terms' => 'board'
        )
    )
);

$loop = new WP_Query($args);

if ($loop->have_posts()) :
    while ($loop->have_posts()) : $loop->the_post();
        ?>
        <p class="text-center name"><?php the_title(); ?></p>

        <?php
        // Получаем термы (категории), связанные с текущим постом
        $terms = get_the_terms(get_the_ID(), 'departments');

        if ($terms && !is_wp_error($terms)) {
            // Перебираем термы и выводим их названия
            foreach ($terms as $term) {
                $term_link = get_term_link($term); // Получаем ссылку на категорию
                echo '<a href="' . esc_url($term_link) . '">' . esc_html($term->name) . '</a> ';
            }
        } else {
            echo 'Категории отсутствуют.';
        }
        ?>

        <?php endwhile;
endif;
wp_reset_postdata();
?>

Пояснения по коду

  1. Получение термов: Функция get_the_terms() принимает ID записи и слаг таксономии, что позволяет нам получить все термы, связанные с данной записью.

  2. Проверка на ошибки: Используем условие if ($terms && !is_wp_error($terms)), чтобы убедиться, что термы были успешно получены и отсутствуют ошибки.

  3. Вывод термов: В цикле foreach мы перебираем полученные термы, формируем ссылку на каждую категорию с помощью get_term_link($term) и выводим название с помощью esc_html($term->name) для защиты от XSS.

  4. Сброс данных: После выполнения пользовательского запроса и вывода данных, стоит обязательно вызвать wp_reset_postdata(), чтобы сбросить глобальную переменную $post.

Заключение

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

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

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