web-dev-qa-db-fra.com

Changer le titre d'une page de manière dynamique depuis un plugin

Chaque page WordPress peut être décrite comme ayant deux titres:

  1. Le titre de la page/du post qui est affiché dans la page/le post via l'appel de fonction the_title()

  2. La balise html <title></title> qui affiche le titre en haut du navigateur

J'écris un plugin qui devrait à un moment changer le titre d'une page de façon dynamique (bon, ça devrait changer les deux titres décrits ci-dessus).

Ainsi, pour l’étape 1 ci-dessus, j’ai trouvé plusieurs solutions sur Stack Overflow (telles que this ou this ). Ceux-ci sont parfaits pour seulement l'étape 1 ci-dessus.

Pour l'étape 2, j'ai trouvé ceci solution; en quelques mots, voici comment cela fonctionne:

add_filter('wp_title', 'change_page_title');
function change_page_title ($title) {

    // Do some magic, and eventually modify $title then return it
    return $title;
}

Mais la solution suggérée ne fonctionne pas pour moi; et par ne pas fonctionner, je veux dire que le filtre n’appelle pas la fonction associée. Je ne sais pas quel est le problème. Est-ce parce que ce filtre est appelé depuis le plugin et non le thème? (Juste pour votre information, je n'ai pas accès aux fichiers de thème, il faut donc le faire depuis le plugin).

Comment puis-je accomplir cela? Comment puis-je changer le titre du navigateur d'une page de manière dynamique depuis un plugin?

Merci.

5
Greeso

Un article ou une page n'a qu'un seul titre, la balise de titre <title> étant le titre du document.

Le filtre wp_title filtre la sortie de la fonction wp_title(), qui était utilisée auparavant pour afficher le titre du document. Dans WordPress 4.1, la prise en charge des balises de titre dans les thèmes a été introduite et wp_get_document_title() est utilisé à la place de wp_title(). Ainsi, si votre thème prend en charge title-tag, le filtre wp_title n'a pas d'effet, mais vous pouvez utiliser un autre filtre:

pre_get_document_title pour définir un nouveau titre

add_filter( 'pre_get_document_title', 'cyb_change_page_title' );
function cyb_change_page_title () {

    return "Custom title";

}

document_title_separator pour filtrer le séparateur de titre

add_filter('document_title_separator', 'cyb_change_document_title_separator');
function cyb_change_document_title_separator ( $sep ) {

    return "|";

}

documente_title_parts pour filtrer différentes parties du titre: titre, numéro de page, slogan et nom du site.

add_filter( 'document_title_parts', 'cyb_change_document_title_parts' );
function cyb_change_document_title_parts ( $title_parts ) {

    $title_parts['title'] = 'Custom title';
    $title_parts['page'] = 54;
    $title_parts['tagline'] = "Custom tagline";
    $title_parts['site'] = "My Site"; // When not on home page

    return $title_parts;

}

PD: Vous pouvez utiliser current_theme_supports( 'title-tag' ) pour vérifier si le thème prend en charge title-tag ou non.

8
cybmeta

Utilisation de ce code sur votre page.php ou la page que vous souhaitez modifier <pre> <title><?php wp_title(); ?> | <?php bloginfo(‘name’); ?></title> </pre>

0
pankaj choudhary