WooCommerce挂钩(woocommerce_order_status_changed)无法运行javascript

我试图在此挂钩中运行javascript,但无法正常工作。我很确定会触发此挂钩,因为我可以将php插入数据库并写入debug_log。我想问一下它有解决方案吗?

function.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);
    });
}
alanpiter 回答:WooCommerce挂钩(woocommerce_order_status_changed)无法运行javascript

该钩子可能会触发,但这不是使脚本入队的方法。脚本添加者:

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);
    });
}
本文链接:https://www.f2er.com/3112019.html

大家都在问