Отобразить конкретную таксономию

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

У меня есть пользовательский тип записи ЛОКАЦИИ
У меня есть пользовательская таксономия ДАННЫЕ
В рамках ДАННЫХ есть список архитектурных достопримечательностей
На некоторых страницах/записях я хочу вставить конкретную достопримечательность из списка таксономии вместо отображения всего списка.

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

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

function list_terms_custom_taxonomy( $atts) {
extract( shortcode_atts( array(
    'custom_taxonomy' => '',
), $atts ) );

ob_start();
global $post;
$string1 = '<ul class="tax_listing">';
$string1 .= get_the_term_list( $post->ID , $custom_taxonomy, '<li>', '</li>' . ', ' . '<li>', '</li>' );
$string1 .= ob_get_clean();
$string1 .= '</ul>';
return $string1;
}

add_shortcode( 'wp', 'list_terms_custom_taxonomy' );
add_filter('widget_text', 'do_shortcode');

Дополнительная информация:
Я использую плагин TYPES.

вам нужно использовать этот код, чтобы получить все термины:

 <?php $custom_terms= get_terms('locations');                          
       foreach($custom_terms as $term):
 ?>
       <a href="https://wordpress.stackexchange.com/questions/174504/<?php echo get_term_link( $term->name,"locations' ); ?>" class="browse_more"><?phpecho $term->name; ?>
       </a>  
 <?php   endforeach;               
 ?> 

Это сгенерирует все термины, и когда вы нажмете на термин, вы будете перенаправлены на страницу этой конкретной пользовательской записи, где вы сможете использовать цикл, чтобы получить все записи для этой конкретной категории.
Вам нужно будет создать файл taxonomy.php

Поместите туда следующий код

<?php
    $term = get_queried_object();
    $args =array(
                 'post_type' => 'packages',
                 'posts_per_page' =>6, 
                 'tax_query' =>
                         array(
                               array(
                                     'taxonomy' => 'locations',
                                     'field'    => 'name',
                                     'terms'    => $term->name,
                                     ),
                               ),
                  );
  $loop = new WP_Query( $args );                                             
  if($loop->have_posts()):while ( $loop->have_posts() ): $loop->the_post();
the_title();
the_content();
endwhile;
endif;
?>

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

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

Для реализации задачи по отображению конкретного термина таксономии в вашем кастомном типе записей "LOCATIONS" с таксономией "LANDMARKS", мы можем создать шорткод, который позволит вам делать это. При этом пользователи смогут кликать на термин и переходить к страницам с постами, связанными с этим термином.

Шаги для достижения цели:

  1. Создадим шорткод для отображения конкретного термина таксономии.

Вы можете создать массив доступных терминов и подключить к нему конкретный термин, используя его идентификатор или слаг. Вот пример кода, который можно добавить в файл functions.php вашей темы:

function list_specific_taxonomy_term($atts) {
    // Извлекаем атрибуты шорткода
    $atts = shortcode_atts(array(
        'taxonomy' => 'landmarks', // Название вашей таксономии
        'term_slug' => '', // Слаг термина, который нужно отобразить
    ), $atts);

    // Получаем термин по его слагу
    $term = get_term_by('slug', $atts['term_slug'], $atts['taxonomy']);

    // Если термин существует, создаем ссылку
    if ($term) {
        return '<a href="' . esc_url(get_term_link($term)) . '">' . esc_html($term->name) . '</a>';
    }

    return 'Термин не найден';
}

add_shortcode('specific_term', 'list_specific_taxonomy_term');

С этим шорткодом вы сможете использовать следующий формат для отображения конкретного термина:

[specific_term taxonomy="landmarks" term_slug="название-термина"]
  1. Создание страницы для отображения связанных постов.

Чтобы отобразить посты, связанные с выбранным термином, вам нужно будет создать файл taxonomy-landmarks.php, в котором будет реализован основной вывод постов по выбранному термину.

Пример кода для этого файла:

<?php
get_header();

$term = get_queried_object();
$args = array(
    'post_type' => 'locations',
    'posts_per_page' => 6,
    'tax_query' => array(
        array(
            'taxonomy' => 'landmarks',
            'field'    => 'slug',
            'terms'    => $term->slug,
        ),
    ),
);

$loop = new WP_Query($args);
if ($loop->have_posts()) {
    while ($loop->have_posts()) {
        $loop->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<div>' . get_the_content() . '</div>';
    }
} else {
    echo 'Нет постов для отображения.';
}

wp_reset_postdata();
get_footer();
?>

Заключение

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

Если у вас есть дополнительные вопросы или если вам потребуется помощь в других аспектах работы с WordPress, не стесняйтесь обращаться!

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

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