Gibt es eine Möglichkeit, den Yoast-Titel mithilfe der Yoast-Variablen in eine Seite zu bekommen? (dh %%Titel%%)

Lesezeit: 4 Minuten

Benutzeravatar von Hasan Tareq
Hasan Tarek

Ich muss eine Funktion erstellen, damit ich diese auf jeder Seite verwenden kann, die sich außerhalb der regulären WordPress-Seite befindet. Ich meine wp_head() wird dort nicht platziert. Ich brauche es für einen bestimmten Zweck.

Der Zweck ist für AMP (ampproject.org), eine Seite, auf der ich kein CSS oder JavaScript verwenden kann. Deshalb brauche ich das; Ich muss eine Funktion bei platzieren wp_title() damit der Yoast-Titel dort platziert wird.

Ich brauche so etwas:

function yoastVariableToTitle($variable){
    return yoast_vaialble_to_show_title($variable);
}

  • Möchtest du nur den Titel(Namen), der in meinem Yoast eingestellt ist? oder der vollständige Ausdruck %%title%% %%page%% %%sep%% %%sitename%% ??

    – Raunak Gupta

    28. Dezember 2016 um 13:13 Uhr

  • Ganzer Satz ist gut.

    – Hasan Tarek

    30. Dezember 2016 um 6:01 Uhr

  • Ich habe meine Antwort aktualisiert, bitte überprüfen Sie sie, der 2. Teil wird von Ihnen benötigt (dh So erhalten Sie den vollständigen Metatitel der Seite/des Beitrags:).

    – Raunak Gupta

    31. Dezember 2016 um 16:49 Uhr

Benutzeravatar von Raunak Gupta
Raunak Gupta

Standardmäßig nimmt Yoast ein Format als an %%title%% %%page%% %%sep%%
%%sitename%%
und speichert in wp_postmeta Tisch unter
_yoast_wpseo_title Taste.

Um nur den Titel der Seite/des Beitrags zu erhalten:

function yoastVariableToTitle($post_id) {
    $yoast_title = get_post_meta($post_id, '_yoast_wpseo_title', true);
    $title = strstr($yoast_title, '%%', true);
    if (empty($title)) {
        $title = get_the_title($post_id);
    }
    return $title;
}

Es kann 2 Möglichkeiten mit geben SEO-Titel

Fall I: Admin tritt ein %%title%% %%page%% %%sep%% %%sitename%% In SEO-Titel Feld, dann gibt der obige Code Post/Page zurück Standardtitel.

Fall II: Admin tritt ein My Custom Title %%page%% %%sep%% %%sitename%% In SEO-Titel Feld, dann wird der obige Code zurückgegeben Mein benutzerdefinierter Titel.


So erhalten Sie den vollständigen Metatitel der Seite/des Beitrags:

function yoastVariableToTitle($post_id) {

    $yoast_title = get_post_meta($post_id, '_yoast_wpseo_title', true);
    $title = strstr($yoast_title, '%%', true);
    if (empty($title)) {
        $title = get_the_title($post_id);
    }
    $wpseo_titles = get_option('wpseo_titles');

    $sep_options = WPSEO_Option_Titles::get_instance()->get_separator_options();
    if (isset($wpseo_titles['separator']) && isset($sep_options[$wpseo_titles['separator']])) {
        $sep = $sep_options[$wpseo_titles['separator']];
    } else {
        $sep = '-'; //setting default separator if Admin didn't set it from backed
    }

    $site_title = get_bloginfo('name');

    $meta_title = $title . ' ' . $sep . ' ' . $site_title;

    return $meta_title;
}

Hoffe das hilft!

Seit Yoast 14.0 ist das jetzt viel einfacher. Mit diesem Code erhalten Sie den Titel der aktuellen Seite:

YoastSEO()->meta->for_current_page()->title;

Quelle: https://developer.yoast.com/blog/yoast-seo-14-0-using-yoast-seo-surfaces/

  • Ein einfacher und besserer Ansatz.

    – Manoj Mohan

    11. Oktober 2022 um 9:42 Uhr

Benutzeravatar von WP Punk
WP-Punk

Sie haben sehr schwierige Entscheidungen. Ich habe eine einfachere Lösung:

function get_post_title( WP_Post $post ): string {
    $yoast_title = get_post_meta( $post->ID, '_yoast_wpseo_title', true );
    if ( empty( $yoast_title ) ) {
        $wpseo_titles = get_option( 'wpseo_titles', [] );
        $yoast_title  = isset( $wpseo_titles[ 'title-' . $post->post_type ] ) ? $wpseo_titles[ 'title-' . $post->post_type ] : get_the_title();
    }

    return wpseo_replace_vars( $yoast_title, $post );
}

Und zur Beschreibung:

function get_post_description( WP_Post $post ): string {
    $yoast_post_description = get_post_meta( $post->ID, '_yoast_wpseo_metadesc', true );
    if ( empty( $yoast_post_description ) ) {
        $wpseo_titles           = get_option( 'wpseo_titles', [] );
        $yoast_post_description = isset( $wpseo_titles[ 'metadesc-' . $post->post_type ] ) ? $wpseo_titles[ 'metadesc-' . $post->post_type ] : '';
    }

    return wpseo_replace_vars( $yoast_post_description, $post );
}

Die Problemumgehung verwende ich in meinem Plugin mit Funktionen aus class-frontend.php (Klasse von Yoast). Es funktioniert außerhalb der Schleife, geben Sie ihm einfach die ID eines Beitrags:

function convert_yoast_title ($post_id) {
    $string =  WPSEO_Meta::get_value( 'title', $post_id );
    if ($string !== '') {
        $replacer = new WPSEO_Replace_Vars();

        return $replacer->replace( $string, get_post($post_id) );
    } 
    return ''; // if not found - returns empty string
}

Einfach können Sie tun:

$title = wp_title( '-', false, '' );

Benutzeravatar von sergekol
sergekol

Ich landete bei Raunak Guptas Skript und musste es ändern, um die Blog-Beschreibung im Titel der Hauptseite richtig anzuzeigen. Hier die modifizierte Variante:

function yoastVariableToTitle($post_id) {

    $yoast_title = get_post_meta($post_id, '_yoast_wpseo_title', true);
    $title = strstr($yoast_title, '%%', true);
    if ( !is_front_page() ) {
        $title = strstr( $yoast_title, '%%', true );
    } else {
        $title = get_bloginfo( 'description' );
    }
    $wpseo_titles = get_option('wpseo_titles');

    $sep_options = WPSEO_Option_Titles::get_instance()->get_separator_options();
    if (isset($wpseo_titles['separator']) && isset($sep_options[$wpseo_titles['separator']])) {
        $sep = $sep_options[$wpseo_titles['separator']];
    } else {
    $sep = '-'; //setting default separator if Admin didn't set it from backed
    }

    $site_title = get_bloginfo('name');

    $meta_title = $title . ' ' . $sep . ' ' . $site_title;

    return $meta_title;

}

1442660cookie-checkGibt es eine Möglichkeit, den Yoast-Titel mithilfe der Yoast-Variablen in eine Seite zu bekommen? (dh %%Titel%%)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy