Wordpress version 4.5.1
J'essaie de mettre à jour dynamiquement les titres de page sur un modèle particulier. Après avoir beaucoup creusé et appris les wp_title()
changements, j'essaie d'utiliser document_title_parts
. Cependant, je n'arrive pas du tout à faire fonctionner le filtre.
Je suis dans un thème enfant, 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 );
J'ai essayé les deux variantes d'ajout du support de thème comme indiqué ci-dessus, mais en regardant mon journal, rien n'apparaît lors du rechargement de la page. Cela error_log
fonctionnait avec d'autres fonctions (telles que wp_title
), donc la journalisation des erreurs fonctionne.
J'ai également essayé pre_get_document_title
, qui se déclenche au chargement de la page, bien que je ne puisse pas le faire pour changer le titre.
Donc! J'utilise le filtre de manière incorrecte, je n'ai pas correctement configuré mon thème ou autre chose que je ne connais pas Toute aide serait grandement appréciée!
modifier pour ajouter plus de détails
Tentative d'une fonction init, mais cela ne fonctionne pas non plus: https://gist.github.com/anonymous/6db5af892a4cf4fb029655167d7002a4
De plus, alors que j'ai supprimé toute référence à <title>
partir header.php
, le titre du site actuel montre encore dans la source.
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
? C'est une utilisation correcte de l'ajout d'un support de thème.add_theme_support()
fonction dans un hook init . Une autre chose est de vous assurer que vous écrasez votreheader.php
fichier pour ne pas avoir de<title>
balise html .<title>
balises dans votreheader.php
? Essayez peut-être de remplacer10
parPHP_MAX_INT
. En outre, le paramètre transmis est un tableau au lieu d'une valeur de chaîne.Réponses:
J'ai exécuté votre filtre dans ma zone de développement. Ça n'a pas marché. Ensuite, j'ai désactivé le plugin Yoast SEO, que je savais également jouer avec le titre de la page. Ensuite, cela a fonctionné. Donc, ma suggestion serait qu'un autre plugin joue avec.
Dans le cas de Yoast, c'était un appel de filtre pour
pre_get_document_title
retourner non vide. Dans ce cas, ilwp_get_document_title
est court-circuité et le reste de la fonction, y compris ledocuments_title_parts
filtre, n'est pas évalué, comme vous pouvez le voir dans les premières lignes de code:J'ai donc pris votre filtre et changé le crochet en
pre_get_document_title
. Ça n'a pas marché. Ensuite, j'ai changé la priorité à un niveau plus élevé que le même filtre dans Yoast. Ensuite, cela a fonctionné. Donc, je ne connais pas votre configuration, mais je vous suggère de l'essayer:la source
pre_get_document_title
priorité 15 suffit.Après quelques essais, je suis arrivé à la suggestion suivante: se pourrait-il que la
<title>
balise soit "codée en dur" dans le thème de votre parentheader.php
? Si tel est le cas, vous pouvez essayer de supprimer la<title>
balise de votre thème enfantheader.php
(copiez vos parentsheader.php
dans votre dossier de thème enfant), puis rajoutez la prise en charge du thème viafunctions.php
:Je vais essayer d'expliquer ce qui m'a amené à cette suggestion: j'ai essayé comme vous et d'autres l'ont suggéré - mais il s'est avéré que j'ai trouvé deux
<title>
balises dans le code source. Le premier avait le titre standard , le second le titre modifié . Mais (bien sûr) dans la barre de titre du navigateur, je ne pouvais voir que le titre par défaut.J'ai ensuite vérifié le
header.php
thème parent que j'ai utilisé (vingt-quatorze) et la<title>
balise était en effet codée en dur à l'intérieur de ce modèle comme ceci:Après l'avoir supprimé, j'ai ajouté le code suivant au thème enfant
functions.php
et cela a fonctionné:Donc, cela a également fonctionné avant de supprimer la
<title>
balise du modèle - seulement qu'il y avait alors deux<title>
balises dont la dernière a été ignorée. Serait-ce le même problème avec votre thème?Depuis wp 4.4.0, cependant, la
<title>
balise est créée dynamiquement par la fonction_wp_render_title_tag()
qui appelle essentiellement une autre fonctionwp_get_document_title()
et enveloppe les balises html autour du résultat. Pour faire court: si votre thème neheader.php
contient pas de<title>
balise, il est probable que vous pouvez remplacer le titre directement viapre_get_document_title
oudocument_title_parts
comme décrit ici :1) changez directement le titre:
2) filtrer les parties du titre:
la source
Après avoir lu votre message de haut en bas et de bas en haut, vous avez probablement un filtre qui passe un titre à travers le
pre_get_document_title
filtre. L'indice ici la déclaration suivante:En regardant le code soure pour
wp_get_document_title()
, nous voyons le code suivant:Cela signifie que, chaque fois qu'une valeur non vide passe à travers le
pre_get_document_title
filtre, lawp_get_document_title()
fonction renvoie la valeur qui a été transmise via lepre_get_document_title
filtre. Dans ce cas, ledocument_title_separator
filtre et ledocument_title_parts
filtre ne seront jamais exécutés car ils ne s'exécutent qu'après lepre_get_document_title
filtre.En regardant ce que vous avez dit un peu plus loin:
vous avez certainement un
pre_get_document_title
filtre avec autorité qui remplace votre instance du même filtre, et à cause de ce filtre, la fonction retourne tout ce qui lui est transmis, ce qui entraîne que votredocument_title_parts
filtre n'est pas exécuté.Ce que vous devrez faire est d'utiliser soit
grep
un bon éditeur soit de rechercherwp-content
cepre_get_document_title
filtre dans votre dossier entier . Une fois que vous avez localisé ce filtre, vous pouvez le retirer de là pour le retirer et le remplacer par le vôtrela source
document_title_parts
oupre_get_document_title
renvoie 0 résultats. J'utilise SublimeText 2 pour rechercher tout le contenu wp ...pre_get_document_title
, ce qui aurait totalement expliqué pourquoi le deuxième filtre ne se déclencherait pas. Cela laisse lepre_get_document_title
filtre vide, ce qui signifie que les deux autres filtres de la fonction doivent se déclencher, mais ils ne le font pas. Cela me laisse pour conclure un noyau Wordpress corrompu.Si le thème parent ne déclare pas de prise en charge,
title-tag
vous pouvez le faire comme ceci dans le thème enfantFiltrez le
document_title_parts
tableau de type de retour attendu, comme ceci, assurez-vous de changer la condition if selon vos besoins, ou supprimez-le complètement pour changer le titre sur tout le site juste pour tester si cela fonctionne.Pouvez-vous essayer ces deux fonctions?
la source
add_theme_support_child
est enregistré.