Je développe un plugin qui n'utilise pas de type de publication personnalisé, mais des tables de base de données distinctes. C'est un plugin qui affiche une liste de cours avec des liens qui mènent aux différentes pages de détails du cours, où l'utilisateur peut alors s'abonner à un cours.
Dans l'état actuel, j'utilise un shortcode pour obtenir les données des plugins dans une page avec un modèle de page personnalisé (page-courses.php).
Je veux maintenant changer the_title()
dynamiquement, en fonction de la page que le plugin affiche (liste des cours, page de détails du cours avec formulaires, page de réussite de soumission de formulaire). Mais chaque fois que je le fais avec le filtre suivant, les liens vers d'autres pages du pied de page changent également:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Éditer
Dans footer.php, j'ai une fonction qui inclut des liens de pied de page wp_nav_menu()
pour que je puisse les définir dans Apparence> Menus. Mais avec le filtre ci-dessus, tous les liens dans le pied de page changent également en «Titre personnalisé». Mais je veux juste changer le titre de la page, sans affecter les liens de menu dans le pied de page.
En essayant d'ajouter une balise conditionnelle, in_the_loop()
les liens de pied de page sont toujours affectés, bien qu'ils ne soient pas dans la boucle.
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
if ( in_the_loop() ) {
add_filter( 'the_title', 'custom_page_title' );
}
}
function custom_page_title() {
return 'Custom Title';
}
C'est similaire à cette question: filtrez le problème du titre dans la navigation , juste que les liens affectés sont dans le pied de page et in_the_loop()
ne fonctionnent pas.
Comment puis-je changer the_title()
tout en n'affectant que le titre de la page en cours sans affecter les liens dans le pied de page ?
Edit 2 - Solution
J'ai finalement réussi à le faire fonctionner:
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );
}
function wpse83525_filter_the_title( $title, $id ) {
if ( 'page-listcourses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
return 'Custom Title';
}
return $title;
}
Le fichier page-listcourses.php est un modèle de publication personnalisé que j'ai attribué à la page statique nommée «Cours».
Je suppose que cela n'a pas fonctionné auparavant car le nom de la page statique et le nom de fichier du modèle de publication personnalisé étaient les mêmes.
in_the_loop()
est réglé à true
chaque fois qu'il the_post()
est déclenché. Sans creuser trop profondément dans le cœur, et sachant que les menus de navigation sont eux-mêmes des boucles , je suppose que quelque part en cours de route, wp_nav_menu()
instancie une boucle, provoquant in_the_loop()
le retour true
.