Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trigger a javascript function when a WooCommerce order comes in processing status

I am having trouble calling a js function after I process a Woocommerce order. I have the following code in my 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
    }

I want to call a js function that is in the custom.js file, but so far I haven't been successful. I was able to call a function from that file from an unrelated page template, but not using the woocommerce_order_status_processing call. Is this possible?

like image 564
waching Avatar asked Oct 17 '25 06:10

waching


2 Answers

In WooCommerce, When customer place an order after payment, it's redirected to "Order received" (Thankyou) page, that is the only moment where you can trigger javascript function for a "processing" order status:

1). Enqueuing a Js File

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). Calling a javascript function

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
}

This kind of example is used by tracking scripts for example, like for GooGle Analytics…

like image 138
LoicTheAztec Avatar answered Oct 18 '25 21:10

LoicTheAztec


You can use the “wp_footer” action in PHP to output a JS function declaration like so:

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/

like image 41
wiseone Avatar answered Oct 18 '25 21:10

wiseone



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!