Отобразить Yoast WordPress SEO заголовок в шаблоне архива

14

Плагин WordPress SEO от Yoast позволяет пользователям добавлять SEO-заголовки и мета-описания на страницы архива терминов таксономии. Затем они используются в заголовке документа.

Я пытаюсь отобразить название SEO терминов таксономии как H1 в моем шаблоне архива таксономии.

Чтобы сделать это в сообщении, типе сообщения или странице легко:

echo get_post_meta($post->ID, '_yoast_wpseo_title', true); 

На архивных шаблонах это не работает.

Кто-нибудь знает, как заставить это работать?

Пример скриншота

Это заголовок конкретного тега. Я пытаюсь отобразить этот заголовок - но затем для пользовательского термина таксономии - в моих шаблонах архива.

Экран редактирования архива тегов

Финальный код

Это то, что я использовал в своем archive.phpшаблоне. Это работает, если вы используете пользовательскую таксономию. Для тегов или категорий взгляните на ответ Майка Мадерна ниже.

<h1 class="archive-title">
<?php
if ( is_tax() ) :                                                                   
    $taxonomy = get_queried_object()->taxonomy;
    $term_id = get_queried_object()->term_id;
    $meta   = get_option( 'wpseo_taxonomy_meta' );
    $title  = $meta[$taxonomy][$term_id]['wpseo_title'];
    //printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );
    if ( isset($meta) && !empty($title) ) :         
        echo apply_filters( 'the_title', $title );
    else :
        single_term_title();    
    endif;
endif;                              
?>
</h1>  
Mattvic
источник

Ответы:

19

Получить Архив SEO названий

Если вы определили заголовок архива пользовательского типа поста, вы можете получить его:

$titles = get_option( 'wpseo_titles' );
$title  = $titles['title-ptarchive-POST_TYPE'];

echo apply_filters( 'the_title', $title );

Не забудьте заменить POST_TYPEсвой собственный тип сообщения.

Чтобы отобразить все wpseo_titleпеременные, вы можете использовать:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_titles' ), 1 ) );

Таким образом, вы можете легко выбрать тот, который вам нужен.

Получить термин SEO названия

категории

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

$cat_id = get_query_var( 'cat' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['category'][$cat_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

Теги

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

$tag_id = get_query_var( 'tag' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['post_tag'][$tag_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

Чтобы отобразить все wpseo_taxonomy_metaпеременные, вы можете использовать:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );

Таким образом, вы можете увидеть структуру и доступные переменные.

Майк Мадерн
источник
Вы добавили заголовок в SEO > title & metas > Типы сообщений ?
Майк Мадерн,
Я улучшил свой ответ с помощью решения :-)
Mike Madern
Я предполагаю, что вы пропустили мой последний пост редактирования: -PI добавил версию с $tag_id.
Майк Мадерн,
1
Большое спасибо за код, я никогда не смогу понять это. Я сделал несколько небольших изменений, чтобы заставить его работать с пользовательскими таксономиями.
Матвич
Это круто. get_queried_object()->term_idВместо этого мне пришлось использовать , так get_query_var()как первый возвращает идентификатор, второй возвращает слаг, заставляя код выдавать уведомления «неопределенный индекс». Кроме того , позаботьтесь , чтобы проверить, есть это что - нибудь набор на $meta['post_tag|category'], как вы получите неопределенные индексных уведомления , а также. (WP 4.2.2, кстати)
cabgfx
5

На странице архива в цикле сообщений добавьте следующую строку кода, чтобы она работала

echo get_post_meta(get_the_ID(), '_yoast_wpseo_title', true); 

Скажите, работает ли он для вас, или я предоставлю другое решение.

Винод Далви
источник
К сожалению, это не сработало. Показывает заголовок SEO первого поста в архиве. Мне, вероятно, придется погрузиться в БД, чтобы увидеть, где хранятся эти данные.
Матвич
Вы используете это в цикле? Можете ли вы показать мне код?
Винод Дальви,
Я добавил свой код Не уверен, объяснил ли я, что хочу выводить заголовок страницы, а не заголовки каждого сообщения в цикле.
Матвич
Это именно то, что я искал. Выводит заголовок SEO в цикле. Также я заменил get_the_ID () на $ post-> ID
gerbz
это спасает мою жизнь. хорошо ..
Мукий Кумар
0

Получение фокуса ключевого слова для категорий и тегов

Чтобы получить ключевое слово focus для категории или тега программным способом, вы можете использовать любой из этих двух методов:

            /** Method 1. Tap into the options directly. **/
            $meta = get_option( 'wpseo_taxonomy_meta' ); // needed only once, so keep this outside/before your foreach loop.

            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo $meta['post_tag'][$tag->term_id]['wpseo_focuskw'];
                }
            }

Это в основном подход, использованный Майком в конце его поста.

или

            /** Method 2. Use Yoast's function. **/
            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo WPSEO_Taxonomy_Meta::get_term_meta( $tag->term_id, 'post_tag', 'focuskw' );
                }
            }

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

В вашем случае functions.phpвы можете захотеть проверить, if class_exists( 'WPSEO_Taxonomy_Meta' )а затем, возможно, обернуть функцию Yoast в свою собственную функцию, чтобы быть в безопасности на случай, если вы когда-нибудь перестанете использовать Yoast SEO.

Некоторый фон

Как упоминалось в оригинальном вопросе, что-то вроде get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);не будет работать для категорий и страниц (ничего не вернется).

Так почему так?

Это связано с тем, что для категорий и тегов ключевое слово focus сохраняется в другом месте базы данных. Вместо wp_postmetaобычного сохранения внутри таблицы, он погружается глубоко в wp_optionsтаблицу как объект JSON.

Методы выше позволяют нам получить доступ к этим значениям.


Наконец, если вы похожи на меня и не можете вспомнить названия таксономий (например: неясно, почему теги используют таксономию, post_tagа не просто tag, просто посмотрите URL-адреса при редактировании категории или тега: он покажет …taxonomy=category…или как.

Фабьен Снауварт
источник
0

Ответить Получение фокуса ключевого слова для категорий и тегов

// это работает спасибо
// с остальным API

get / wp-json / wp / v2 / Categories? slug =slug_name

plugin.in использовать метод 1

изменить линию

$meta['post_tag'][$tag->term_id]['wpseo_focuskw'];

$meta['category'][$param_post_id]['wpseo_focuskw'];

Чайиз Ратафан
источник