Afișarea titlului SEO Yoast WordPress în șablonul de arhivă

7 mar. 2013, 12:09:36
Vizualizări: 45.4K
Voturi: 17

Plugin-ul WordPress SEO de la Yoast permite utilizatorilor să adauge titluri SEO și meta descrieri pentru paginile de arhivă ale termenilor de taxonomie. Acestea sunt apoi folosite în header-ul documentului.

Încerc să afișez titlul SEO al termenilor de taxonomie ca H1 în șablonul meu de arhivă taxonomie.

Pentru a face acest lucru într-o postare, tip de postare sau pagină este simplu:

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

Pe șabloanele de arhivă acest lucru nu funcționează.

Știe cineva cum să fac acest lucru să funcționeze?

Exemplu screenshot

Acesta este titlul unui termen specific de etichetă. Încerc să afișez acest titlu - dar pentru un termen de taxonomie personalizat - în șabloanele mele de arhivă.

Ecranul de editare pentru arhiva de etichete

Codul final

Acesta este codul pe care am ajuns să-l folosesc în șablonul meu archive.php. Funcționează dacă folosiți o taxonomie personalizată. Pentru etichete sau categorii, consultați răspunsul lui Mike Madern de mai jos.

<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'];
    //afișăm opțiunile taxonomiei pentru debug
    //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
Toate răspunsurile la întrebare 4
5
23

Obțineți titlurile SEO pentru arhive

Dacă ați definit un titlu personalizat pentru arhiva unui Custom Post Type, îl puteți obține astfel:

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

echo apply_filters( 'the_title', $title );

Nu uitați să înlocuiți POST_TYPE cu propriul vostru Custom Post Type.

Pentru a afișa toate variabilele wpseo_title, puteți folosi:

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

Astfel puteți selecta cu ușurință pe cea de care aveți nevoie.

Obțineți titlurile SEO pentru termeni

Categorii

Folosind acest cod puteți obține titlul SEO definit:

$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 );

Etichete

Folosind acest cod puteți obține titlul SEO definit:

$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 );

Pentru a afișa toate variabilele wpseo_taxonomy_meta, puteți folosi:

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

În acest fel puteți vedea structura și variabilele disponibile.

7 mar. 2013 12:39:38
Comentarii

Ai adăugat titlul în SEO > titluri & meta > Tipuri de postări?

Mike Madern Mike Madern
7 mar. 2013 13:08:23

Am îmbunătățit răspunsul meu cu soluția :-)

Mike Madern Mike Madern
7 mar. 2013 13:51:40

Presupun că ai ratat ultima mea editare a postării :-P Am adăugat o versiune cu $tag_id.

Mike Madern Mike Madern
7 mar. 2013 14:11:19

Mulțumesc mult pentru cod, nu aș fi reușit niciodată să îmi dau seama de asta. Am făcut câteva mici modificări pentru a-l face să funcționeze cu taxonomii personalizate.

Mattvic Mattvic
7 mar. 2013 14:45:50

Aceasta este minunat. A trebuit să folosesc get_queried_object()->term_id, în loc de get_query_var(), deoarece primul returnează ID-ul, iar celălalt returnează slug-ul, făcând ca codul să arunce notificări de "index nedefinit". De asemenea, aveți grijă să verificați dacă există ceva setat la $meta['post_tag|category'], deoarece veți primi și notificări de index nedefinit. (WP 4.2.2, apropo)

cabgfx cabgfx
20 mai 2015 13:48:44
7

Pe pagina de arhivă, în bucla de postări, adaugă următoarea linie de cod pentru a funcționa:

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

Spune-mi dacă funcționează pentru tine sau îți voi oferi o altă soluție.

7 mar. 2013 12:17:08
Comentarii

Din păcate, asta nu a funcționat. Afișează titlul SEO al primului post din arhivă. Probabil va trebui să mă uit în baza de date să văd unde sunt stocate aceste date.

Mattvic Mattvic
7 mar. 2013 12:22:32

Folosești asta într-o buclă? Poți să-mi arăți codul?

Vinod Dalvi Vinod Dalvi
7 mar. 2013 12:28:13

Am adăugat codul meu. Nu sunt sigur dacă am explicat că voiam să afișez titlul paginii, nu titlurile fiecărui post din buclă.

Mattvic Mattvic
7 mar. 2013 12:45:31

Exact asta căutam. Afișează titlul SEO în buclă. De asemenea, am înlocuit get_the_ID() cu $post->ID

gerbz gerbz
8 aug. 2015 05:06:53

asta mi-a salvat viața. bun..

Mukii kumar Mukii kumar
5 ian. 2018 09:52:48

Din anumite motive, asta afișează descrierea meta pentru mine, ca și cum aș fi folosit _yoast_wpseo_metadesc

Versa Versa
9 ian. 2018 15:11:05

@Versa Acest lucru se întâmplă pentru că am folosit echo în cod.

Vinod Dalvi Vinod Dalvi
10 ian. 2018 10:31:42
Arată celelalte 2 comentarii
0

Obținerea cuvântului cheie principal pentru categorii și etichete

Pentru a obține cuvântul cheie principal al unei Categorii sau Etichete programatic, puteți utiliza oricare dintre aceste două metode:

            /** Metoda 1. Acces direct la opțiuni. **/
            $meta = get_option( 'wpseo_taxonomy_meta' ); // necesar doar o dată, deci păstrați acest lucru în afara/înainte de bucla foreach.

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

Aceasta este practic abordarea folosită de Mike la sfârșitul postării sale.

sau

            /** Metoda 2. Utilizarea funcției Yoast. **/
            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo WPSEO_Taxonomy_Meta::get_term_meta( $tag->term_id, 'post_tag', 'focuskw' );
                }
            }

Tind să prefer a doua abordare deoarece în acest fel nu trebuie să obțin sau să mă preocup de obținerea opțiunii meta eu însumi.

În fișierul dvs. functions.php, ați putea dori să testați if class_exists( 'WPSEO_Taxonomy_Meta' ) și apoi poate să înfășurați funcția Yoast într-o funcție proprie, pentru a fi sigur în cazul în care ați înceta să mai utilizați Yoast SEO în viitor.

O scurtă explicație

Așa cum s-a menționat în întrebarea originală, ceva de genul get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true); nu va funcționa pentru categorii și pagini (va returna nimic.)

De ce se întâmplă acest lucru?

Asta se întâmplă deoarece, pentru categorii și etichete, cuvântul cheie principal este salvat în altă parte în baza de date. În loc să fie salvat în tabelul wp_postmeta ca de obicei, este îngropat adânc în interiorul tabelului wp_options, ca un obiect JSON.

Metodele de mai sus ne permit să accesăm aceste valori.


În final, dacă sunteți ca mine și nu vă puteți aminti numele taxonomiilor (de exemplu: nu este evident de ce etichetele folosesc taxonomia post_tag și nu doar tag), verificați pur și simplu URL-urile când editați o categorie sau o etichetă: va afișa …taxonomy=category… sau similar.

1 feb. 2018 23:51:51
0

Răspuns Obținerea cuvântului cheie pentru categorii și etichete

// funcționează, mulțumesc
// cu REST API

obține /wp-json/wp/v2/categories?slug=slug_name

plugin.in utilizează Metoda 1

schimbă linia

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

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

16 iul. 2018 00:54:45