WordPress : pourquoi le filtre wp_title ne fonctionne pas du tout ?

Publié par Jean-Michel le

Je sais qu’il y a d’autres questions comme celle-ci mais je n’ai pas trouvé de réponse fiable. Alors:

Activez d’abord la chose (code simplifié):

add_action( 'after_setup_theme', 'theme_setup' );
function theme_setup() {
  add_theme_support('title-tag');
}

Deuxièmement, supprimez la balise de titre de header.php.

Troisièmement, sur les modèles de page, avant d’appeler get_header(), ajoutez quelque chose comme ceci :

  add_filter('wp_title', 'set_custom_title', 10, 3);
  function set_custom_title($title, $sep, $seplocation){
    return 'test';
  }

Eh bien, cela ne fonctionne pas du tout, dans n’importe quel modèle, qu’il s’agisse d’une page, d’une archive, d’une taxonomie personnalisée ou d’une archive de type de publication. Non rien. WordPress génère des titres par lui-même.

Pourquoi? Est-ce que je fais quelque chose de mal? Notez qu’il était une fois ce code qui fonctionnait : utilisé dans d’autres sites/thèmes.

Est-ce peut-être un problème de wp5.2.0 ?

Lire également:  Le fichier Javascript ne fonctionne pas dans Wordpress avec une mise en file d'attente appropriée dans Functions.php

Solution n°1 trouvée

Donc, grâce à @Vel, la réponse est de rajouter la balise de titre (même si dans les versions précédentes de wp> je ne sais pas jusqu’à quelle version vous deviez la supprimer de la tête à la place).

Code de travail actuel pour moi:

//functions.php
add_action( 'after_setup_theme', 'theme_setup' );
function theme_setup() {
  add_theme_support('title-tag');
}

//header.php
<title><?php wp_title('|', true, 'right'); ?> | <?php echo get_bloginfo('name') ?></title>

//page templates
$window_title = // do something
add_filter('wp_title', function($title, $sep, $seplocation) use($window_title){ return $window_title; }, 10, 3);

Solution n°2 trouvée

Pour tous ceux qui ont encore ce problème de wp_titlefiltre qui ne fonctionne pas, je suggérerais d’ajouter une valeur de priorité plus élevée. La valeur de priorité la plus élevée garantira que votre filtre est exécuté et non remplacé par d’autres filtres de votre thème ou des plugins installés. Veuillez voir ci-dessous : (réf : https://developer.wordpress.org/reference/functions/add_filter/)

  // the 9999999 priority value will force this filter to be executed closer to the end.  A lower number corresponds with earlier execution
  add_filter('wp_title', 'set_custom_title', 9999999, 3);
  function set_custom_title($title, $sep, $seplocation){
    return 'test';
  }

Solution n°3 trouvée

Essayez d’utiliser le code suivant –

add_filter('document_title_parts', function($titles){
    return array('title' => 'Custom Title');
});

Solution n°4 trouvée

Donc, grâce à @Vel, la réponse est de rajouter la balise de titre (même si dans les versions précédentes de wp> je ne sais pas jusqu’à quelle version vous deviez la supprimer de la tête à la place).

Lire également:  Remplacer le recadrage par défaut dans Wordpress

Code de travail actuel pour moi:

//functions.php
add_action( 'after_setup_theme', 'theme_setup' );
function theme_setup() {
  add_theme_support('title-tag');
}

//header.php
<title><?php wp_title('|', true, 'right'); ?> | <?php echo get_bloginfo('name') ?></title>

//page templates
$window_title = // do something
add_filter('wp_title', function($title, $sep, $seplocation) use($window_title){ return $window_title; }, 10, 3);

Solution n°5 trouvée

Pour tous ceux qui ont encore ce problème de wp_titlefiltre qui ne fonctionne pas, je suggérerais d’ajouter une valeur de priorité plus élevée. La valeur de priorité la plus élevée garantira que votre filtre est exécuté et non remplacé par d’autres filtres de votre thème ou des plugins installés. Veuillez voir ci-dessous : (réf : https://developer.wordpress.org/reference/functions/add_filter/)

  // the 9999999 priority value will force this filter to be executed closer to the end.  A lower number corresponds with earlier execution
  add_filter('wp_title', 'set_custom_title', 9999999, 3);
  function set_custom_title($title, $sep, $seplocation){
    return 'test';
  }

Solution n°6 trouvée

Essayez d’utiliser le code suivant –

add_filter('document_title_parts', function($titles){
    return array('title' => 'Custom Title');
});
Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *