web-dev-qa-db-fra.com

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

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 &#8211; 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.

4
Bass Jobsen

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" );
}
4
majick

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.

1
cjbj