Woocommerce 用于订单状态更改的挂钩

Lui*_*ino 11 wordpress orders woocommerce hook-woocommerce woocommerce-theming

在我的自定义插件中,我需要捕获每次订单状态从 变为 的情况,wc_on_hold因此wc_completed我尝试写下:

function so_status_completed( $order_id, $old_status, $new_status ) {       
    
    // if user is active , then get order amount and do all other personal calculations
    
    global $wpdb;
    $order = wc_get_order( $order_id );
    //$payment_method = $order->get_payment_method(); //returns payment method bacs,cheque,cod etc
    $user_id = $order->get_user_id();
    $total = $order->get_total();
    $order_data = $order->get_data(); 
    //$order_total = $order->get_formatted_order_total();
    $order_total = $order->get_total();
    
    echo '<script>console.log("Debug Objects: Check order_total ' . $order_total. '");</script>';

}
add_action('woocommerce_order_payment_status_changed','so_status_completed',10,1);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将订单测试从暂停更改为完成时,我无法在 Chrome 控制台上回显给我订单价格......也许使用 add_action 不是将侦听器置于该事件的正确方法?

另外,由于我就在这里,我正在使用 $order-get_total() ,我在网上搜索了它的功能,但没有找到深入的文档,所以我想问你该方法是否是免费检索订单金额的正确方法应用?

谢谢!干杯!!!

Ruv*_*vee 17

“每次订单状态从 变为 时我都需要wc_on_hold捕获wc_completed

您需要将您的挂钩更改为woocommerce_order_status_changed.

“我无法进入 Chrome 控制台,该控制台回显给我订单价格”

你不能在这个钩子中使用javascriptand console.log。您需要使用该die函数或该error_log函数将其记录到您的debug.log文件中。


1- 使用die功能

add_action('woocommerce_order_status_changed', 'so_status_completed', 10, 3);

function so_status_completed($order_id, $old_status, $new_status)
{

    $order = wc_get_order($order_id);

    //$order_total = $order->get_formatted_order_total();
    $order_total = $order->get_total();

    die($order_total);
}
Run Code Online (Sandbox Code Playgroud)

2- 使用error_log功能

add_action('woocommerce_order_status_changed', 'so_status_completed', 10, 3);

function so_status_completed($order_id, $old_status, $new_status)
{

    $order = wc_get_order($order_id);

    //$order_total = $order->get_formatted_order_total();
    $order_total = $order->get_total();

    error_log(print_r('order total: ' . $order_total, true));
}
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 为了使其工作,您需要在wp-config.php文件中激活“调试”模式。因此,导航到您的wp-config.php文件并向其中添加以下行!
    (不推荐在制作中使用)
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
Run Code Online (Sandbox Code Playgroud)

3-使用file_put_contents函数创建一个简单的记录器!

add_action('woocommerce_order_status_changed', 'so_status_completed', 10, 3);

function so_status_completed($order_id, $old_status, $new_status)
{

  $order = wc_get_order($order_id);

  //$order_total = $order->get_formatted_order_total();
  $order_total = $order->get_total();

  // Simple logger 
  file_put_contents(dirname(__FILE__) . '/my_logger.txt', $order_total);
}
Run Code Online (Sandbox Code Playgroud)
  • 如果“my_logger.txt”不存在,则会创建它。如果它已经存在,那么它将被覆盖!

"append"如果需要,您可以将模式与记录器一起使用!所以你的记录器文件不会被覆盖。

add_action('woocommerce_order_status_changed', 'so_status_completed', 10, 3);

function so_status_completed($order_id, $old_status, $new_status)
{

  $order = wc_get_order($order_id);

  //$order_total = $order->get_formatted_order_total();
  $order_total = $order->get_total();

  // Logger with "append" mode
  file_put_contents(dirname(__FILE__) . '/my_logger.txt', $order_total, FILE_APPEND);
}
Run Code Online (Sandbox Code Playgroud)

第二个问题

“我刚来,想问一下,$order-get_total()免手续费取订单金额是否合适?”

您可能需要查看$order->get_subtotal()运费、优惠券和税前的总计:

请参阅这些相关答案: