J'ai besoin d'aide pour créer un lot post meta updater que j'essaie d'ajouter à ma page des options/paramètres.
Fondamentalement, je cherche un moyen de cliquer sur un bouton, un lot parcourt toutes les publications d'un "listing" CPT sélectionné, met à jour un champ méta et exécute une fonction.
Mon code est-il correct? Et comment puis-je ajouter un bouton qui ne rafraîchira pas la page, mais lancera cette fonction.
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.
}
}
}
Jetez un coup d'œil à la documentation AJAX , il existe de nombreux exemples sur ce site et sur Google pour déclencher un événement sur le serveur sans actualiser la page.
Dans ce cas, WP écoute un appel AJAX ressemblant à http://example.com/wp-admin/admin-ajax.php?action=wpse20160318_batch_update
. Une fois déclenché, votre processus de traitement par lots générera un message JSON pouvant être utilisé par JavaScript une fois l'appel terminé.
Les principales modifications consistent simplement à ajouter un écouteur AJAX pour déclencher le batch_update_meta
, à supprimer toutes les echo
s et à renvoyer le code JSON une fois l'opération terminée.
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' );