it-swarm.com.de

der Filter wp_title hat keine Auswirkung auf das Tag <title>

Ich habe gerade den folgenden Filter in die functions.php -Datei meines Themas eingefügt:

function change_the_title() {
    return 'My modified title';
}
add_filter('wp_title', 'change_the_title');

Und in meinem header.php:

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
    <meta charset="<?php bloginfo( 'charset' ); ?>">
    <meta id="viewport" name="viewport" content="width=device-width">
    <link rel="profile" href="http://gmpg.org/xfn/11">
    <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">
    <?php wp_head(); ?>
</head>
<body <?php body_class();?>>

Dann habe ich festgestellt, dass sich der Titel meiner SeiteNICHTgeändert hat! Und das Title-Tag wurde in die wp_head -Funktion eingefügt.

Wenn ich die Funktion wp_title im Header manuell aufrufe, wird der erwartete Wert zurückgegeben.

Was ist los? Wie kann ich das umgehen?


Ergänzung: Meine WordPress-Version ist 4.4.

8
Alfred Huang

Ich fand schließlich heraus, dass der WordPress-Kerncode geändert wurde, siehe den folgenden Code.

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

Daher injiziert der Core nach 4.4 das Ergebnis wp_title nicht in das Header-Tag <title>, sondern macht dasselbe mit einer neuen Funktion wp_get_document_title.

Also können wir stattdessen dasselbe tun, indem wir:

1. Ändern Sie den Titel direkt:

add_filter('pre_get_document_title', 'change_the_title');
function change_the_title() {
    return 'The expected title';
}

2. Filtern der Titelteile:

add_filter('document_title_parts', 'filter_title_part');
function filter_title_part($title) {
    return array('a', 'b', 'c');
}

Weitere Informationen finden Sie hier: https://developer.wordpress.org/reference/functions/wp_get_document_title/

PS: Ein Blick in die Quelle der Funktion wp_get_document_title ist eine gute Idee, die darin enthaltenen Hooks sagen viel aus.

30
Alfred Huang

Nicht sicher, ob die Variable injiziert werden muss, aber versuchen Sie es.

function change_the_title($title) {
    return 'My modified title';
}
add_filter('wp_title', 'change_the_title');
0
omer Farooq