【问题标题】:WooCommerce Hook ( woocommerce_order_status_changed ) cant run javascriptWooCommerce Hook (woocommerce_order_status_changed) 无法运行 javascript
【发布时间】:2020-03-08 23:23:46
【问题描述】:

我试图在这个钩子中运行 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);
    });
}

【问题讨论】:

    标签: javascript php wordpress firebase hook-woocommerce


    【解决方案1】:

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

    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
    }
    

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

    【讨论】:

    • 上面的代码我在另一个钩子中尝试过,它的工作。我认为这可能与 wp-admin 有关?由于我的目标是将订单状态更新为 firebase ,因此当管理员在仪表板上手动更新订单状态时。我试过你的方法,它在前面工作,但是当来到仪表板时,任何 javascript 都没有加载。
    • 啊抱歉,我不知道它是为 wp-admin 准备的。 wp_enqueue_scripts 需要成为 admin_enqueue_scripts 然后。我会更新的。
    【解决方案2】:

    希望帮助:

    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);
        });
    }
    

    【讨论】:

    • 嗨,我忘了把我已经声明的变量。无论如何,谢谢。 =)
    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2020-09-07
    • 2017-06-11
    • 2018-09-04
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多