Wyświetlaj tytuł Yoast WordPress SEO w szablonie archiwum

14

Wtyczka SEO WordPress firmy Yoast pozwala użytkownikom dodawać tytuły SEO i opisy meta do stron archiwum terminów taksonomicznych. Są one następnie używane w nagłówku dokumentu.

Próbuję wyświetlić tytuł SEO warunków taksonomii jako H1 w moim szablonie archiwum taksonomii.

Aby to zrobić w poście, typie postu lub stronie jest łatwe:

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

W przypadku szablonów archiwów to nie działa.

Czy ktoś wie, jak to zrobić?

Przykład zrzutu ekranu

To jest tytuł określonego terminu tagu. Próbuję wyświetlić ten tytuł - ale potem dla niestandardowego terminu systematyki - w moich szablonach archiwum.

Ekran edycji archiwum znaczników

Kod końcowy

Tego właśnie użyłem w swoim archive.phpszablonie. Działa, jeśli używasz niestandardowej taksonomii. W przypadku tagów lub kategorii zapoznaj się z odpowiedzią Mike Madern poniżej.

<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
źródło

Odpowiedzi:

19

Zdobądź archiwalne tytuły SEO

Jeśli zdefiniowałeś tytuł archiwum Niestandardowy typ postu, możesz go uzyskać poprzez:

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

echo apply_filters( 'the_title', $title );

Pamiętaj, aby zastąpić POST_TYPEwłasnym niestandardowym typem postu.

Aby wyświetlić wszystkie wpseo_titlezmienne, możesz użyć:

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

Możesz więc łatwo wybrać ten, którego potrzebujesz.

Zdobądź tytuły SEO

Kategorie

Za pomocą tego kodu możesz uzyskać zdefiniowany przez siebie tytuł 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 );

Tagi

Za pomocą tego kodu możesz uzyskać zdefiniowany przez siebie tytuł 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 );

Aby wyświetlić wszystkie wpseo_taxonomy_metazmienne, możesz użyć:

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

W ten sposób możesz zobaczyć strukturę i dostępne zmienne.

Mike Madern
źródło
Dodano tytuł w SEO > tytuły i meta > Typy postów ?
Mike Madern
Poprawiłem odpowiedź dzięki rozwiązaniu :-)
Mike Madern
Zgaduję, że przegapiłeś moją ostatnią edycję: -PI dodałem wersję z $tag_id.
Mike Madern
1
Dzięki bardzo za kod, nigdy nie będę w stanie tego rozgryźć. Wprowadziłem kilka drobnych zmian, aby działało z niestandardowymi systematykami.
Mattvic
To jest świetne. Musiałem jednak użyć get_queried_object()->term_id, get_query_var()ponieważ pierwszy zwraca identyfikator, drugi zwraca ślimak, przez co kod generuje powiadomienia o „niezdefiniowanym indeksie”. Upewnij się również, czy coś jest ustawione $meta['post_tag|category'], ponieważ otrzymasz również niezdefiniowane indeksy. (WP 4.2.2, btw)
cabgfx
5

Na stronie archiwum w pętli post dodaj następujący wiersz kodu, aby działał

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

Powiedz mi, czy to działa dla Ciebie, czy dam inne rozwiązanie.

Vinod Dalvi
źródło
To niestety nie zadziałało. Pokazuje tytuł SEO pierwszego posta w archiwum. Prawdopodobnie będę musiał zanurzyć się w bazie danych, aby zobaczyć, gdzie są przechowywane te dane.
Mattvic,
Czy używasz go w pętli? Czy możesz mi pokazać kod?
Vinod Dalvi
Dodałem swój kod. Nie jestem pewien, czy wyjaśniłem, że chcę wypisać tytuł strony, a nie tytuły każdego posta w pętli.
Mattvic,
Właśnie tego szukałem. Wyświetla tytuł SEO w pętli. Ponadto zamieniłem get_the_ID () na $ post-> ID
gerbz
to ratuje mi życie. dobrze ..
Mukii kumar
0

Uzyskiwanie słowa kluczowego dla kategorii i tagów

Aby programowo uzyskać słowo kluczowe Focus kategorii lub tagu, możesz użyć jednej z dwóch metod:

            /** 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'];
                }
            }

Jest to w zasadzie podejście zastosowane przez Mike'a na końcu jego postu.

lub

            /** 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' );
                }
            }

Wolę drugie podejście, ponieważ w ten sposób nie muszę samodzielnie pobierać opcji meta.

W twoim przypadku functions.phpmożesz chcieć przetestować, if class_exists( 'WPSEO_Taxonomy_Meta' )a następnie zawinąć funkcję Yoast we własną funkcję, aby być bezpiecznym na wypadek, gdybyś kiedykolwiek przestał używać Yoast SEO.

Trochę tła

Jak wspomniano w pierwotnym pytaniu, coś takiego get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);nie będzie działać dla kategorii i stron (nic nie zwróci).

Dlaczego tak jest?

Jest tak, ponieważ dla kategorii i tagów słowo kluczowe focus jest zapisywane w innym miejscu w bazie danych. Zamiast wp_postmetajak zwykle zapisywany w tabeli, jest zakopany głęboko w wp_optionsstole, jako obiekt JSON.

Powyższe metody pozwalają nam uzyskać dostęp do tych wartości.


Wreszcie, jeśli jesteś podobny do mnie i nie pamiętasz nazwy taksonomii (np .: nie jest oczywiste, dlaczego tagi używają taksonomii, post_taga nie tylko tag, po prostu sprawdź adresy URL podczas edycji kategorii lub tagu: pokaże się …taxonomy=category…lub jak.

Fabien Snauwaert
źródło
0

Odpowiedz Uzyskiwanie słowa kluczowego dla kategorii i tagów

// działa, dziękuję
// z resztą interfejsu API

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

plugin.in użyj Metoda 1

zmień linię

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

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

Chaiiz Rataphan
źródło