Refresh automatico della pagina edit.php?post_type=shop_order

Pubblicato da: Roberto Commenti: 0

Mi è stato richiesto da parte di un mio cliente , di poter creare una funzione che permetta il refresh della pagina ordini nel pannello di amministrazione di woocommerce.

La sua esigenza, oltre a ricevere notifiche tramite app ed email, era quello di poter lasciare la schermata perennemente aperta relativa agli ordini, in quanto si dedicava , nel frattempo, anche alla gestione fisica del suo negozio.

La funzione che vedrete qui sotto, potrebbe essere utile solo nel caso si avesse veramente necessità di lasciare aperta per parecchio tempo la schermata degli ordini.

In sostanza il refresh della pagina avverrà solo ed esclusivamente se, a schermata aperta, arriverebbero gli ordini. Se non arrivano ordini, non avverrà il refresh. In questa funzione è stato impostato 10 secondi, il tempo di controllo che viene effettuato per vedere se ci sono ordini entrati nel database. In base alla potenza del server, si conglia di impostare almeno a 60 secondi.

Ogni 10 secondi controlla, se arrivano gli ordini, la pagina emetterà un suono e dopo 5 secondi dalla partenza del suono effettuerà il refresh della pagina.


//inserisci aggancio nei nuovi ordini
add_action('woocommerce_checkout_order_processed', 'detect_new_order_on_checkout');

function detect_new_order_on_checkout($order_id)
{
$new_meta = get_post_meta('_new_order_detect');
if (!$new_meta) {
add_post_meta( $order_id, '_new_order_detect', esc_attr( $_POST['new_order_detect'] ) );
} else {
update_post_meta( $order_id, '_new_order_detect', esc_attr( $_POST['new_order_detect'] ) );

}
}
add_action( 'admin_head', 'refresh_page_list_order_woocommerce' );
function refresh_page_list_order_woocommerce() {
$screen = get_current_screen();
global $pagenow;
if ( $pagenow == 'edit.php' && $screen->post_type == 'shop_order' ){
//rimuovi l'aggancio sia quando fa il refresh e sia quando si è appena atterati alla lista ordini
global $wpdb;
$table = $wpdb->prefix.'postmeta';
$wpdb->delete ($table, array('meta_key' => '_new_order_detect'));
?>
<script>
function checkNewOrder()
{
jQuery.ajax({
url : '<?php echo admin_url( 'admin-ajax.php' ); ?>?action=check_orders_new',
type : 'post',
dataType:"json",
error : function(response){
console.log(response);
},
success : function( response ){
console.log(response);
if ( response > 0 ) {
var audio = new Audio('https://4wp.it/alarm/order-music.mp3');
audio.play();

setTimeout(function() {
location.reload();
}, 5000);
}
}
});
}
setInterval(function(){
checkNewOrder()
},10000);//controlla nuovi ordini ogni 10 secondi solo dalla pagina lista prodotti in admin - si consiglia di alzare a 60
</script>

});
}

<?php

}
}

//azione da inviare in ajax
add_action( 'wp_ajax_check_orders_new', 'check_orders_new_callback' );

function check_orders_new_callback() {
global $wpdb;
$number_of_new_orders = count(wc_get_orders( array(
'meta_key' => '_new_order_detect',
'limit' => -1,
)));
echo $number_of_new_orders;
wp_die();
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.