Aggiungere un valore meta al contenuto del post in WordPress durante save_post
Il problema sembra abbastanza semplice: Quando viene attivata l'azione save_post
, vorrei aggiungere il valore di una meta chiave alla fine del post_content
se non è già presente nel post stesso.
Ho provato a chiamare wp_update_post()
all'interno di una funzione collegata a save_post
, ma come molti di voi obietteranno immediatamente, wp_update_post()
contiene do_action('save_post')
e quindi crea un loop infinito.
Quale altro modo (utilizzando l'API) esiste per aggiornare il contenuto di un post basandosi sui suoi valori personalizzati una volta che il post è stato salvato/modificato senza invocare un incubo di loop infinito?
La soluzione iniziale che ho trovato è quella di collegare un filtro a un'azione come wp_insert_post_data
ed estrarre altre informazioni del post dall'oggetto globale $post
.
// Aggiungiamo il nostro filtro all'azione wp_insert_post_data
add_filter( 'wp_insert_post_data', 'my_appender' );
function my_appender( $content ) {
// Portiamo l'oggetto globale $post nello scope
global $post;
// Otteniamo il valore del meta campo 'key_name'
$meta_value = get_post_meta( $post->ID, 'key_name', TRUE );
// Se il valore non è presente nel contenuto, lo aggiungiamo alla fine
if ( stristr( $content['post_content'], $meta_value ) === FALSE )
$content['post_content'] .= $meta_value;
// Restituiamo il contenuto filtrato
return $content;
}
Sono certo che questa soluzione possa essere migliorata.
Riferimenti
add_filter()
- "I filtri sono gli hook che WordPress lancia..."wp_insert_post_data
- "Un hook filter chiamato dalla funzione wp_insert_post..."global
keyword - "Lo scope di una variabile è il contesto in cui è definita..."get_post_meta()
- "Questa funzione restituisce i valori dei campi personalizzati..."stristr()
- "Trova la prima occorrenza di una stringa (senza distinzione tra maiuscole e minuscole)..."

Sembra ragionevole per me. Immagino che come implementi il controllo dipenda da quale sia esattamente quel valore di post meta.
