Funzione da eseguire quando un post viene spostato nel cestino.


9

Salve, c'è un'azione che può essere eseguita mentre un post viene spostato nel cestino .... Ho provato delete_post ed delete_post. Funziona solo due volte per ogni azione (prima e dopo l'azione come scritto nel codice) e l'output viene mostrato solo quando il post viene eliminato dal cestino. Esempio: voglio inviare un'e-mail all'autore affermando che il suo post è stato spostato nel cestino per qualche motivo e aggiornare alcuni user_meta. se io uso

add_action('deleted_post', 'emailUser');

o

add_action('delete_post', 'emailUser');

funziona solo quando il post viene eliminato dal cestino. . .

Aggiornamento: ha funzionato per i messaggi spazzatura usando

add_action('trash_post', 'emailUser');

ma il problema per la doppia esecuzione della funzione è ancora presente. . .


1
Scrivi la soluzione di seguito e contrassegnala come risposta
Ashfame,

non è la risposta corretta dato che la doppia esecuzione della funzione è ancora lì ...
Harjeet Singh,

Risposte:


10

Questo farà il trucco!

add_action('trash_post','my_trash_post_function',1,1);
function my_trash_post_function($post_id){
    if(!did_action('trash_post')){
        // do stuff
    }
}

Qui aggiungiamo la funzione e per impedire che l'hook esegua più di una volta usando did_action:

http://codex.wordpress.org/Function_Reference/did_action

Come sempre, questi tipi di ganci prendono la forma {post_status}_{post_type}, quindi trash_post, trash_page, trash_customposttype, publish_pageecc


2

Quell'azione verrà chiamata una volta quando il post viene spostato nel cestino e poi di nuovo quando il cestino viene svuotato.

La tua funzione potrebbe verificare la presenza di un'opzione con l'ID postale nel nome, se l'opzione non è presente, invia l'e-mail e imposta l'opzione. Se l'opzione è presente (ad es. Viene richiamata una seconda volta) non invieresti l'e-mail.

Ricorda quindi di eliminare l'opzione, in modo che il tuo database non si riempia con loro!

add_action( 'delete_post', 'emailUser' );

function emailUser( $postid ) {

   if ( ! get_option( 'user_emailed_' . $postid ) ) {
      // send email here
      update_option( 'user_emailed_' . $postid, 'anything' );
   } else {
      delete_option( 'user_emailed_' . $postid );
   }

}

Fammi sapere se funziona!


puoi utilizzare l'API Transients anziché le opzioni, quindi non dovrai preoccuparti di eliminare le opzioni dal database codex.wordpress.org/Transients_API
Bainternet,

Grazie Simone che funziona benissimo. . . . non so come n perché ho perso questo. . ..
Harjeet Singh

Bainternet, ho visto i transitori e sono abbastanza simili a get_option nel mio caso e mi piacerebbe attenermi anche a get_option per la cosa di eliminazione poiché l'esecuzione dipenderebbe anche dalle prestazioni del server e dal calcolo del tempo di esecuzione del codice prima e dopo la cancellazione di la posta potrebbe diventare difficile.
Harjeet Singh

Non è necessario iniziare ad aggiungere / modificare campi o transitori di opzioni, aggiungendo ulteriori query. Invece chiama semplicemente did_action per verificare se l'hook è già stato attivato.
Tom J Nowell

1
add_action('trash_post', 'trash_post_function_name');

L'hook sopra non ha funzionato per me in WP 4.7.5.

Questo è ciò che ha funzionato per me

add_action('wp_trash_post', 'trash_post_function_name');
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.