как отобразить пользовательскую таксономию на странице архива?

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

<?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();
?>

Пояснение кода:

  1. Получение постов: Мы используем класс WP_Query для извлечения записей пользовательского типа ‘services’, фильтруя их по таксономии ‘basics’. Параметр ‘paged’ обеспечивает поддержку пагинации, что важно для архивных страниц.

  2. Вывод постов: Цикл while обрабатывает каждый пост, а функция the_posts_pagination() добавляет навигационные ссылки для перехода между страницами.

  3. Проверка наличия записей: Используется функция have_posts(), что позволяет избежать ошибок при отсутствии данных.

  4. Получение и отображение терминов: Мы выводим термины пользовательской таксономии ‘basics’ для текущего поста. Убедитесь, что используете правильный слаг таксономии и проверяете на ошибки.

  5. Экранирование значений: Для повышения безопасности и предотвращения XSS-уязвимостей все выводимые пользователем или сторонним содержимым значения экранируются с помощью esc_url() и esc_html().

Заключение

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

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

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