Sto sviluppando un plug-in che non utilizza un tipo di post personalizzato, ma tabelle di database separate. È un plug-in che visualizza un elenco di corsi con collegamenti che conducono alle diverse pagine dei dettagli del corso, in cui l'utente può quindi iscriversi a un corso.
Allo stato attuale, sto usando un shortcode per ottenere i dati dei plugin in una pagina con un modello di pagina personalizzato (page-course.php).
Ora voglio cambiare the_title()
dinamicamente, in base alla pagina che mostra il plugin (elenco dei corsi, pagina dei dettagli del corso con moduli, pagina di successo dell'invio del modulo). Ma ogni volta che lo faccio con il seguente filtro, cambiano anche i collegamenti ad altre pagine nel piè di pagina:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
modificare
Nel footer.php ho una funzione che include collegamenti a piè di pagina in wp_nav_menu()
modo da poterli definire in Aspetto> Menu. Ma con il filtro sopra, tutti i collegamenti nel piè di pagina cambiano anche in "Titolo personalizzato". Ma voglio solo cambiare il titolo della pagina, senza influire sui collegamenti dei menu nel piè di pagina.
Tentando di aggiungere un tag condizionale, in_the_loop()
i collegamenti a piè di pagina sono comunque interessati, sebbene non siano presenti nel ciclo.
<?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';
}
È simile a questa domanda: filtra il problema the_title in nav , solo che i collegamenti interessati sono nel piè di pagina e in_the_loop()
non funzionano.
Come posso cambiare the_title()
mentre influisco solo sul titolo della pagina corrente visualizzato senza influire sui collegamenti nel piè di pagina ?
Modifica 2 - Soluzione
Quindi ho finalmente funzionato:
<?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;
}
Il file page-listcourses.php è un modello di post personalizzato che ho assegnato alla pagina statica denominata "Corsi".
Suppongo che prima non funzionasse perché il nome della pagina statica e il nome file del modello di post personalizzato erano gli stessi.
in_the_loop()
è impostato su true
ogni volta che the_post()
viene attivato. Senza scavare troppo nel profondo, e sapendo che i menu di navigazione sono essi stessi dei loop , immagino che da qualche parte lungo la strada, wp_nav_menu()
crei un'istanza di un loop, causando il in_the_loop()
ritorno true
.