Zeigen Sie den Yoast WordPress SEO-Titel in der Archivvorlage an

13

Das WordPress SEO-Plugin von Yoast ermöglicht es Benutzern, SEO-Titel und Meta-Beschreibungen zu Taxonomie-Termarchivseiten hinzuzufügen. Diese werden dann im Kopf des Dokuments verwendet.

Ich versuche, den SEO-Titel der Taxonomiebegriffe als H1 in meiner Taxonomiearchivvorlage anzuzeigen.

Dies in einem Beitrag, Beitragstyp oder einer Seite zu tun, ist einfach:

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

Bei Archivvorlagen funktioniert das nicht.

Weiß jemand, wie man das zum Laufen bringt?

Screenshot Beispiel

Dies ist der Titel eines bestimmten Tag-Begriffs. Ich versuche, diesen Titel - allerdings für einen benutzerdefinierten Taxonomiebegriff - in meinen Archivvorlagen anzuzeigen.

Der Tag-Archiv-Bearbeitungsbildschirm

Endgültiger Code

Dies ist, was ich in meiner archive.phpVorlage verwendet habe. Es funktioniert, wenn Sie eine benutzerdefinierte Taxonomie verwenden. Tags oder Kategorien finden Sie in der Antwort von Mike Madern weiter unten.

<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
quelle

Antworten:

19

Holen Sie sich Archiv SEO-Titel

Wenn Sie einen benutzerdefinierten Beitragstyp-Archivtitel definiert haben, können Sie diesen folgendermaßen abrufen:

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

echo apply_filters( 'the_title', $title );

Denken Sie daran, POST_TYPEdurch Ihren eigenen benutzerdefinierten Beitragstyp zu ersetzen .

Um alle wpseo_titleVariablen anzuzeigen , können Sie Folgendes verwenden:

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

So können Sie ganz einfach die auswählen, die Sie benötigen.

Holen Sie sich Term SEO-Titel

Kategorien

Mit diesem Code erhalten Sie den von Ihnen definierten SEO-Titel:

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

Stichworte

Mit diesem Code erhalten Sie den von Ihnen definierten SEO-Titel:

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

Um alle wpseo_taxonomy_metaVariablen anzuzeigen , können Sie Folgendes verwenden:

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

Auf diese Weise können Sie die Struktur und die verfügbaren Variablen anzeigen.

Mike Madern
quelle
Sie hinzugefügt , um den Titel in SEO > Titel & metas > Beitragstypen ?
Mike Madern
Ich verbesserte meine Antwort mit der Lösung :-)
Mike Madern
Ich vermute, du hast meine letzte Post-Bearbeitung verpasst: -PI hat eine Version mit hinzugefügt $tag_id.
Mike Madern
1
Vielen Dank für den Code, ich würde das nie herausfinden können. Ich habe ein paar kleine Änderungen vorgenommen, damit es mit benutzerdefinierten Taxonomien funktioniert.
Mattvic
Das ist toll. get_queried_object()->term_idStattdessen musste ich verwenden , dass get_query_var()der erste die ID und der zweite den Slug zurückgibt, sodass der Code „undefinierten Index“ anzeigt. Achten Sie auch darauf zu überprüfen , ob es ist alles Set an $meta['post_tag|category'], wie Sie undefinierten Index bemerkt auch bekommen. (WP 4.2.2, übrigens)
cabgfx
5

Fügen Sie auf der Archivseite im Postloop die folgende Codezeile hinzu, damit es funktioniert

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

Sagen Sie mir, ob es für Sie funktioniert, oder ich werde eine andere Lösung anbieten.

Vinod Dalvi
quelle
Das hat leider nicht geklappt. Es zeigt den SEO-Titel des ersten Beitrags im Archiv. Ich muss wahrscheinlich in die DB eintauchen, um zu sehen, wo diese Daten gespeichert sind.
Mattvic
Verwenden Sie es in Schleife? Können Sie mir den Code zeigen?
Vinod Dalvi
Ich habe meinen Code hinzugefügt. Ich bin mir nicht sicher, ob ich erklärt habe, dass ich den Seitentitel ausgeben möchte, nicht die Titel der einzelnen Posts in der Schleife.
Mattvic
Genau das habe ich gesucht. Gibt den SEO-Titel in der Schleife aus. Außerdem habe ich get_the_ID ()
gerbz
Das rettet mein Leben. gut ..
Mukii Kumar
0

Abrufen des Schlüsselworts focus für Kategorien und Tags

Um das Schlüsselwort focus einer Kategorie oder eines Tags programmgesteuert abzurufen, können Sie eine der beiden folgenden Methoden verwenden:

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

Dies ist im Grunde der Ansatz, den Mike am Ende seines Beitrags verfolgt.

oder

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

Ich bevorzuge in der Regel den zweiten Ansatz, da ich auf diese Weise die Metaoption nicht selbst abrufen oder kaufen muss.

In Ihrem functions.phpkönnen Sie testen wollen if class_exists( 'WPSEO_Taxonomy_Meta' )und dann wickeln vielleicht die Yoast Funktion in eine functon der eigenen, für den Fall , sicher zu sein waren Sie jemals mit Yoast SEO auf der ganzen Linie zu stoppen.

Etwas Hintergrund

Wie in der ursprünglichen Frage erwähnt, get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);funktioniert etwas nicht für Kategorien und Seiten (es wird nichts zurückgegeben.)

Warum ist das so?

Dies liegt daran, dass für Kategorien und Tags das Schlüsselwort focus an einer anderen Stelle in der Datenbank gespeichert wird. Anstatt wp_postmetawie gewohnt in der Tabelle gespeichert zu werden , ist sie wp_optionsals JSON-Objekt tief in der Tabelle vergraben .

Mit den obigen Methoden können wir auf diese Werte zugreifen.


Wenn Sie wie ich sind und sich nicht an den Namen von Taxonomien erinnern können (z. B .: Es ist nicht klar, warum Tags Taxonomie verwenden post_tagund nicht nur tag, überprüfen Sie einfach die URLs, wenn Sie eine Kategorie oder ein Tag bearbeiten: es wird …taxonomy=category…oder angezeigt dergleichen.

Fabien Snauwaert
quelle
0

Antworten Das Fokus-Schlüsselwort für Kategorien und Tags erhalten

// es funktioniert danke
// mit ruhe api

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

plugin.in benutze Methode 1

Zeile ändern

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

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

Chaiiz Rataphan
quelle