Additional action buttons to admin order list on Preview Lightbox in Woocommerce 3.3+

a 夏天 提交于 2020-07-30 03:43:06

问题


In Woocommerce Admin orders list, when clicking the icon "eye" , it opens a preview of the order in a Lightbox. At the bottom of that Lightbox (preview), there are some actions buttons that allow to change the order status.

I have 5 more custom order statuses that I would like to add as action buttons too, but I don't know which hook I need to use.

Does anyone know how to add more buttons to that area?

Any help or advice is appreciated.


回答1:


The correct hook to get this done is woocommerce_admin_order_preview_actions filter hook.

You will need to define in the function below in a multidimensional array your custom order statuses data, one by one as follow, to get an action button for each:

  • The status slug (without starting with "wc-") as a key
  • The status label name
  • The allowed statuses array slugs (to display the current status action button for)

The example code (here for 2 custom fake statuses "Custom One" and "Custom two"):

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;
}

Code goes in function.php file of your active child theme (active theme). Tested and works.



来源:https://stackoverflow.com/questions/52634023/additional-action-buttons-to-admin-order-list-on-preview-lightbox-in-woocommerce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!