WordPress : Attribut personnalisé pour la balise de titre avec wp_title()
Puis-je ajouter le itemprop
à l’ title
élément et toujours utiliser wp_head()
et add_theme_support( "title-tag" )
?
Je souhaite créer un thème et le faire approuver sur wordpres.org qui utilise des microdonnées.
Le précédent signifie que je veux que le code HTML se présente comme suit :
<html itemscope itemtype="http://schema.org/WebPage" lang="en-US">
....
<title itemprop="name">WordPress Weblog Theme – Just another WordPress site</title>
....
Maintenant, je n’utilise pas add_theme_support( "title-tag" )
et n’utilise pas le code suivant dans header.php ?
<title itemprop="name"><?php echo wp_get_document_title(); ?></title>
<?php wp_head(); ?>
Maintenant, le plugin de vérification de thème dit :
OBLIGATOIRE : Le thème doit avoir un appel à wp_title(), idéalement dans le fichier header.php. OBLIGATOIRE : Le thème doit avoir des balises, idéalement dans le fichier header.php. RECOMMANDÉ : Aucune référence à add_theme_support( « title-tag » ) n’a été trouvée dans le thème. Il est recommandé que le thème implémente cette fonctionnalité pour WordPress 4.1 et supérieur.
Solution n°1 trouvée
Malheureusement, l’écho de la <title>
balise est actuellement câblé general-template.php
(ligne 1062). C’est dans une fonction privée, ce qui signifie que vous ne pouvez pas la modifier ou l’annuler. Donc, pour le moment, vous ne pouvez pas modifier la balise. Vous voudrez peut-être émettre un trac pour leur demander de prendre en charge cela à l’avenir.
Solution n°2 trouvée
Étant donné que tout _wp_render_title_tag
ce qui se passe est de vérifier la prise en title-tag
charge du thème et d’envelopper les <title>
balises, il n’y a vraiment aucune raison pour que votre implémentation existante « ne passe pas », puisque l’implémentation appropriée est déjà identique via :
<title itemprop="name"><?php echo wp_get_document_title(); ?></title>
quand _wp_render_title_tag
est-ce que :
echo '<title>' . wp_get_document_title() . '</title>' . "n";
(Puisque Theme Check est une vérification de lignes directrices, alors que se passe-t-il s’il ne peut pas dire qu’une norme a réellement été suivie, cela ne devrait en théorie pas l’empêcher de passer?)
Mais dans tous les cas, vous pouvez contourner ce problème et améliorer l’implémentation existante en même temps en ajoutant un filtre de remplacement de personnalisation … en décrochant l’action existante (comme suggéré par @birgire) et (mon ajout) en accrochant une fonction d’emballage qui appelle _wp_render_title_tag
et lui applique le filtre :
if (has_action('wp_head','_wp_render_title_tag') == 1) {
remove_action('wp_head','_wp_render_title_tag',1);
add_action('wp_head','custom_wp_render_title_tag_filtered',1);
}
function custom_wp_render_title_tag_filtered() {
if (function_exists('_wp_render_title_tag')) {
ob_start();
_wp_render_title_tag();
$titletag = ob_get_contents();
ob_end_clean();
} else {$titletag = '';}
return apply_filters('wp_render_title_tag_filter',$titletag);
}
Puisqu’il est préférable d’avoir un filtre disponible de toute façon…… Ensuite, vous pouvez facilement ajouter vos propres personnalisations de cas d’utilisation en utilisant le nouveau filtre :
add_filter('wp_render_title_tag_filter','custom_wp_render_title_tag');
function custom_wp_render_title_tag($titletag) {
$titletag = str_replace('<title>','<title itemprop="name">',$titletag);
return $titletag;
}
Bien sûr, ce serait beaucoup plus propre si la fonction principale était simplement mise à jour pour :
function _wp_render_title_tag() {
if ( ! current_theme_supports( 'title-tag' ) ) {
return;
}
echo apply_filters( 'wp_render_title_tag' , '<title>' . wp_get_document_title() . '</title>' . "n" );
}
0 commentaire