2015-12-14 3 views
8

ich fügen Sie einfach den folgenden Filter in meinem Thema functions.php Datei:Wordpress 4.4+: wp_title Filter nimmt keinen Einfluss auf die `` <title> Tag

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 Ich habe den Titel meiner Seite gefunden NICHT geändert! Und der Title-Tag wurde in die wp_head-Funktion injiziert.

Mehr, wenn ich die Funktion wp_title manuell im Header aufrufen, gibt es den erwarteten Wert zurück.

Was ist los? Wie kann ich das umgehen?


Zusatz: Meine WordPress Version ist 4.4.

Antwort

26

Endlich habe ich herausgefunden, dass der WordPress-Code geändert wurde, siehe unten stehenden 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"; 
} 

So, nach 4.4, kann der Kern das wp_title Ergebnis in den Header <title> Tag nicht injizieren, aber mit einer neuen Funktion wp_get_document_title das gleiche tun.

Anstatt also können wir das gleiche tun durch:

1. Titeländerung direkt:

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

2. Filterung der Titel Teile:

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

Für mehr, sehen Sie die Details 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 Haken in denen viel erzählt.

+2

Danke @fish_ball einfach perfekte Antwort. – wesamly

+2

ENDLICH! Jeder andere Beitrag zu diesem Thema ist falsch - genagelt! Vielen Dank! –

+0

Man ... Manchmal hasse ich WordPress. Warum war das so schwer zu finden? –

-2

Sie title in Ihrem head Tag fehlen, hinzufügen

<title><?php wp_title('|', true, 'left'); ?></title> Ihre wp_filter normalerweise in <head> Tag arbeiten.

+0

Vielen Dank, aber ich habe endlich die Lösung selbst gefunden. –

+1

Wir brauchen das nicht, weil die Kernfunktion 'wp_head()' die Injektion durchführt. –

0

Nicht sicher, ob es notwendig ist, die Variable zu injizieren, aber versuchen Sie es.

+0

Danke, aber ich habe die Lösung selbst gefunden. –

+0

Großartig, wusste nicht darüber :) –

Verwandte Themen