Attribut personnalisé pour la balise de titre avec wp_title ()

4

Puis-je ajouter le itemprop à l'élément title et continuer à utiliser wp_head() et add_theme_support( "title-tag" ) ?

Je souhaite créer un thème et faire approuver ce thème sur wordpres.org , qui utilise des microdonnées. .

La moyenne précédente, 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 &#8211; Just another WordPress site</title>
....

Maintenant, je n'utilise pas add_theme_support( "title-tag" ) et 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") a été trouvé dans le thème. Il est   a recommandé que le thème implémente cette fonctionnalité pour WordPress   4.1 et au-dessus.

    
posée Bass Jobsen 30.05.2016 - 00:46

2 réponses

4

Etant donné que _wp_render_title_tag ne vérifie pas le support du thème title-tag et en place des balises <title> , il n'y a 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 le contrôle de thème est un contrôle de ligne directrice, alors s'il ne sait pas si 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 cette et améliorer en même temps l'implémentation existante en ajoutant un filtre de remplacement de personnalisation ... en décrochant l'action existante. (comme suggéré par @birgire) et (mon ajout) reliant 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, 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" );
}
    
réponse donnée majick 30.05.2016 - 14:16
1

Malheureusement, l'écho de la balise <title> est actuellement câblé dans le 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 à l'avenir.

    
réponse donnée cjbj 30.05.2016 - 10:25

Lire d'autres questions sur les étiquettes