Wordpress version 4.5.1
Ich versuche, Seitentitel für eine bestimmte Vorlage dynamisch zu aktualisieren. Nachdem wp_title()
ich viel gegraben und etwas über die Änderungen gelernt habe, versuche ich sie zu verwenden document_title_parts
. Ich kann den Filter jedoch überhaupt nicht zum Laufen bringen.
Ich bin in einem Kinderthema , functions.php
:
add_theme_support( 'title-tag' );
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
add_filter( 'document_title_parts', function( $title )
{
error_log('here');
return $title;
}, 10, 1 );
Ich habe beide Varianten des Hinzufügens von Themenunterstützung wie oben gezeigt ausprobiert, aber beim Betrachten meines Protokolls wird beim erneuten Laden der Seite nichts angezeigt. Das error_log
funktionierte mit anderen Funktionen (z. B. wp_title
), sodass die Fehlerprotokollierung funktioniert.
Ich habe auch versucht pre_get_document_title
, was beim Laden der Seite ausgelöst wird, obwohl ich nicht in der Lage bin, den Titel tatsächlich zu ändern.
So! Ich verwende entweder den Filter falsch, habe mein Thema nicht richtig eingerichtet oder etwas anderes, das mir nicht bekannt ist. Jede Hilfe wäre sehr dankbar!
Bearbeiten, um weitere Details hinzuzufügen
Der Versuch einer Init-Funktion funktioniert aber auch nicht: https://gist.github.com/anonymous/6db5af892a4cf4fb029655167d7002a4
Auch wenn ich einen Verweis auf <title>
von entfernt habe header.php
, wird der tatsächliche Site-Titel immer noch in der Quelle angezeigt.
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
auskommentiert? Es ist richtig, Themenunterstützung hinzuzufügen.add_theme_support()
Funktion in einem Init-Hook hinzuzufügen . Eine andere Sache ist, sicherzustellen, dass Sie Ihreheader.php
Datei überschreiben , um kein HTML-<title>
Tag zu haben.<title>
Tags in deinem gibtheader.php
? Vielleicht versuchen Sie es10
durchPHP_MAX_INT
. Außerdem ist der übergebene Parameter ein Array anstelle eines Zeichenfolgenwerts.Antworten:
Ich habe Ihren Filter in meinem Entwicklungsbereich ausgeführt. Es hat nicht funktioniert. Dann habe ich das Yoast SEO-Plugin ausgeschaltet, von dem ich wusste, dass es auch mit dem Seitentitel zu tun hat. Dann hat es funktioniert. Mein Vorschlag wäre also, dass ein anderes Plugin damit herumspielt.
Im Fall von Yoast war es ein Filteraufruf zur
pre_get_document_title
Rückgabe nicht leer. In diesem Fallwp_get_document_title
ist der Kurzschluss kurz und der Rest der Funktion, einschließlich desdocuments_title_parts
Filters, wird nicht ausgewertet, wie Sie aus den ersten Codezeilen ersehen können:Also nahm ich Ihren Filter und wechselte den Haken zu
pre_get_document_title
. Es hat nicht funktioniert. Dann habe ich die Priorität auf eine höhere Stufe als der gleiche Filter in Yoast geändert. Dann hat es funktioniert. Ich weiß also nichts über Ihr Setup, aber ich schlage vor, Sie probieren es aus:quelle
pre_get_document_title
Priorität 15 aus.Nach einigen Experimenten kam ich zu folgendem Vorschlag: Könnte es sein, dass das
<title>
Tag in Ihrem übergeordneten Thema "fest codiert" istheader.php
? Wenn dies der Fall ist, können Sie versuchen, das<title>
Tag aus dem untergeordneten Thema zu entfernenheader.php
(kopieren Sie das Ihrer Elternheader.php
in Ihren untergeordneten Themenordner) und dann die Themenunterstützung wieder über Folgendes hinzufügenfunctions.php
:Ich werde versuchen zu erklären, was mich zu diesem Vorschlag geführt hat: Ich habe es versucht, wie Sie und andere vorgeschlagen haben - aber es stellte sich heraus, dass ich zwei
<title>
Tags im Quellcode gefunden habe. Der erste hatte den Standardtitel , der zweite den modifizierten Titel . Aber (natürlich) in der Titelleiste des Browsers konnte ich nur den Standardtitel sehen.Ich habe dann
header.php
das übergeordnete Thema überprüft, das ich verwendet habe (vierundzwanzig), und das<title>
Tag war in der Tat in dieser Vorlage wie folgt fest codiert:Nachdem ich es entfernt hatte, fügte ich dem untergeordneten Thema den folgenden Code hinzu
functions.php
und es funktionierte:Es funktionierte also im Grunde auch vor dem Entfernen des
<title>
Tags aus der Vorlage - nur dass es damals zwei<title>
Tags gab, von denen das spätere ignoriert wurde. Könnte dies das gleiche Problem mit Ihrem Thema sein?Seit wp 4.4.0 wird das
<title>
Tag jedoch dynamisch von der Funktion erstellt,_wp_render_title_tag()
die grundsätzlich eine andere Funktion aufruftwp_get_document_title()
und die HTML-Tags um das Ergebnis wickelt. Lange Rede, kurzer Sinn: Wenn Ihrem Themaheader.php
das<title>
Tag fehlt , können Sie den Titel wahrscheinlich direkt durchpre_get_document_title
oderdocument_title_parts
wie hier beschrieben überschreiben :1) Ändern Sie den Titel direkt:
2) Filtern der Titelteile:
quelle
Nachdem Sie Ihren Beitrag von oben nach unten und von unten nach oben gelesen haben, haben Sie höchstwahrscheinlich einen Filter, der einen Titel durch den
pre_get_document_title
Filter leitet . Der Hinweis hier die folgende Aussage:Wenn wir uns den Soure-Code für ansehen
wp_get_document_title()
, sehen wir den folgenden Code:Dies bedeutet
pre_get_document_title
, dass diewp_get_document_title()
Funktion immer dann, wenn ein nicht leerer Wert durch den Filter geleitet wird, den Wert zurückgibt, der über denpre_get_document_title
Filter übergeben wurde. In diesem Fall werden derdocument_title_separator
Filter und derdocument_title_parts
Filter niemals ausgeführt, da diese nur nach dempre_get_document_title
Filter ausgeführt werden.Schauen Sie sich an, was Sie etwas weiter gesagt haben:
Sie haben definitiv einen
pre_get_document_title
Filter mit Berechtigung, der Ihre Instanz desselben Filters überschreibt, und aufgrund dieses Filters gibt die Funktion alles zurück, was an ihn übergeben wird, was dazu führt, dass Ihrdocument_title_parts
Filter nicht ausgeführt wird.Sie müssen entweder einen
grep
oder einen guten Editor verwenden und Ihren gesamtenwp-content
Ordner nach diesempre_get_document_title
Filter durchsuchen . Sobald Sie diesen Filter gefunden haben, können Sie ihn von dort entfernen und durch Ihren eigenen ersetzenquelle
document_title_parts
oderpre_get_document_title
zurückgegeben. Ich benutze SublimeText 2, um den gesamten wp-Inhalt zu durchsuchen ...pre_get_document_title
, was völlig erklärt hätte, warum der zweite Filter nicht ausgelöst würde. Dadurch bleibt derpre_get_document_title
Filter leer, was bedeutet, dass die beiden anderen Filter in der Funktion ausgelöst werden müssen, dies jedoch nicht. Es lässt mich einen korrupten Wordpress-Kern schließen.Wenn das übergeordnete Thema keine Unterstützung für deklariert
title-tag
, können Sie dies im untergeordneten Thema wie folgt tunFiltern Sie das
document_title_parts
Array des erwarteten Rückgabetyps wie folgt. Stellen Sie sicher, dass Sie die if-Bedingung gemäß Ihren Anforderungen ändern, oder entfernen Sie sie vollständig, um den Titel auf der gesamten Site zu ändern, nur um zu testen, ob sie funktioniert.Können Sie diese beiden Funktionen ausprobieren?
quelle
add_theme_support_child
wird protokolliert.