Puis-je ajouter la itemprop
à l'élément title
et continuer à utiliser wp_head()
et add_theme_support( "title-tag" )
?
Je veux créer un thème et le faire approuver sur wordpres.org qui utilise des microdonnées.
La moyenne précédente, je veux que le code HTML ressemble à ceci:
<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 que 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:
REQUIRED: le thème doit avoir un appel à wp_title (), idéalement dans le fichier header.php. REQUIRED: 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 versions ultérieures.
Puisque tout ce que _wp_render_title_tag
fait, c’est de vérifier le support du thème title-tag
et d’envelopper les balises <title>
, il n’ya vraiment aucune raison pour que votre implémentation existante "ne passe pas", car la bonne implémentation est déjà identique via:
<title itemprop="name"><?php echo wp_get_document_title(); ?></title>
quand _wp_render_title_tag
fait:
echo '<title>' . wp_get_document_title() . '</title>' . "\n";
(Puisque Thème Check est une vérification de ligne directrice, alors que se passe-t-il s'il ne peut pas dire qu'une norme a réellement été suivie, cela ne devrait en principe pas l'empêcher de passer?)
Mais dans tous les cas, vous pouvez contourner ce problème et améliorer simultanément la mise en œuvre existante en ajoutant un filtre de substitution de personnalisation ... en décrochant l'action existante (comme suggéré par @birgire) et ( mon ajout) accrocher une fonction de wrapping 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);
}
Comme il est préférable de toujours avoir un filtre disponible ....... Vous pouvez ensuite ajouter facilement vos propres personnalisations de cas d'utilisation à l'aide du 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, il serait beaucoup plus simple de mettre à jour la fonction principale 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" );
}
Malheureusement, l'écho de la balise <title>
est actuellement câblé dans general-template.php
(ligne 1062). Il s'agit d'une fonction privée, ce qui signifie que vous ne pouvez ni la modifier ni la remplacer. Donc, pour le moment, vous ne pouvez pas modifier le tag. Vous voudrez peut-être émettre un trac pour leur demander de le supporter dans le futur.