Visualizzare il titolo SEO di Yoast WordPress nel template di archivio

7 mar 2013, 12:09:36
Visualizzazioni: 45.4K
Voti: 17

Il plugin WordPress SEO di Yoast permette agli utenti di aggiungere titoli SEO e meta descrizioni alle pagine di archivio dei termini di tassonomia. Questi vengono poi utilizzati nell'head del documento.

Sto cercando di visualizzare il titolo SEO dei termini di tassonomia come H1 nel mio template di archivio tassonomia.

Per farlo in un post, tipo di post o pagina è semplice:

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

Nei template di archivio questo non funziona.

Qualcuno sa come farlo funzionare?

Esempio screenshot

Questo è il titolo di uno specifico termine tag. Sto cercando di visualizzare questo titolo - ma per un termine di tassonomia personalizzata - nei miei template di archivio.

La schermata di modifica dell'archivio tag

Codice finale

Questo è quello che ho finito per utilizzare nel mio template archive.php. Funziona se stai utilizzando una tassonomia personalizzata. Per i tag o le categorie dai un'occhiata alla risposta di Mike Madern qui sotto.

<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
Tutte le risposte alla domanda 4
5
23

Ottenere i titoli SEO degli archivi

Se hai definito un titolo personalizzato per l'archivio di un Custom Post Type, puoi ottenerlo con:

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

echo apply_filters( 'the_title', $title );

Ricordati di sostituire POST_TYPE con il tuo Custom Post Type.

Per visualizzare tutte le variabili wpseo_title, puoi usare:

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

In questo modo puoi facilmente selezionare quella che ti serve.

Ottenere i titoli SEO dei termini

Categorie

Usando questo codice puoi ottenere il titolo SEO che hai definito:

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

Tag

Usando questo codice puoi ottenere il titolo SEO che hai definito:

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

Per visualizzare tutte le variabili wpseo_taxonomy_meta, puoi usare:

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

In questo modo puoi vedere la struttura e le variabili disponibili.

7 mar 2013 12:39:38
Commenti

Hai aggiunto il titolo in SEO > titoli & meta > Tipi di post?

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

Ho migliorato la mia risposta con la soluzione :-)

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

Immagino tu abbia perso la mia ultima modifica al post :-P Ho aggiunto una versione con $tag_id.

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

Grazie mille per il codice, non sarei mai riuscito a capirlo da solo. Ho apportato alcune piccole modifiche per farlo funzionare con tassonomie personalizzate.

Mattvic Mattvic
7 mar 2013 14:45:50

Fantastico. Ho dovuto usare get_queried_object()->term_id invece di get_query_var() però, poiché il primo restituisce l'ID mentre il secondo restituisce lo slug, facendo sì che il codice generi avvisi di "indice non definito". Inoltre, assicurati di verificare se c'è qualcosa impostato in $meta['post_tag|category'], altrimenti riceverai anche qui avvisi di indice non definito. (WP 4.2.2, tra l'altro)

cabgfx cabgfx
20 mag 2015 13:48:44
7

Nella pagina di archivio, all'interno del loop degli articoli, aggiungi la seguente riga di codice per farlo funzionare

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

Fammi sapere se funziona per te o ti fornirò un'altra soluzione.

7 mar 2013 12:17:08
Commenti

Purtroppo non ha funzionato. Mostra il titolo SEO del primo post nell'archivio. Probabilmente dovrò esaminare il database per vedere dove sono memorizzati questi dati.

Mattvic Mattvic
7 mar 2013 12:22:32

Lo stai usando nel loop? Puoi mostrarmi il codice?

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

Ho aggiunto il mio codice. Non sono sicuro di aver spiegato che volevo visualizzare il titolo della pagina, non i titoli di ogni post nel loop.

Mattvic Mattvic
7 mar 2013 12:45:31

Questo è esattamente quello che stavo cercando. Restituisce il titolo SEO nel loop. Inoltre, ho sostituito get_the_ID() con $post->ID

gerbz gerbz
8 ago 2015 05:06:53

mi hai salvato la vita. ottimo..

Mukii kumar Mukii kumar
5 gen 2018 09:52:48

Per qualche motivo questo mi restituisce la meta descrizione, come se avessi usato _yoast_wpseo_metadesc

Versa Versa
9 gen 2018 15:11:05

@Versa Questo perché ho usato echo nel codice.

Vinod Dalvi Vinod Dalvi
10 gen 2018 10:31:42
Mostra i restanti 2 commenti
0

Ottenere la parola chiave focus per categorie e tag

Per ottenere la parola chiave focus di una Categoria o Tag programmaticamente, puoi utilizzare uno di questi due metodi:

            /** Metodo 1. Accedere direttamente alle opzioni. **/
            $meta = get_option( 'wpseo_taxonomy_meta' ); // necessario solo una volta, quindi mantieni questo al di fuori/prima del tuo ciclo foreach.

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

Questo è fondamentalmente l'approccio utilizzato da Mike alla fine del suo post.

oppure

            /** Metodo 2. Utilizzare la funzione di Yoast. **/
            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo WPSEO_Taxonomy_Meta::get_term_meta( $tag->term_id, 'post_tag', 'focuskw' );
                }
            }

Tendo a preferire il secondo approccio perché in questo modo non devo recuperare o preoccuparmi di ottenere l'opzione meta da solo.

Nel tuo functions.php, potresti voler testare if class_exists( 'WPSEO_Taxonomy_Meta' ) e poi magari avvolgere la funzione di Yoast in una tua funzione, per essere al sicuro nel caso in cui un giorno decidessi di smettere di usare Yoast SEO.

Alcuni dettagli tecnici

Come menzionato nella domanda originale, qualcosa come get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true); non funzionerà per categorie e pagine (restituirà nulla.)

Ma perché?

Questo perché, per categorie e tag, la parola chiave focus è salvata altrove nel database. Invece di essere salvata nella tabella wp_postmeta come al solito, è sepolta in profondità nella tabella wp_options, come un oggetto JSON.

I metodi sopra ci permettono di accedere a questi valori.


Infine, se sei come me e non riesci a ricordare il nome delle tassonomie (es: non è ovvio perché i tag usano la tassonomia post_tag e non semplicemente tag), basta controllare gli URL quando modifichi una categoria o un tag: mostrerà …taxonomy=category… o simili.

1 feb 2018 23:51:51
0

Risposta Ottenere la parola chiave principale per categorie e tag

// funziona, grazie
// con l'API REST

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

plugin.in usa il Metodo 1

modificare la riga

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

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

16 lug 2018 00:54:45