Вопрос или проблема
У меня есть пользовательская таксономия с названием 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>';
}
}
}
?>
Пояснение коду:
-
Настройка пользовательской таксономии: Убедитесь, что вы заменили
$yourTaxonomy
на ваше имя пользовательской таксономии (в данном случае ‘country’). -
Получение термина: Код получает связанные термины для вашего поста с помощью функции
get_the_terms()
. -
Проверка на наличие термина: Если категории есть, используется класс Yoast для получения основного термина. Если основной термин отсутствует, по умолчанию используется первая категория из списка.
-
Вывод категорий: Если термин найден, он отображается как ссылка. В противном случае просто выводится его имя.
-
Безопасный вывод данных: Используется
esc_url()
иesc_html()
для безопасного вывода URL и имен категорий, что предотвращает возможные уязвимости.
Этот код должен помочь вам отобразить основную категорию для пользовательской таксономии с использованием плагина Yoast SEO. Если у вас будут дополнительные вопросы, не стесняйтесь спрашивать!