Вопрос или проблема
Итак, у меня есть пользовательский запрос, в котором я отображаю некоторые результаты записей пользовательского типа записи под названием “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();
?>
Пояснения по коду
-
Получение термов: Функция
get_the_terms()
принимает ID записи и слаг таксономии, что позволяет нам получить все термы, связанные с данной записью. -
Проверка на ошибки: Используем условие
if ($terms && !is_wp_error($terms))
, чтобы убедиться, что термы были успешно получены и отсутствуют ошибки. -
Вывод термов: В цикле
foreach
мы перебираем полученные термы, формируем ссылку на каждую категорию с помощьюget_term_link($term)
и выводим название с помощьюesc_html($term->name)
для защиты от XSS. -
Сброс данных: После выполнения пользовательского запроса и вывода данных, стоит обязательно вызвать
wp_reset_postdata()
, чтобы сбросить глобальную переменную$post
.
Заключение
С помощью приведенного выше кода вы сможете корректно отображать названия категорий, связанных с вашим пользовательским типом записи "staff". Это решение четко соответствует формату словаря WordPress и не только помогает вам решить проблему, но и улучшает читаемость и структурирование вашего кода. Таким образом, ваш контент будет организован и представит пользователю всю необходимую информацию в наилучшем виде.