Wie bekomme ich Post-Bulk-Edit-Action-Trigger und bekomme editierte Post-IDs?

Ich möchte E-Mail senden, wenn eine Post-Metas eines Posts auf den erwarteten Wert geändert wird. So zuvor war ich Schleife, um das Post-Meta in jedem Post zu überprüfen. Hier läuft die Schleife in admin_init hook. Aber das verlangsamt die Seite, also denke ich, dies nur auf dem sicheren Post zu tun. Wenn der bearbeitete Beitrag den erwarteten Meta-Wert hat, werde ich die Mail senden.

Bisherige

 $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); if(get_post_meta($the_query->post->ID,'custom_post_meta',true)=='ok'){ //mail() function goes here } } } wp_reset_postdata(); 

Dies ist unerwünscht, da nur bestimmte Beiträge bearbeitet werden können. Blindes Überprüfen von Post-Meta mit einer Schleife jedes Mal ist Verschwendung.

Also dachte save_post , wir werden auf save_post beim Speichern prüfen, ob das Post-Meta auf den erwarteten Wert geändert wird, dann machen wir das mail.like unten

 function testing($post_id){ if(get_post_meta($the_query->post->ID,'send_mail',true)=='ok'){ //mail() function goes here } //only for edited post alone i'm checking here } add_action('save_post','testing'); 

Es gibt noch zwei weitere Szenarien, in denen das Post-Meta geändert werden kann, die Massenbearbeitung und Schnellbearbeitung

Für eine schnelle Bearbeitung habe ich das gefunden

 function check(){ var_dump($_REQUEST);//can able to get the post id, i can do the rest } add_action('check_ajax_referer','check'); 

Aber für die Massenbearbeitung habe ich keine Ahnung. Ich habe versucht zu suchen, In dieser Antwort fand ich, dass $_REQUEST action und postid enthalten postid . So dachte ich, für die Bulk-Bearbeitung könnte es eine Aktion in $_REQUEST['action'] aber ich konnte nicht finden, wenn ich es so versuche

 function another_check(){ var_dump($REQUEST['action']); } add_action('admin_init','another_check'); 

Ich fand dieses check_admin_referer auch, aber ich konnte nicht herausfinden, wie es nicht druckt, wenn ich var dump. functioniert das ( check_admin_referer ) oder passt es dazu? Gibt es eine andere einfache Möglichkeit, die bearbeiteten Post-IDs zu erhalten?

Wie kann ich die Liste der Post-ID auf Bulk-Bearbeitung bekommen? Ab dann kann ich die Überprüfung durchführen und die E-Mail entsprechend senden

Solutions Collecting From Web of "Wie bekomme ich Post-Bulk-Edit-Action-Trigger und bekomme editierte Post-IDs?"

Wenn dein Problem ist:

Ich möchte eine E-Mail senden, wenn eine Post-Metas eines Posts auf den erwarteten Wert geändert wird

Warum fragst du nach:

Wie kann ich die Liste der Post-ID auf Bulk-Bearbeitung bekommen?

Dies ist ein typisches x / y-Problem : Wenn Sie ein Problem haben, fragen Sie, wie Sie dieses Problem lösen können, anstatt nach Möglichkeiten zu fragen, was Sie für die Lösung halten …

Gehen Sie in die Details, möchten Sie eine Aktion ausführen, wenn ein Meta-Feld aktualisiert wird? Warum nicht einfach auf den Moment schauen, in dem es aktualisiert wird?

Jedes Mal 'updated_postmeta' ein Post-Meta aktualisiert wird, ruft WordPress den Hook 'updated_postmeta' wie 'updated_postmeta'

do_action("updated_{$type}_meta", $meta_id, $object_id, $meta_key, $meta_value);

wo $type 'post' .

Wie Sie sehen können, haben Sie genügend Informationen, um alles zu tun, was Sie wollen.

Angenommen, Sie möchten dem Postautor immer dann eine E-Mail senden, wenn das Meta ‘send_mail’ auf ‘ok’ gesetzt ist:

 add_action( 'updated_post_meta', 'listen_to_meta_change', 20, 4 ); function listen_to_meta_change( $mid, $pid, $key, $value ) { if ( $key !== 'send_mail' ) return; // if the key is not the right one do nothing $value = maybe_unserialize( $value ); if ( $value !== 'on' ) return; // if the value is not the right one do nothing // if we're here, the post meta 'send_mail' was set to 'on' for a post, let's get it $post = get_post( $pid ); if ( $post->post_type !== 'post' ) return; // maybe check for a specific post type? $recipient = new WP_User( $post->post_author ); // get the post author if ( ! $recipient->exists() ) return; // check if is a valid user static $sended = array(); if ( ! isset($sended[$recipient->ID]) ) $sended[$recipient->ID] = array(); if ( isset($sended[$recipient->ID][$pid]) ) { // already sent email for this user & post & request: that's enough, let's exit return; } $sended[$recipient->ID][] = $pid; // ok, send the email, you can write the function, by yourself, isn't it? // be sure to have control on how many emails you send to an user: // too much emails slow down your site and also make you a spammer... // probably you can take control that using an user meta... send_email_to_user_when_meta_updated( $recipient ); } 

Beachten Sie, dass dieser Code nur ausgeführt wird, wenn ein Meta aktualisiert wird und nicht, wenn hinzugefügt wird .

Wenn Sie denselben Code ausführen möchten, wenn auch das Meta hinzugefügt wird, fügen Sie einfach eine weitere Aktion hinzu:

 add_action( 'added_post_meta', 'listen_to_meta_change', 20, 4 ); 

Beide Hooks funktionieren auf identische Weise und übergeben identische Argumente, also kein Problem bei der Verwendung derselben function für beide.