Aggiungere un valore meta al contenuto del post in WordPress durante save_post

8 gen 2011, 05:12:02
Visualizzazioni: 1.8K
Voti: 2

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?

2
Commenti

Hai provato a utilizzare il filtro wp_insert_post_data? (Nonostante il nome, viene eseguito sia durante gli inserimenti che gli aggiornamenti.)

BoltClock BoltClock
8 gen 2011 05:25:22

@BoltClock Era la strada che avevo iniziato a percorrere subito dopo aver posto questa domanda - mi sono imbattuto in un esempio funzionante che potrebbe senza dubbio essere migliorato. Lo condividerò qui sotto.

Sampson Sampson
8 gen 2011 07:17:32
Tutte le risposte alla domanda 1
2

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

  1. add_filter() - "I filtri sono gli hook che WordPress lancia..."
  2. wp_insert_post_data - "Un hook filter chiamato dalla funzione wp_insert_post..."
  3. global keyword - "Lo scope di una variabile è il contesto in cui è definita..."
  4. get_post_meta() - "Questa funzione restituisce i valori dei campi personalizzati..."
  5. stristr() - "Trova la prima occorrenza di una stringa (senza distinzione tra maiuscole e minuscole)..."
8 gen 2011 07:25:44
Commenti

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

BoltClock BoltClock
8 gen 2011 07:40:33

@BoltClock Esatto. Ho volutamente mantenuto questo esempio piuttosto leggero. La mia versione di produzione ha tutti i controlli e i bilanciamenti necessari.

Sampson Sampson
8 gen 2011 07:42:58