web-dev-qa-db-fra.com

Comment ajouter une variable personnalisée de thème à un titre de publication?

J'essaie d'ajouter un champ personnalisé à un titre d'article ( exemple de page ). Pour ce faire, je suis les instructions données dans cette question précédente , mais la variable n'apparaît pas dans le titre comme prévu. En fait, le même titre apparaît. Toute aide serait appréciée.

Les instructions précédentes indiquent que le code suivant doit être ajouté à functions.php:

function wpse_224340_document_title($title){
    global $post; // make sure the post object is available to us
    if(is_singular()){ // check we're on a single post
      $release_author = get_post_meta(get_the_ID(), "release_author", true);
      if($release_author != "")
        { $title["title"].= " (" . $release_author. ")";}
    }
    return $title;
}
add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });

La variable dans mon cas est propertysq _ et non release_author_. Mais une simple recherche/remplacement a eu les conséquences suivantes ...

Que se passe-t-il quand j'implémente ce code?

Le titre actuel de la page est: HS0525 - Chaweng Noi - Horizon Homes Koh Samui Ce titre a été inséré automatiquement par le plugin Wordpress "Yoast SEO". Mais après avoir désactivé cette insertion de titre automatique et inséré le code ci-dessus, le titre inséré dans la page est identique au titre de la page précédente: HS0525 - Chaweng Noi - Horizon Homes Koh Samui

Sources d'erreur possibles

Source possible d'erreur n ° 1} _: Le plug-in/mécanisme susmentionné forçant son propre <title> sur la page. Je recherche actuellement si c'est la cause. Je voudrais éviter de supprimer complètement le plugin, mais je devrais le faire.

_ {Source possible de l'erreur n ° 2} _: Aurais-je besoin de modifier la ligne suivante pour qu'elle corresponde à mon thème/mes fonctions?

$release_author = get_post_meta(get_the_ID(), "release_author", true);

J'ai essayé de le remplacer par la ligne suivante, mais cela n'a pas fonctionné.

$propertysq = ale_get_meta('propertysq');

Je devrais noter:

  • Ce site ne dispose pas d’une configuration d’environnement de test appropriée dans laquelle je peux facilement voir les erreurs PHP et vars vider.
  • Selon la réponse précédente, je me suis aussi rappelé de commenter la balise <title> dans mon header.php.

edit: Voici le code exact que j'ai inséré dans functions.php:

add_filter("document_title_parts", "wpse_224340_document_title");
function wpse_224340_document_title($title){
    global $post; // make sure the post object is available to us
    if(is_singular()){ // check we're on a single post
      $propertysq = get_post_meta(get_the_ID(), "propertysq", true);
      if($propertysq != "")
        { $title["title"].= " (" . $propertysq. ")";}
    }
    return $title;
}
add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
3
cag8f

Je suppose que vous voulez utiliser le méta propertysq personnalisé dans le titre et que vous utilisez Yoast SEO. ( Corrige moi si je me trompe )

Donc, utilisez ceci est votre functions.php

function wpse239252_hook_title($title) {
global $post; // make sure the post object is available to us
if(is_singular()){ // check we're on a single post
  $propertysq = get_post_meta(get_the_ID(), "propertysq", true);
  if($propertysq != "") { //check if not empty
    $title = $propertysq.' - '.$title;
  }
}
return $title;
}

add_filter('wpseo_title', 'wpse239252_hook_title', 15, 1);

Cela ajoutera un champ propertysq à votre titre en tant que 1,002Sq Mt - HS0525 - Chaweng Noi - Horizon Homes Koh Samui dans votre exemple, où propertysq = 1,002Sq Mt.

P.S: Pour obtenir post_meta propertysq, utilisez $propertysq = get_post_meta(get_the_ID(), "propertysq", true);

Laisse-moi si ça marche pour toi.

2
hkchakladar

Parce que beaucoup de gens veulent le manipuler, il n'est plus à la mode d'inclure des balises <title> dans votre en-tête. Au lieu de cela, vous mettez wp_head ici et autorisez la manipulation du titre en le prenant en charge dans votre thème:

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

Maintenant, toutes sortes de plugins (SEO) peuvent vouloir travailler avec ça, en utilisant le filtre wp_title . Si vous faites quelque chose en utilisant ce filtre et qu'un plugin entre en jeu plus tard, tout ce que vous avez fait peut être perdu. Maintenant, je ne sais pas quels plugins vous avez installés, mais vous pouvez vous assurer que votre filtre est le dernier en lui donnant une priorité élevée, comme ceci:

add_filter( 'wp_title', 'wpse239252_title_filter', 9999, 2 );
  function wpse239252_title_filter ($title,$separator) {
    ... do stuff with $title ...
    return $title;
    }
1
cjbj