我正在制作一个WordPress插件,每当订单状态从“挂起”更新到“处理”时,我都需要进行API调用。
function __construct(){
add_action( 'woocommerce_after_order_object_save', [$this,'action_woocommerce_doba_order_import'], 10, 1 );
}
public function action_woocommerce_doba_order_import($order){
if ( 'processing' === $order->get_status() ) {
"API call here"
}
}当订单状态从“未决”更新到“处理”时,此代码工作良好,但当状态从“处理”更改为其他内容时,它会进行两个额外的API调用。因此,对于每个订单,我会得到两个额外的API调用,每个订单的状态从处理更改为其他。我肯定犯了一些错误。也许我使用了错误的钩子,或者需要设置不同的条件。
发布于 2022-04-22 09:51:07
我们已经创建了一个WordPress代码,用于更改订单状态,每次订单状态从“挂起”更新到“处理”时都调用钩子函数。
你试试这个:
function __construct(){
add_action( 'woocommerce_after_order_object_save', [$this,'action_woocommerce_doba_order_import'], 10, 1 );
}
public function action_woocommerce_doba_order_import($order_id){
if( ! $order_id ) return;
$order = wc_get_order( $order_id );
if( $order->get_status() == 'pending' ) {
$order->update_status( 'processing' );
}
}发布于 2022-04-26 11:14:53
我试图在最新版本的WooCommerce插件6.3.1中找到这个动作,但我没有找到,但我发现可能有一个更好的钩子可以使用,其中包括新的状态。
do_action( 'woocommerce_order_edit_status', $this->get_id(), $result['to'] );
所以你可以这样用它:
function __construct(){
add_action( 'woocommerce_order_edit_status', [$this,'action_woocommerce_doba_order_import'], 10, 2 );
}
public function action_woocommerce_doba_order_import($order_id, $new_status){
if( ! $order_id ) return;
//ignore other status changes without additional calls
if( 'pending' !== $new_status ) return;
$order = wc_get_order( $order_id );
}https://stackoverflow.com/questions/71427909
复制相似问题