Personalizzare Wordpress the_title con add_filter
Sto cercando di creare un titolo personalizzato per i post creati sotto un post type custom. Si tratta di un changelog delle versioni per un'applicazione. Vorrei inserire solo il numero della versione nel campo del titolo, e l'output deve essere standardizzato con una stringa predefinita.
Il mio post type custom è 'custom_version' e l'output del titolo che voglio ottenere è "L'applicazione è stata aggiornata alla versione ".
Ho capito che questo può essere ottenuto usando add_filter e ho provato a lavorare con questo codice per giorni, ma non sono un esperto di PHP quindi un aiuto è molto apprezzato :) Ecco il codice:
add_filter('the_title', 'new_title');
function new_title($title) {
global $post, $post_ID;
$title['custom_version'] = 'L\'applicazione è stata aggiornata alla versione '.$title;
return $title;
}

Il problema è che stai mescolando le variabili $title
. $title
è il parametro passato alla funzione new_title
, ma poi lo usi come un array: $title['custom_version']
. Prova così:
add_filter('the_title', 'new_title', 10, 2);
function new_title($title, $id) {
if('custom_version' == get_post_type($id))
$title = 'L\'applicazione è stata aggiornata alla versione '.$title;
return $title;
}
Consiglio vivamente anche di aggiungere un prefisso unico alla tua funzione, perché potresti incorrere in un plugin/tema che utilizza una funzione chiamata new_title
, il che causerebbe problemi!

Grazie per la risposta tollmanz, ho provato il tuo codice, ma il problema è che sostituisce TUTTI i titoli inclusi quelli delle pagine..Ecco un riferimento di dove viene fatto: http://www.titaniumtrack.com/changelog/titanium-backup/3-0-6

In realtà sto cercando di aggiungere questo filtro solo ai custom post type con identificativo "custom_version"..

Modificato...Controllo che il post_ID sia associato a un post di tipo "custom_version" prima di manipolare il titolo. Scusa per la versione iniziale. Non mi ero reso conto che doveva essere solo per un CPT.

Penso che WooCommerce abbia fatto un buon lavoro nel mostrare i possibili modi per verificare se si desidera davvero sovrascrivere il titolo utilizzando il filtro the_title
.
A volte, potresti modificare il titolo che apparirà nella tua lista di categorie, e in altri posti dove non vorresti che accadesse.
Ecco come fanno:
# plugins/woocommerce/includes/wc-page-functions.php
function wc_page_endpoint_title( $title ) {
global $wp_query;
if ( ! is_null( $wp_query ) && ! is_admin() && is_main_query() && in_the_loop() && is_page() && is_wc_endpoint_url() ) {
$endpoint = WC()->query->get_current_endpoint();
$action = isset( $_GET['action'] ) ? sanitize_text_field( wp_unslash( $_GET['action'] ) ) : '';
$endpoint_title = WC()->query->get_endpoint_title( $endpoint, $action );
$title = $endpoint_title ? $endpoint_title : $title;
remove_filter( 'the_title', 'wc_page_endpoint_title' );
}
return $title;
}
add_filter( 'the_title', 'wc_page_endpoint_title' );
Più importante che riscrivere il titolo, sono i metodi e i controlli che fanno...
! is_admin() && is_main_query() && in_the_loop() && is_page() && is_wc_endpoint_url()
ecc.
Tieni a mente questi controlli prima di sovrascrivere titoli che non vuoi modificare, o in posti dove non dovresti.
