[英]woocommerce_order_status_completed not called on stripe payment
[英]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);
这些示例都不起作用。 :(
在调用钩子之前检查以下步骤。
检查订单完成电子邮件是否已发送。
钩子在插件文件或主题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_action
或remove_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_changed
和woocommerce_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.