Відобразить SEO-заголовок Yoast WordPress в шаблоні архіву


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>  

Відповіді:


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 > заголовки та метасистеми > Типи публікацій ?
Майк Мадерн

Я покращив свою відповідь рішенням :-)
Майк Мадерн

Я здогадуюсь, що ти пропустив мою останню редакцію повідомлення: -ПІ додав версію $tag_id.
Майк Мадерн

1
Дякую за код, я ніколи не зміг би це зрозуміти. Я вніс кілька незначних змін, щоб змусити його працювати з користувацькими таксономіями.
Метвіч

Це чудово. Мені довелося використовувати get_queried_object()->term_idзамість того get_query_var(), що коли перший повертає ідентифікатор, другий повертає слизу, роблячи код кидання повідомлення про «невизначений індекс». Крім того, не забудьте перевірити, чи є що- небудь встановлене $meta['post_tag|category'], оскільки ви також отримаєте невизначені повідомлення про індекс. (WP 4.2.2, btw)
cabgfx

5

На сторінці архіву в циклі публікації додайте наступний рядок коду, щоб він працював

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

Скажіть, чи працює він для вас, або я запропоную інше рішення.


На жаль, це не спрацювало. У ній відображається назва SEO першої публікації в архіві. Напевно, мені доведеться зануритися в БД, щоб побачити, де зберігаються ці дані.
Метвіч

Ви використовуєте його в циклі? Чи можете ви показати мені код?
Вінод Далві

Я додав свій код. Не впевнений, чи пояснював я, що хочу вивести заголовок сторінки, а не заголовки кожної публікації в циклі.
Метвіч

Це саме те, що я шукав. Виводить назву SEO в циклі. Також я замінив get_the_ID () на $ post-> ID
gerbz

це рятує моє життя. добре ..
Mukii kumar

0

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

Щоб отримати ключове слово фокус категорії або тегу програмно, ви можете скористатися одним із цих двох методів:

            /** 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);не буде працювати для категорій і сторінок (воно нічого не поверне.)

То чому це?

Це тому, що для категорій та тегів ключове слово фокус зберігається в іншому місці бази даних. Замість того, щоб зберігати всередині wp_postmetaтаблиці, як зазвичай, він похований глибоко всередині wp_optionsтаблиці, як об’єкт JSON.

Наведені вище методи дозволяють отримати доступ до цих значень.


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


0

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

// це працює дякую
// з спокою api

get / wp-json / wp / v2 / категории? slug =slug_name

plugin.in Метод 1

змінити лінію

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.