Woocommerce 3.3 +

时间:2018-10-03 19:02:33

标签: php wordpress woocommerce hook-woocommerce orders

在Woocommerce管理员订单列表中,单击图标“眼睛” enter image description here时,它将在灯箱中打开订单的预览。在该灯箱(预览)的底部,有一些操作按钮可用于更改订单状态。

我还想添加5个自定义订单状态作为操作按钮,但是我不知道我需要使用哪个挂钩。

有人知道如何在该区域添加更多按钮吗?

任何帮助或建议都值得赞赏。

1 个答案:

答案 0 :(得分:0)

完成此操作的正确钩子是woocommerce_admin_order_preview_actions过滤器钩子。

您需要在下面的函数中以多维数组定义您的自定义订单状态数据,如下所述,以获取每个按钮的操作按钮:

  • 状态段(不以“ wc-”开头)作为键
  • 状态标签名称
  • 允许的状态数组标记(以显示其当前状态操作按钮)

示例代码(此处为2个自定义假状态“自定义1”和“自定义2”)

add_filter( 'woocommerce_admin_order_preview_actions', 'additional_admin_order_preview_buttons_actions', 25, 2 );
function additional_admin_order_preview_buttons_actions( $actions, $order ){
    // Below set your custom order statuses (key / label / allowed statuses) that needs a button
    $custom_statuses = array(
        'custom_one' => array( // The key (slug without "wc-")
            'label'     => __("Custom One", "woocommerce"), // Label name
            'allowed'   => array( 'pending', 'on-hold', 'processing', 'custom_two' ), // Button displayed for this statuses (slugs without "wc-")
        ),
        'custom_two' => array( // The key (slug without "wc-")
            'label'     => __("Custom Two", "woocommerce"), // Label name
            'allowed'   => array( 'pending', 'on-hold', 'processing', 'custom_one' ), // Button displayed for this statuses (slugs without "wc-")
        ),
    );

    // Loop through your custom orders Statuses
    foreach ( $custom_statuses as $status_slug => $values ){
        if ( $order->has_status( $values['allowed'] ) ) {
            $actions['status']['actions'][$status_slug] = array(
                'url'    => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status='.$status_slug.'&order_id=' . $order->get_id() ), 'woocommerce-mark-order-status' ),
                'name'   => $values['label'],
                'title'  => __( 'Change order status to', 'woocommerce' ) . ' ' . strtolower($values['label']),
                'action' => $status_slug,
            );
        }
    }
    return $actions;
}

代码进入您的活动子主题(活动主题)的function.php文件中。经过测试,可以正常工作。

enter image description here