Вопрос или проблема
<?php get_header();?>
<?php
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$shahbaz = new WP_Query(
array(
'order' => 'ASC',
'post_type' => 'services',
'post_status' => 'publish',
'posts_per_page' => '9',
'tax_query' => array(
array(
'taxonomy' => 'basics',
'field' => 'taxonomy',
'terms' => 'taxonomy',
),
),
),
);
?>
<?php
$categories = get_the_terms( get_the_id(), $basics-slug );
if ( is_array( $categories ) ) {
foreach ( $categories as $category ) {
echo '<a href="' . get_term_link( $category->term_id ) . '" title="' . sprintf( __( "Посмотреть все записи в %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> ';
}
}
?>
<?php get_footer();?>
Я собираюсь сосредоточиться только на перечислении категорий, которое у вас есть в приведенном выше коде, и игнорировать пользовательский запрос, так как это не то, о чем вы спрашиваете.
<?php
// Предполагаю, что слаг пользовательской таксономии - "basics"
$categories = get_the_terms( get_the_ID(), 'basics' );
// get_the_terms возвращает false, ошибку wp или массив объектов термина.
if ( $categories && ! is_wp_error( $categories ) ) {
foreach ( $categories as $category ) {
// get_term_link требует слаг таксономии в качестве второго параметра.
echo '<a href="' . esc_url( get_term_link( $category->term_id, 'basics' ) ) . '" title="' . sprintf( esc_html__( 'Посмотреть все записи в %s' ), esc_html( $category->name ) ) . '">' . esc_html( $category->name ) . '</a> ';
}
}
?>
Я немного подправил детали. Встроенные комментарии должны дать некоторые разъяснения. Я также добавил экранирование вывода, так как это является наилучшей практикой.
Ответ или решение
Чтобы отобразить пользовательскую таксономию на архивной странице WordPress, нужно использовать правильный подход к извлечению и отображению данных. Рассмотрим, как исправить и улучшить ваш код, чтобы он соответствовал стандартам и обеспечивал необходимую функциональность.
Подготовленный код для отображения пользовательской таксономии
<?php get_header(); ?>
<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = array(
'order' => 'ASC',
'post_type' => 'services',
'post_status' => 'publish',
'posts_per_page'=> 9,
'paged' => $paged,
'tax_query' => array(
array(
'taxonomy' => 'basics',
'field' => 'slug',
'terms' => get_query_var('basics') // Здесь следует использовать нужный вам слаг
),
),
);
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
// Ваш код отображения постов здесь.
endwhile;
// Добавляем пагинацию
the_posts_pagination();
else :
echo '<p>' . esc_html__('Нет записей для отображения.', 'text-domain') . '</p>';
endif;
wp_reset_postdata();
// Получение и отображение категорий
$categories = get_the_terms(get_the_ID(), 'basics');
if ($categories && !is_wp_error($categories)) {
foreach ($categories as $category) {
// Экранируем значения перед выводом на экран
$link = esc_url(get_term_link($category->term_id, 'basics'));
$name = esc_html($category->name);
echo '<a href="' . $link . '" title="' . sprintf(esc_html__('Посмотреть все записи в категории %s', 'text-domain'), $name) . '">' . $name . '</a> ';
}
}
get_footer();
?>
Пояснение кода:
-
Получение постов: Мы используем класс
WP_Query
для извлечения записей пользовательского типа ‘services’, фильтруя их по таксономии ‘basics’. Параметр ‘paged’ обеспечивает поддержку пагинации, что важно для архивных страниц. -
Вывод постов: Цикл
while
обрабатывает каждый пост, а функцияthe_posts_pagination()
добавляет навигационные ссылки для перехода между страницами. -
Проверка наличия записей: Используется функция
have_posts()
, что позволяет избежать ошибок при отсутствии данных. -
Получение и отображение терминов: Мы выводим термины пользовательской таксономии ‘basics’ для текущего поста. Убедитесь, что используете правильный слаг таксономии и проверяете на ошибки.
-
Экранирование значений: Для повышения безопасности и предотвращения XSS-уязвимостей все выводимые пользователем или сторонним содержимым значения экранируются с помощью
esc_url()
иesc_html()
.
Заключение
В этом ответе мы рассмотрели, как правильно отобразить пользовательскую таксономию на архивной странице в WordPress. Убедитесь, что используете правильные значения и структуру кода, чтобы он был не только функциональным, но и безопасным. Следуйте стандартам разработки WordPress для достижения наилучших результатов и надежности вашего сайта.