Personalizzare Wordpress the_title con add_filter

22 ago 2011, 03:39:03
Visualizzazioni: 20.8K
Voti: 3

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;
}
0
Tutte le risposte alla domanda 2
4
10

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!

22 ago 2011 03:46:07
Commenti

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

shahz shahz
22 ago 2011 04:46:42

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

shahz shahz
22 ago 2011 04:55:28

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.

tollmanz tollmanz
22 ago 2011 04:57:47

Potresti avere Yoast installato; se è così, dovrai guardare add_filter 'wpseo_title'.

Herbert Van-Vliet Herbert Van-Vliet
5 lug 2018 10:36:57
0

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.

17 ott 2023 23:10:09