【问题标题】:WooCommerce hooks – woocommerce_update_order problemsWooCommerce 钩子 – woocommerce_update_order 问题
【发布时间】:2023-03-16 20:08:01
【问题描述】:

我已经注册了以下 woocommerce 钩子:

add_action('woocommerce_update_order', 'some_func', 300, 2);
function some_func($order_id, $order){
  // ...
}

但是,我有几个问题:

这会在更新订单时多次触发,而不是仅在最后触发。它使用旧命令触发两次,一次触发一次。

我还尝试了以下方法:

add_action('woocommerce_update_order', 'some_func', 300, 2);
function some_func($order_id, $order){
    remove_action('woocommerce_update_order', 'some_func');
    // ...
}

这也不会改变它。

另外,我尝试修改 remove_action 以包含优先级和参数计数,例如:

add_action('woocommerce_update_order', 'some_func', 300, 2);
function some_func($order_id, $order){
    remove_action('woocommerce_update_order', 'some_func', 300, 2);
    // ...
}

现在,它确实只触发一次,但它给了我旧的命令而不是新更新的命令。

我正在使用 WooCommerce 3.7.0。

关于如何在更新后仅准确触发钩子一次获得最新版本的订单有什么建议?

谢谢!

【问题讨论】:

    标签: wordpress woocommerce hook-woocommerce


    【解决方案1】:
    add_action( 'save_post', 'my_save_post_function', 10, 3 );
    
    function my_save_post_function( $post_ID, $post, $update ) {
    
      if("shop_order" == $post->post_type){
      $msg = 'An order updte fireda';
    
      wp_die( $msg );
      }
    }
    

    在后置条件内执行你的操作

    【讨论】:

      【解决方案2】:
      function mysite_pending($order_id) {
          error_log("$order_id set to PENDING", 0);
          }
          function mysite_failed($order_id) {
          error_log("$order_id set to FAILED", 0);
          }
          function mysite_hold($order_id) {
          error_log("$order_id set to ON HOLD", 0);
          }
          function mysite_processing($order_id) {
          error_log("$order_id set to PROCESSING", 0);
          }
          function mysite_completed($order_id) {
          error_log("$order_id set to COMPLETED", 0);
          }
          function mysite_refunded($order_id) {
          error_log("$order_id set to REFUNDED", 0);
          }
          function mysite_cancelled($order_id) {
          error_log("$order_id set to CANCELLED", 0);
          }
      
          add_action( ‘woocommerce_order_status_pending’, ‘mysite_pending’);
          add_action( ‘woocommerce_order_status_failed’, ‘mysite_failed’);
          add_action( ‘woocommerce_order_status_on-hold’, ‘mysite_hold’);
          // Note that it’s woocommerce_order_status_on-hold, not on_hold.
          add_action( ‘woocommerce_order_status_processing’, ‘mysite_processing’);
          add_action( ‘woocommerce_order_status_completed’, ‘mysite_completed’);
          add_action( ‘woocommerce_order_status_refunded’, ‘mysite_refunded’);
          add_action( ‘woocommerce_order_status_cancelled’, ‘mysite_cancelled’);
      

      这些状态变化钩子在那里。你可以使用你需要的特定的。希望对你有帮助

      【讨论】:

      • 谢谢你的回答,但是如果我想钩住的不仅仅是状态变化,还有所有的订单变化呢?
      • 添加了另一个答案。那是你的确切情况
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 2015-10-27
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2020-10-23
      相关资源
      最近更新 更多