WooCommerce Hook(WooCommerce_order_statuss_changed)无法运行javas



我试图在这个钩子中运行javascript,但它无法工作。我非常确信这个钩子是被触发的,因为我可以对数据库执行php插入并写入debug_log。我想问一下,它有解决方案吗?

函数.php

add_action( 'woocommerce_order_status_changed', 'your_function', 10, 3 ); 
function your_function( $order_id, $old_status, $new_status ){ 
// This doesnt work
// Enqueued script with localized data.
wp_enqueue_script( 'order_status_changed_1', 'https://www.gstatic.com/firebasejs/7.3.0/firebase-app.js');
wp_enqueue_script( 'order_status_changed_2', 'https://www.gstatic.com/firebasejs/7.3.0/firebase-auth.js');
wp_enqueue_script( 'order_status_changed_3', 'https://www.gstatic.com/firebasejs/7.3.0/firebase-firestore.js');
wp_enqueue_script( 'order_status_changed_4', plugin_dir_url( __FILE__ ) . 'js/scripts_v1.js' );
// Localize the script with new data
$data = array(
'order_number' => $order_id,
'order_status' => $new_status,
'action' => 'update_order_status'
);
wp_localize_script( 'order_status_changed_4', 'data', $data );
// This work (Below code)
global $wpdb;
$sql = $wpdb->prepare("INSERT INTO `test`(`order_id`, `status`) VALUES (%s,%s)",$order_id,$new_status);
$wpdb->query($sql);
error_log("Trigger");
}

scripts_v1.js

var action = data.action;
if(action == "update_order_status" ){
console.log("here");
db.collection("orders").doc(data.order_number).update({
orderStatus : data.order_status
})
.then(function() {
console.log("Document successfully updated!");
})
.catch(function(error) {
// The document probably doesn't exist.
console.error("Error updating document: ", error);
});
}

钩子可能会被触发,但这不是将脚本排队的方法。脚本添加者:

add_action( 'admin_enqueue_scripts', 'your_function')
function your_function(){
wp_enqueue_script( 'order_status_changed_1','https://www.gstatic.com/firebasejs/7.3.0/firebase-app.js');
}

这意味着你的JS没有被添加到页面中(在开发者工具中检查你的"网络"选项卡(。

您可以通过直接输出脚本以不同的方式添加脚本。或者有条件地在订单状态更改后加载的页面上加载脚本。

这意味着你照常使用入队操作。但是您添加了一个将脚本排入队列的条件:

if(is_page('order-status-changed'){
// wp_enqueue_script
}

也许你可以提供更多关于订单更改状态的信息,以及你的目标是什么?

希望帮助:

if(data.action == "update_order_status" ){ <-- edit
console.log("here");
db.collection("orders").doc(data.order_number).update({
orderStatus : data.order_status
})
.then(function() {
console.log("Document successfully updated!");
})
.catch(function(error) {
// The document probably doesn't exist.
console.error("Error updating document: ", error);
});
}

最新更新