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

7 мар. 2013 г., 12:09:36
Просмотры: 45.4K
Голосов: 17

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

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

Сделать это для записи, типа записи или страницы просто:

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

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

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

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

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

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

Итоговый код

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

<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>  
0
Все ответы на вопрос 4
5
23

Получение 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 ) );

Это поможет увидеть структуру и доступные переменные.

7 мар. 2013 г. 12:39:38
Комментарии

Вы добавили заголовок в SEO > Заголовки и мета > Типы записей?

Mike Madern Mike Madern
7 мар. 2013 г. 13:08:23

Я улучшил свой ответ, добавив решение :-)

Mike Madern Mike Madern
7 мар. 2013 г. 13:51:40

Полагаю, вы пропустили моё последнее редактирование сообщения :-P Я добавил версию с $tag_id.

Mike Madern Mike Madern
7 мар. 2013 г. 14:11:19

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

Mattvic Mattvic
7 мар. 2013 г. 14:45:50

Это отлично. Мне пришлось использовать get_queried_object()->term_id вместо get_query_var(), так как первый возвращает ID, а второй возвращает slug, из-за чего код выдавал уведомления "undefined index". Также важно проверять, установлено ли что-либо в $meta['post_tag|category'], иначе вы также получите уведомления о неопределенном индексе. (Кстати, WP 4.2.2)

cabgfx cabgfx
20 мая 2015 г. 13:48:44
7

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

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

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

7 мар. 2013 г. 12:17:08
Комментарии

К сожалению, это не сработало. Отображается SEO-заголовок первой записи в архиве. Вероятно, мне придется покопаться в базе данных, чтобы понять, где хранятся эти данные.

Mattvic Mattvic
7 мар. 2013 г. 12:22:32

Ты используешь это в цикле? Можешь показать мне код?

Vinod Dalvi Vinod Dalvi
7 мар. 2013 г. 12:28:13

Я добавил свой код. Не уверен, что я объяснил, что хотел вывести заголовок страницы, а не заголовки каждой записи в цикле.

Mattvic Mattvic
7 мар. 2013 г. 12:45:31

Именно это я и искал. Выводит SEO-заголовок в цикле. Также я заменил get_the_ID() на $post->ID

gerbz gerbz
8 авг. 2015 г. 05:06:53

это спасло мне жизнь. отлично..

Mukii kumar Mukii kumar
5 янв. 2018 г. 09:52:48

Почему-то выводит мета-описание для меня, как если бы я использовал _yoast_wpseo_metadesc

Versa Versa
9 янв. 2018 г. 15:11:05

@Versa Это потому, что я использовал echo в коде.

Vinod Dalvi Vinod Dalvi
10 янв. 2018 г. 10:31:42
Показать остальные 2 комментариев
0

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

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

            /** Метод 1. Прямое обращение к настройкам. **/
            $meta = get_option( 'wpseo_taxonomy_meta' ); // нужно только один раз, поэтому разместите это до цикла foreach.

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

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

Или

            /** Метод 2. Использование функции Yoast. **/
            $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); не сработает для рубрик и страниц (вернёт пустоту).

Почему так происходит?

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

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


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

1 февр. 2018 г. 23:51:51
0

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

// это работает, спасибо
// через REST 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'];

16 июл. 2018 г. 00:54:45