Come agganciare update_post_meta e delete_post_meta?


29

Sto ancora lottando per aggirare tutto questo agganciarsi alle cose, quindi sono davvero bloccato nel provare a fare il seguente compito:

Se update_post_metaviene meta_keyattivato, controlla per vedere se è uguale a qualcosa (voglio innescare un po 'di codice se viene utilizzato un particolare meta_key). Se la meta chiave che sto cercando, esegui del codice che dovrà conoscere la $post->IDchiave meta in fase di aggiornamento.

Ho bisogno di agganciare delete_post_metaanche a quel tipo di fare il contrario come sopra.

Qualcuno può fornirmi un codice di esempio per l'aggancio update_post_metae delete_post_meta?

Risposte:


45

Gli update_post_metahook vengono chiamati dalla update_metadata()funzione più generica , quindi potresti non averlo trovato direttamente. I tre ganci sono:

  • update_post_metadata, un filtro che ti consente di "dirottare" l'aggiornamento dei metadati e fare qualcos'altro. Se si collega una funzione che restituisce un valore booleano, l'esecuzione si interrompe e viene restituito il valore booleano.
  • update_post_meta, un'azione che viene chiamata prima che i dati vengano aggiornati nel database.
  • updated_post_meta, un'azione che viene chiamata dopo l'aggiornamento dei dati nel database.

Se la chiave di meta non esiste nel database ancora, update_metadata()passa il controllo add_metadata(), che ha i ganci simili add_post_metadata, add_post_metae added_post_meta. Questo succede prima che update[d]_post_metavenga chiamato. Quindi, se vuoi fare qualcosa quando la meta chiave viene aggiunta o aggiornata, assicurati di agganciare sia update*i add*ganci sia i ganci - ma nota che mentre le azioni updated_*e added_*passano parametri simili update_*e add_*non lo fanno ( add_post_metanon passa prima un meta ID) .

delete_metadata()ha ganci simili: delete_post_metadata, delete_post_metae deleted_post_meta.

Codice di esempio:

add_action( 'added_post_meta', 'wpse16835_after_post_meta', 10, 4 );
add_action( 'updated_post_meta', 'wpse16835_after_post_meta', 10, 4 );
function wpse16835_after_post_meta( $meta_id, $post_id, $meta_key, $meta_value )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_do_something( $post_id, $meta_value );
    }
}

add_action( 'deleted_post_meta', 'wpse16835_deleted_post_meta', 10, 4 );
function wpse16835_deleted_post_meta( $deleted_meta_ids, $post_id, $meta_key, $only_delete_these_meta_values )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_undo_something( $post_id );
    }
}

super grazie per questo. Ero consapevole update_post_metadell'uso update_metadatae lì dentro c'erano degli ami added_post_metae updated_post_metaquesto è quanto ho potuto. Non ho capito come usare. Ma ora penso di averlo :)
Brady,

3
Più specificamente, l'amo èupdated_{$post_type}_meta
Benjamin Intal

8

La risposta di Jan copre praticamente tutto sopra, tranne nel caso in cui un metadata personalizzato viene eliminato dalla pagina Modifica post. Ciò avviene in modo asincrono non appena si fa clic sul pulsante "Elimina" sotto i metadati, tramite una chiamata a wp-admin / admin-ajax.php. Sfortunatamente, queste chiamate ignorano la delete_metadata()funzione in meta.php e chiamano invece delete_meta()in wp-admin / Includes / post.php (da non confondere con wp-Includes / post.php).

Tuttavia, ci sono 2 azioni che possono essere ancora utilizzate delete_postmeta(prima dell'eliminazione) e deleted_postmeta(dopo l'eliminazione). Entrambi accettano un singolo parametro $mid, che è l'ID dei metadati ( non la chiave). Puoi recuperare l'oggetto metadati usando:

$meta = get_post_meta_by_id($mid);  

che restituisce un oggetto con meta_id, post_id, meta_key e meta_valore. Naturalmente, quando deleted_postmetasi chiamano i metadati sono stati eliminati, quindi get_post_meta_by_id()non funzionerà (il che rende inutile quell'azione)

Lo stesso vale per l'aggiornamento di metadati personalizzati dalla pagina Modifica post. La update_metadata()funzione (e le sue azioni) in meta.php non è chiamata, ma invece è la update_meta()funzione in wp-admin / Includes / post.php. Ancora due azioni qui, update_postmetae updated_postmeta. Gli argomenti sono $ meta_id, $ post_id, $ meta_key, $ meta_value.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.