Wie kann ich den Titel einer WordPress-Seite ändern?

Lesezeit: 4 Minuten

Benutzeravatar von bugmagnet
Käfermagnet

Kontext: WordPress 5.4.5 und Yoast-SEO 3.7.1

Ich bin ein Plugin-Entwickler, der Zugriff auf die Website des Kunden hat. Auf der Seite ist Yoast 3.7.1 installiert. Ist das wichtig, denn egal was ich tue, ich kann die 404-Seiten nicht ändern title?

Auf anderen Seiten auf Stack Overflow, wo ähnliche Fragen gestellt wurden (zum Beispiel hier, hier und hier), haben die Antwortenden gefragt, ob die header.php bettet einen Aufruf korrekt ein wp_title(). Hier ist, was in den aktuellen Themen enthalten ist header.php an diesem Punkt:

<title><?php wp_title( '|', true, 'right' ); ?></title>

Interessanterweise auf meiner 404.php Buchseite, wp_get_document_title() sagt mir, dass der Dokumenttitel ist Seite nicht gefunden – XXXX obwohl die wp_title Der obige Aufruf gibt das Trennzeichen als an |. Yoasts Umschreiben von Titeln wurde deaktiviert, daher bin ich mir überhaupt nicht sicher, woher dieser Gedankenstrich kommt.

Mein Plugin führt einen REST-Aufruf durch und ruft Inhalte von außerhalb der Seite ab, um sie in die Seite einzufügen. Ein Teil dieses Inhalts ist der Text, der in der verwendet werden soll title.

Auf früheren Kundenseiten konnte ich Folgendes tun:

add_filter('wp_title', 'change_404_title');
function change_404_title($title) {
    if (is_404())
    {
        global $plugin_title;
        if (!empty($plugin_title))
        {
             $title = $plugin_title;
        }
    }
    return $title;
}

Auf dieser Seite funktioniert das jedoch nicht.

Ich habe versucht, basierend auf der verwendeten WordPress-Version, das Einhaken der pre_get_document_title filtern, z

add_filter('pre_get_document_title', 'change_404_title');

aber wieder ohne erfolg. Ich lese gerade etwas über Yoast…

  • Bist du dir sicher? global $plugin_title; Variable?

    – Khorshed Alam

    4. November 2016 um 5:25 Uhr

  • Total. Es heißt anders, aber es ist definitiv da.

    – Käfermagnet

    4. November 2016 um 5:40 Uhr

Benutzeravatar von Khorshed Alam
Khorshed Alam

wp_title ist seit Version 4.4 veraltet. Also sollten wir den neuen Filter verwenden pre_get_document_title. Ihr Code sieht gut aus, aber ich bin verwirrt global $plugin_title. Ich bitte Sie lieber darum versuchen das zuerst:

add_filter('pre_get_document_title', 'change_404_title');

function change_404_title($title) {
    if (is_404()) {
        return 'My Custom Title';
    }
    return $title;
}

Wenn es nicht funktioniert, versuchen Sie, die Priorität zu ändern, um Ihre Funktion spät auszuführen.

add_filter('pre_get_document_title', 'change_404_title', 50);

  • Ich mag das Aussehen des zweiten Vorschlags. Die Lösung könnte Priorität haben.

    – Käfermagnet

    4. November 2016 um 5:41 Uhr

  • Ja, Priorität IST die Lösung. Danke schön. Punkte und Lob an @KhorshedAlam

    – Käfermagnet

    4. November 2016 um 6:52 Uhr

Benutzeravatar von snnsnn
snnsnn

Wie der Dokumenttitel generiert wird, hat sich seit WordPress v4.4.0 geändert. Jetzt wp_get_document_title bestimmt, wie der Titel generiert wird:

/**
 * Displays title tag with content.
 *
 * @ignore
 * @since 4.1.0
 * @since 4.4.0 Improved title output replaced `wp_title()`.
 * @access private
 */
function _wp_render_title_tag() {
    if ( ! current_theme_supports( 'title-tag' ) ) {
        return;
    }

    echo '<title>' . wp_get_document_title() . '</title>' . "\n";
}

Hier ist der Code von v5.4.2. Dies sind die Filter, die Sie verwenden können, um das Titel-Tag zu manipulieren:

function wp_get_document_title() {
    /**
    * Filters the document title before it is generated.
    *
    * Passing a non-empty value will short-circuit wp_get_document_title(),
    * returning that value instead.
    *
    * @since 4.4.0
    *
    * @param string $title The document title. Default empty string.
    */
    $title = apply_filters( 'pre_get_document_title', '' );
    if ( ! empty( $title ) ) {
        return $title;
    }
    // --- snipped ---
    /**
    * Filters the separator for the document title.
    *
    * @since 4.4.0
    *
    * @param string $sep Document title separator. Default '-'.
    */
    $sep = apply_filters( 'document_title_separator', '-' );

    /**
    * Filters the parts of the document title.
    *
    * @since 4.4.0
    *
    * @param array $title {
    *     The document title parts.
    *
    *     @type string $title   Title of the viewed page.
    *     @type string $page    Optional. Page number if paginated.
    *     @type string $tagline Optional. Site description when on home page.
    *     @type string $site    Optional. Site title when not on home page.
    * }
    */
    $title = apply_filters( 'document_title_parts', $title );
    // --- snipped ---
    return $title;
}

Hier sind also zwei Möglichkeiten, wie Sie dies tun können.

Der erste verwendet die pre_get_document_title Filter, der die Titelgenerierung kurzschließt und somit performanter ist, wenn Sie keine Änderungen am aktuellen Titel vornehmen:

function custom_document_title( $title ) {
    return 'Here is the new title';
}

add_filter( 'pre_get_document_title', 'custom_document_title', 10 );

Der zweite Weg verwendet die document_title_separator Und document_title_parts Hooks für den Titel und das Titeltrennzeichen, die später in der Funktion ausgeführt werden, nachdem der Titel mit Funktionen wie generiert wurde single_term_title oder post_type_archive_title abhängig von der Seite, und kurz bevor die Title-Tags ausgegeben werden:

// Custom function should return a string
function custom_seperator( $sep ) {
   return '>';
}
add_filter( 'document_title_separator', 'custom_seperator', 10 );

// Custom function should return an array
function custom_html_title( $title ) {
   return array(
     'title' => 'Custom Title',
     'site'  => 'Custom Site'
    );
}
add_filter( 'document_title_parts', 'custom_html_title', 10 );

Fügen Sie dies zu Ihrer functions.php hinzu

function custom_wp_title($title) {

    if ( is_404() ) {
        $title="Custom 404 Title";
    }
    return $title;
}
add_filter( 'wp_title', 'custom_wp_title', 10, 2 );

10 – ist eine Prioritätsänderung, um andere Plugins wie SEO zu überschreiben

  • wp_title() sollte ursprünglich in 4.4 veraltet sein, wurde aber wieder eingeführt

    – Tokas

    4. November 2016 um 5:43 Uhr

1447080cookie-checkWie kann ich den Titel einer WordPress-Seite ändern?

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

Privacy policy