Yoast – Пользовательская таксономия – основная категория

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

У меня есть пользовательская таксономия с названием country. Я хотел бы отобразить только основную категорию. У меня установлен плагин Yoast, и именно с его помощью я устанавливаю основную категорию.

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

<?php
$primaryCat = new WPSEO_Primary_Term('category', get_the_ID());
$primaryCat = $primaryCat->get_primary_term();
$primaryCat = get_cat_name($primaryCat);

$categories = get_the_category();
foreach( $categories as $category ) {
   $defaultCat = $category->name;
   $defaultCatLink = get_category_link( $category->term_id );
}

if ( $primaryCat !== "" ) {
   $cat = new WPSEO_Primary_Term('category', get_the_ID());
   $cat = $cat->get_primary_term();

   $catName = get_cat_name($cat);
   $catLink = get_category_link($cat);

} else {
   $catName = $defaultCat;
   $catLink = $defaultCatLink;
}
?>

<h3><a href="https://wordpress.stackexchange.com/questions/338368/<?php echo $catLink; ?>"><?php echo $catName; ?></a></h3>

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

Спасибо, что нашли время рассмотреть мою проблему!!

Я нашел это и оно работает. Большое спасибо WP Munchies! https://wpmunchies.com/display-primary-category-using-yoasts-make-primary-feature/

<?php
// Заполните свою пользовательскую таксономию здесь
$yourTaxonomy = 'CUSTOM_TAXONOMY';
// ПОКАЗАТЬ ОСНОВНУЮ КАТЕГОРИЮ YOAST ИЛИ ПЕРВУЮ КАТЕГОРИЮ
$category = get_the_terms( $postId, $yourTaxonomy );
$useCatLink = true;
// Если у записи есть назначенная категория.
if ($category){
    $category_display = '';
    $category_link = '';
    if ( class_exists('WPSEO_Primary_Term') )
    {
        // Покажите 'основную' категорию записи, если эта функция Yoast доступна, и она установлена
        $wpseo_primary_term = new WPSEO_Primary_Term( 'event_cat', get_the_id() );
        $wpseo_primary_term = $wpseo_primary_term->get_primary_term();
        $term = get_term( $wpseo_primary_term );
        if (is_wp_error($term)) { 
            // Переход к первой категории (не Yoast), если возвращается ошибка
            $category_display = $category[0]->name;
            $category_link = get_bloginfo('url') . "https://wordpress.stackexchange.com/" . 'event-category/' . $term->slug;
        } else { 
            // Основная категория Yoast
            $category_display = $term->name;
            $category_link = get_term_link( $term->term_id );
        }
    } 
    else {
        // По умолчанию, отображает первую категорию в списке назначенных категорий WP
        $category_display = $category[0]->name;
        $category_link = get_term_link( $category[0]->term_id );
    }
    // Отображение категории
    if ( !empty($category_display) ){
        if ( $useCatLink == true && !empty($category_link) ){
        echo '<span class="post-category">';
        echo '<a href="'.$category_link.'">'.$category_display.'</a>';
        echo '</span>';
        } else {
        echo '<span class="post-category">'.$category_display.'</span>';
        }
    }

} 

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

Конечно! Если вы хотите отображать основную категорию для пользовательского таксономии, используя плагин Yoast SEO, вам необходимо внести некоторые изменения в код, который вы нашли. Давайте я оптимизирую вашу реализацию, чтобы она работала для вашей пользовательской таксономии, названной country.

Вот оптимизированный код:

<?php
// Укажите вашу пользовательскую таксономию здесь
$yourTaxonomy = 'country'; // Замените 'country' на название вашей таксономии
$useCatLink = true;
$postId = get_the_ID(); // Получаем ID текущего поста

// Получаем термины таксономии, связанные с постом
$category = get_the_terms($postId, $yourTaxonomy);

// Проверяем, есть ли у поста связанные термины
if ($category) {
    $category_display = '';
    $category_link = '';

    if (class_exists('WPSEO_Primary_Term')) {
        // Пытаемся получить основной термин (категорию) через Yoast
        $wpseo_primary_term = new WPSEO_Primary_Term($yourTaxonomy, $postId);
        $wpseo_primary_term = $wpseo_primary_term->get_primary_term();
        $term = get_term($wpseo_primary_term);

        if (is_wp_error($term)) {
            // Если произошла ошибка, отображаем первый термин по умолчанию
            $category_display = $category[0]->name;
            $category_link = get_term_link($category[0]->term_id);
        } else {
            // Основная категория из Yoast
            $category_display = $term->name;
            $category_link = get_term_link($term->term_id);
        }
    } else {
        // Если объект класса Yoast не существует, отображаем первую категорию по умолчанию
        $category_display = $category[0]->name;
        $category_link = get_term_link($category[0]->term_id);
    }

    // Отображаем категорию
    if (!empty($category_display)) {
        if ($useCatLink && !empty($category_link)) {
            echo '<span class="post-category">';
            echo '<a href="' . esc_url($category_link) . '">' . esc_html($category_display) . '</a>';
            echo '</span>';
        } else {
            echo '<span class="post-category">' . esc_html($category_display) . '</span>';
        }
    }
}
?>

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

  1. Настройка пользовательской таксономии: Убедитесь, что вы заменили $yourTaxonomy на ваше имя пользовательской таксономии (в данном случае ‘country’).

  2. Получение термина: Код получает связанные термины для вашего поста с помощью функции get_the_terms().

  3. Проверка на наличие термина: Если категории есть, используется класс Yoast для получения основного термина. Если основной термин отсутствует, по умолчанию используется первая категория из списка.

  4. Вывод категорий: Если термин найден, он отображается как ссылка. В противном случае просто выводится его имя.

  5. Безопасный вывод данных: Используется esc_url() и esc_html() для безопасного вывода URL и имен категорий, что предотвращает возможные уязвимости.

Этот код должен помочь вам отобразить основную категорию для пользовательской таксономии с использованием плагина Yoast SEO. Если у вас будут дополнительные вопросы, не стесняйтесь спрашивать!

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

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