繁体   English   中英

woocommerce_order_status_completed 未触发

[英]woocommerce_order_status_completed not triggered

我想编写一个自定义插件,在 woocommerce 订单完成后执行一些操作,但我无法让这个钩子工作。 我可以看到这个问题被问了很多次。

像这里: https : //wordpress.stackexchange.com/questions/134463/woocommerce-order-status-completed-action-hook-not-working

在这里: https : //wordpress.org/support/topic/woocommerce_order_status_completed-is-not-working

在这里: https : //wordpress.org/support/topic/woocommerce_order_status_completed-action-hook-not-working

但是我无法帮助自己回答这些人收到的答案。

我尝试以几种不同的方式添加操作:

add_action( 'woocommerce_order_status_completed', 'ikwoocommerceorderstatuscompleted_func');

add_action( 'woocommerce_order_status_completed', array($this,'ikwoocommerceorderstatuscompleted_func'), 10, 1);

add_action( 'woocommerce_order_status_completed', array(&$this,'ikwoocommerceorderstatuscompleted_func'), 10, 1);

还尝试了一个类:

class IKHooks {
    function __construct() {
        add_action( 'woocommerce_order_status_completed', array($this,'ikwoocommerceorderstatuscompleted_func'), 10, 1);
    }

    public function ikwoocommerceorderstatuscompleted_func( $order_id ) {

    }
}

我什至试图把这个动作放在课堂之外:

add_action( 'woocommerce_order_status_completed', array(IKHooks,'ikwoocommerceorderstatuscompleted_func'), 10, 1);

这些示例都不起作用。 :(

在调用钩子之前检查以下步骤。

  1. 检查订单完成电子邮件是否已发送。

  2. 钩子在插件文件或主题functions.php中正确注册

add_action( 'woocommerce_order_status_completed','callback_function_name' ); global $wp_filter; print_r($wp_filter); exit;

检查回调函数的名称是否在钩子数组中:

[woocommerce_order_status_completed] => Array
    (
        [10] => Array
            (
                [wc_paying_customer] => Array
                    (
                        [function] => wc_paying_customer
                        [accepted_args] => 1
                    )

                [wc_downloadable_product_permissions] => Array
                    (
                        [function] => wc_downloadable_product_permissions
                        [accepted_args] => 1
                    )

                [callback_function_name] => Array
                    (
                        [function] => callback_function_name
                        [accepted_args] => 3
                    )

            )

    )

如果您找到它,则一切正常,这意味着您的主题或functions.php 文件可能存在问题。 检查文件中的钩子或回调函数,然后查找remove_actionremove_all_actions ,这可能是阻止调用钩子的原因。

也可以通过这种方式查看

add_action( 'woocommerce_order_status_completed', 'callback_function_name', 1);

将钩子的优先级从 10 更改为 1,使其比任何其他动作或钩子更先被调用。

你可以使用这个钩子

add_action( 'woocommerce_order_status_changed', 'your_function', 99, 4 );

这个函数看起来像

function your_function( $order_id, $old_status, $new_status, $order ){
    if( $new_status == "completed" ) {
        //your code here
    }
}

希望这会有所帮助。

我之前遇到过类似的问题并将其解决为:

以下代码将订单状态更新为completed

add_action( 'woocommerce_thankyou', 'your_wc_autocomplete_order' );

function your_wc_autocomplete_order( $order_id ) {

 if ( ! $order_id ) {
   return;
 }

 $order = wc_get_order( $order_id );

 $order->update_status( 'completed' );

}

一旦订单完成,如果你想做点什么,看下面的代码:

add_action('woocommerce_order_status_completed','payment_complete');

function payment_complete($order_id)
{
   //global $items;
   //$order = new WC_Order($order_id);
   // do something ...
}

希望它会起作用:)

woocommerce_order_status_changedwoocommerce_order_status_completed实际上对我woocommerce_order_status_completed 在挣扎了 2 天后,我意识到您无法在管理面板中使用 var_dump 或 var_export 或 print_r 或其他任何内容,它无法正常工作。

因此,如果您是像我这样的新手并且认为这些操作不起作用,请尝试触发另一个操作,例如发送邮件。

此代码有效:

function your_function( $order_id ){
   $order = new WC_Order( $order_id );
    $to_email = 'testing_mail@sample.com';
    $payment = $order->get_payment_method_title();
    $headers = 'From: Your Name <Your_site_mail@address.com>' . "\r\n";
    wp_mail($to_email, 'subject', $payment, $headers );
}

add_action( 'woocommerce_order_status_completed', 'your_function');

尝试使用动作钩子woocommerce_order_status_changed
它需要4个参数。 订单 ID旧状态,新状态订单 进一步的代码参考这里

这可能不完全适合您的要求,但似乎值得替代。 希望这会有所帮助。

我想你可能在追这个人。 woocommerce_payment_complete

function mysite_woocommerce_payment_complete( $order_id ) {
    error_log( "Payment has been received for order $order_id", 0 );
}
add_action( 'woocommerce_payment_complete', 'mysite_woocommerce_payment_complete' );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM