为了账号安全,请及时绑定邮箱和手机立即绑定

当 WooCommerce 订单进入处理状态时触发 javascript 函数

当 WooCommerce 订单进入处理状态时触发 javascript 函数

PHP
哔哔one 2023-09-15 18:22:32
我在处理 Woocommerce 订单后调用 js 函数时遇到问题。我的中有以下代码functions.php:add_action( 'wp_enqueue_scripts', 'enqueue_so_18552010' );add_action( 'woocommerce_order_status_processing', 'purchaseCompleted' );function enqueue_so_18552010(){    wp_enqueue_script(         'my-java', // Handle        get_stylesheet_directory_uri() . '/js/custom.js?V=2020.08.01v12', // URL for child or parent themes        array( 'jquery' ), // Dependencies        false, // Version        true // In footer    );}        function purchaseCompleted()    {        //JS FUNCTION'S CALL GOES HERE    }我想调用文件中的js函数custom.js,但到目前为止我还没有成功。我能够从不相关的页面模板调用该文件中的函数,但不使用该woocommerce_order_status_processing调用。这可能吗?
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

在 WooCommerce 中,当客户付款后下订单时,它会被重定向到“订单已收到”(谢谢)页面,这是您可以触发 javascript 函数以获取“正在处理”订单状态的唯一时刻:


1)。将 Js 文件加入队列


add_action('wp_enqueue_scripts', 'order_received_enqueue_js_script');

function order_received_enqueue_js_script() {

    // Only on order received" (thankyou)

    if( ! is_wc_endpoint_url('order-received') )

        return;


    $order_id = absint( get_query_var('order-received') ); // Get the order ID


    $order = wc_get_order( $order_id ); // Get the WC_Order Object


    // Only for processing orders

    if ( ! is_a( $order, 'WC_Order') || ! $order->has_status( 'processing' ) ) {

        return;

    }


    wp_enqueue_script( 

        'my-java', // Handle

        get_stylesheet_directory_uri() . '/js/custom.js?V=2020.08.01v12', // URL for child or parent themes

        array( 'jquery' ), // Dependencies

        false, // Version

        true // In footer

    );

}

2)。调用 JavaScript 函数


add_action('wp_footer', 'order_received_js_script');

function order_received_js_script() {

    // Only on order received" (thankyou)

    if( ! is_wc_endpoint_url('order-received') )

        return; // Exit


    $order_id = absint( get_query_var('order-received') ); // Get the order ID


    if( get_post_type( $order_id ) !== 'shop_order' ) {

        return; // Exit

    }


    $order = wc_get_order( $order_id ); // Get the WC_Order Object


    // Only for processing orders

    if ( method_exists( $order, 'has_status') && ! $order->has_status( 'processing' ) ) {

        return; // Exit

    }


    ?>

    <script>

    // Once DOM is loaded

    jQuery( function($) { 

        // Trigger a function (example)

        myJsFunctionName('order-received', 'processing', {

            'order_id':       '<?php echo $order->get_order_id(); ?>',

            'order_key':      '<?php echo $order->get_order_key(); ?>',

            'transaction_id': '<?php echo $order->get_order_id(); ?>',

            'total':          '<?php echo $order->get_total(); ?>',

            'currency':       '<?php echo $order->get_currency(); ?>'

        });

    });

    </script>

    <?php

}

此类示例由跟踪脚本使用,例如 GooGle Analytics……


查看完整回答
反对 回复 2023-09-15
?
当年话下

TA贡献1890条经验 获得超9个赞

您可以使用 PHP 中的“wp_footer”操作来输出 JS 函数声明,如下所示:


function my_php_function() {

echo '<script>

function myFunction() {

  console.log("myFunction() was called.");

}

</script>';

}

add_action('wp_footer', 'my_php_function');

https://wordpress.org/support/topic/calling-a-function-from-functions-php/


查看完整回答
反对 回复 2023-09-15
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

例子-


 function ts_review_order_before_submit(){

   echo'<button onclick="js_function()" id="function" > JS 

          function 

        </button>'

 }


查看完整回答
反对 回复 2023-09-15
  • 3 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信