J'ai une page où, avec un shortcode, j'ai interrogé plusieurs publications d'un CPT - la page est donc un type de page d'archive pour les utilisateurs généraux.
Page Title
- CPT Post Title #1
- CPT Post Title #2
- CPT Post Title #3
Dans certaines conditions, je souhaite modifier uniquement le titre de la page, pas le titre de publication du CPT. J'ai essayé:
function wpse_change_page_title( $title ) {
//if( condition matched ) {
return 'Test ' . $title;
//}
}
add_filter( 'the_title', 'wpse_change_page_title' );
Mais cela modifie les titres de poste du CPT.
Page Title
- Test CPT Post Title #1
- Test CPT Post Title #2
- Test CPT Post Title #3
Comment puis-je modifier uniquement le titre de la page, pas ces titres de publication CPT?
Test Page Title
Je crois que le titre de la page dont vous parlez est le titre de la page de la requête principale. Le filtre the_title()
(et le filtre the_content()
pour cette question) cible toutes les balises de modèle respectives, quelle que soit la requête.
Pour éviter cela, ciblez uniquement la requête principale et la page spécifique.
Vous pouvez essayer ce qui suit dans votre filtre
if ( in_the_loop() && is_page( 'specific page' ) ) {
// Do what you need to do
}
Je viens de penser à cela, je ne l'ai pas testé, mais vous pouvez vérifier votre titre à l'intérieur du filtre par rapport à un titre statique connu, puis faire quelque chose en conséquence.
Exemple:
if ( $title == 'My known title' ) {
// Do something with the title
}
Je ne suis pas tout à fait sûr de comprendre votre projet, mais il me semble que vous devriez utiliser le filtre wp_title
au lieu du filtre the_title
. Cela est déclenché par la fonction wp_title()
qui affiche le titre de la page, pas les titres des publications sur la page. Quelque chose comme:
function wpse_change_page_title( $title ) {
if(is_page('some_page')) {
return 'Test ' . $title;
}
}
add_filter( 'wp_title', 'wpse_change_page_title' );
Le deuxième argument pour the_title
est toujours un identifiant de publication. Utilise le.
add_filter( 'the_title', function( $title, $post_id) {
$post = get_post( $post_id );
if ( ! $post or 'your_cpt' !== $post->post_type )
return $title;
return 'Test ' . $title;
}, 10, 2 );