Come ottenere l'ID del post con la funzione Add Filter

5 mag 2012, 09:26:14
Visualizzazioni: 14.2K
Voti: 4

Sto scrivendo un plugin e sto cercando di capire come aggiungere dati alla fine di un post basandosi su alcune informazioni di meta personalizzate.

Finora ho fatto questo:

add_filter('the_content', 'AppendMeta');

Ed ecco la funzione "AppendMeta"

AppendMeta($content) {
    echo $content; // Mostra il contenuto del post
    $PersonName = get_post_meta($post->ID, 'PersonName', true);
    echo 'Persona: ' . $PersonName;
}

Questo codice funziona se sostituisco $post->ID con l'id del post, ma ho bisogno che funzioni in base al post che l'utente sta attualmente visualizzando. Come posso passare l'id del post come parametro? $post->ID non funziona in questo scenario e non riesco a capire perché.

3
Commenti

Nota rapida: quando colleghi una funzione a un filter hook, la tua funzione dovrebbe restituire la variabile filtrata invece di stamparla direttamente.

Bainternet Bainternet
5 mag 2012 13:24:17

È una convenzione o c'è una ragione specifica?

Talon Talon
5 mag 2012 19:52:09

È una convenzione per un motivo preciso, i filter hook permettono di modificare un valore e si aspettano che quel valore venga restituito, è semplicemente come funzionano.

Bainternet Bainternet
6 mag 2012 12:54:07
Tutte le risposte alla domanda 2
2
10

Non importa, ho scoperto che posso usare get_the_ID();.

Questa funzione restituirà l'ID del post all'interno del filtro the_content. La funzione dichiara semplicemente l'oggetto globale $post e ne restituisce l'ID.

add_filter('the_content', 'wpse51205_content')
wpse51205_content($content) {
    echo $content; // Mostra il contenuto del post
    $PersonName = get_post_meta(get_the_ID(), 'PersonName', true);
    echo 'Persona: ' . $PersonName;
}

Se non vuoi usare get_the_ID(), devi semplicemente dichiarare l'oggetto $post come globale prima di usarlo:

add_filter('the_content', 'wpse51205_content')
wpse51205_content($content) {
    global $post;
    echo $content; // Mostra il contenuto del post
    $PersonName = get_post_meta($post->ID), 'PersonName', true);
    echo 'Persona: ' . $PersonName;
}
5 mag 2012 09:28:11
Commenti

Oh sì, buono a sapersi, probabilmente più affidabile in quel modo.

Talon Talon
5 mag 2012 19:51:18

get_the_ID() è ancora pensato per essere utilizzato solo all'interno del loop. Potrebbe funzionare bene per te su pagine singole, ma un modo completamente affidabile è accedere alla variabile global $post come ho detto nella mia risposta.

Ashfame Ashfame
6 mag 2012 09:48:08
1

the_ID() dovrebbe essere utilizzato solo all'interno del loop, altrimenti non puoi fare affidamento su di esso. È meglio utilizzare l'oggetto $GLOBALS['post'] all'interno della tua chiamata di funzione.

5 mag 2012 09:59:02
Commenti

the_ID() si basa anch'esso sulla variabile globale $post.

DrLightman DrLightman
25 feb 2020 13:19:10