Ich benötige Hilfe bei der Erstellung eines Batch-Post-Meta-Updaters, den ich meiner Options-/Einstellungsseite hinzufügen möchte.
Grundsätzlich suche ich nach einer Möglichkeit, auf eine Schaltfläche zu klicken, mit der ein Stapel durch alle Posts eines ausgewählten CPT- "Listings" geführt und ein Metafeld aktualisiert sowie eine Funktion ausgeführt wird.
Schaut mein Code richtig? Und wie füge ich eine Schaltfläche hinzu, die die Seite nicht aktualisiert, diese Funktion jedoch startet?.
function batch_update_meta(){
$post_type = "listings";
$post_type_object = get_post_type_object($post_type);
$label = $post_type_object->label;
echo All . "$label";
$posts = get_posts(array('post_type'=> $post_type, 'post_status'=> 'publish', 'suppress_filters' => false, 'posts_per_page'=>-1));
foreach ($posts as $post) {
$meta_value1 = get_post_meta($post->ID, $key1, True);
if (!empty($meta_value1)){
$meta_value2 = media_process($meta_value1, $post->ID); //Returns a string after it finishes process.
update_post_meta($post->ID, $key2, $meta_value2)
echo $post->post_title." UPDATED"; //Prints updated after ran.
}
}
}
Schauen Sie sich die Dokumentation AJAX an. Auf dieser Site und in den Google-Dokumenten finden Sie zahlreiche Beispiele, mit denen Sie ein Serverereignis auslösen können, ohne die Seite zu aktualisieren.
In diesem Fall hört WP einen AJAX -Aufruf, der wie http://example.com/wp-admin/admin-ajax.php?action=wpse20160318_batch_update
aussieht. Wenn es ausgelöst wird, durchläuft es Ihren Batch-Prozess und gibt eine JSON-Nachricht aus, die nach Abschluss des Aufrufs von JavaScript verarbeitet werden kann.
Die wichtigsten Änderungen sind das Hinzufügen eines AJAX Listeners, um den batch_update_meta
auszulösen, echo
s zu entfernen und JSON zurückzugeben, wenn der Vorgang abgeschlossen ist.
function batch_update_meta() {
$post_type = "listings";
$post_type_object = get_post_type_object( $post_type );
$label = $post_type_object->label;
$processed = array ();
$posts = get_posts( array (
'post_type' => $post_type,
'post_status' => 'publish',
'suppress_filters' => false,
'posts_per_page' => - 1,
) );
foreach ( $posts as $post ) {
$key1 = 'my_meta_key_1';
$key2 = 'my_meta_key_2';
$meta_value1 = get_post_meta( $post->ID, $key1, true );
if ( ! empty( $meta_value1 ) ) {
// Returns a string after it finishes process.
$meta_value2 = media_process( $meta_value1, $post->ID );
// Update the meta
update_post_meta( $post->ID, $key2, $meta_value2, $meta_value1 );
// Add to our success list
$processed[] = $post->post_title;
}
else {
//...
}
}
// give a response for AJAX
wp_send_json_success( array (
'label' => $label,
'processed' => $processed,
'message' => 'Batch Completed.',
) );
}
// callback for AJAX function
function wpse20160318_batch_update_meta() {
// run your batch update
batch_update_meta();
}
// must be logged in to trigger - http://example.com/wp-admin/admin-ajax.php?action=wpse20160318_batch_update
add_action( 'wp_ajax_wpse20160318_batch_update', 'wpse20160318_batch_update_meta' );