web-dev-qa-db-fra.com

add_theme_support ('title-tag') en conflit avec la fonction de titres personnalisés

' Title-tag ' est une fonctionnalité de thème introduite dans la version 4.1, et je souhaite l'utiliser comme titre par défaut de mon thème. Cette fonctionnalité doit être ajoutée à l'action after_setup_theme ou init. Il est recommandé ici . L'utilisation de cette fonctionnalité fonctionne parfaitement pour moi. MAIS:

De plus, j'ai une fonction de titres personnalisés qui peut être activée/désactivée à l'aide du framework Option-Tree. Ce cadre est chargé directement dans functions.php. Ensuite, j'ai le reste des fonctions ajoutées sur le after_setup_theme avec priorité 2:

add_action( 'after_setup_theme', 'theme_functions', 2);

Et voici le filtre ajouté pour mes titres personnalisés:

add_filter( 'wp_title', 'custom_titles', 10, 2 );

Lorsque je désactive ma fonction custom_titles(), la nouvelle fonctionnalité title-tag fonctionne parfaitement, mais lorsque j'active les options personnalisées, le titre est renvoyé deux fois. Exactement ça:

<title>Front page meta title example</title>

Front page meta title example<title></title>

Le premier est correct et utilise la fonction wp_title() insérée dans le header.php entre les balises title, mais le second est inclus à la première ligne de la fonction wp_head().

En fait, ma fonction custom_titles() fonctionnait parfaitement sans l'utilisation de la nouvelle fonctionnalité title-tag. Il semble donc que le conflit apparaît lorsque j'essaie d'utiliser les deux.

Pensez-vous que ce serait une bonne solution de placer les deux fonctionnalités dans after_theme_setup priorité 1 dans une instruction conditionnelle simple, ou existe-t-il un meilleur moyen de le faire? Il semble que la solution devrait être plus facile.


UPDATE: C'est fou. Si je supprime les balises title de l'en-tête pour utiliser la nouvelle fonctionnalité, la vérification du thème renvoie:

REQUIRED: le thème doit avoir des balises, idéalement dans le fichier header.php.

Si je supprime la nouvelle fonctionnalité pour utiliser ma fonction personnalisée, la vérification du thème renvoie:

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.

Pour être honnête: LOL. En ajoutant add_theme_support dans functions.php, et title balises dans header.php lorsqu’elles sont respectivement "RECOMMENDRE" et "REQUIRE", le titre sera toujours renvoyé deux fois!

2
Gerard

Votre problème est que vous ne pouvez pas utiliser wp_title() dans le thème si le thème prend déjà en charge title-tag. Le <head> de votre thème devrait ressembler à ceci:

<head>
    <meta charset="<?php bloginfo( 'charset' ); ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <?php wp_head(); ?>
</head>

Le support des filtres et des balises de titre:

add_action( 'after_setup_theme', 'theme_functions' );
function theme_functions() {

    add_theme_support( 'title-tag' );

}

add_filter( 'wp_title', 'custom_titles', 10, 2 );
function custom_titles( $title, $sep ) {

    //Check if custom titles are enabled from your option framework
    if ( ot_get_option( 'enable_custom_titles' ) === 'on' ) {
        //Some silly example
        $title = "Some other title" . $title;;
    }

    return $title;
}

Si vous faites cela, cela fonctionnera parfaitement.

6
cybmeta

J'ai trouvé une solution, alors je suis sûr qu'elle sera utile pour les autres.


Premièrement: les titres personnalisés

Explication: Si ma fonction custom_titles() est activée, chargez-la dans functions.php sous la priorité after_theme_setup et affichez les balises title dans le fichier header.php.

Dans functions.php:

if ( ot_get_option( 'enable_custom_titles' ) === 'on' ) {
    // The custom titles function
}

Dans header.php:

<?php if ( ot_get_option( 'enable_custom_titles' ) === 'on' ) : ?>
<title><?php wp_title( '|', true, 'right' ); ?></title>
<?php endif; ?>

<!-- The next will return the new WP titles feature if custom titles are off -->
<?php wp_head(); ?>

Ensuite: support title-tag

Explication: Si ma custom_titles() est désactivée, add_theme_support('title-tag'); dans functions.php sous la priorité after_theme_setup 1.

Donc, dans functions.php:

if ( ot_get_option( 'enable_custom_titles' ) === 'off' ) {
    add_theme_support( 'title-tag' );
}

En ce qui concerne la priorité after_theme_setup, dans mon cas, il suffit de charger le framework Option-Tree avant d'utiliser la fonction ot_get_option(). Elle pourrait donc être différente - inutile - si quelqu'un utilise un framework différent.

Maintenant, mon thème a la nouvelle fonctionnalité de titres dans la version 4.1 et des titres personnalisés pour le référencement en utilisant des méta-boîtes: les deux disponibles. (Je sais que c’est un territoire de plugins, mais c’est bien d’avoir quelques caractéristiques essentielles - "essentielles" à mon avis - intégrées dans le thème). Grâce à cela, les clients auront plus de contrôle sur la façon dont les titres sont affichés.

3
Gerard