Дополнительные кнопки действий для администрирования списка заказов на предварительном просмотре в Woocommerce 3.3+ - PullRequest
0 голосов
/ 03 октября 2018

В списке заказов Woocommerce Admin при нажатии на значок «глаз» enter image description here открывается предварительный просмотр заказа в лайтбоксе.Внизу этого лайтбокса (предварительный просмотр) есть несколько кнопок действий, позволяющих изменить статус заказа.

У меня есть еще 5 пользовательских статусов заказа, которые я также хотел бы добавить в качестве кнопок действий, но я не наденуне знаю, какой крючок мне нужно использовать.

Кто-нибудь знает, как добавить дополнительные кнопки в эту область?

Любая помощь или совет приветствуются.

1 Ответ

0 голосов
/ 03 октября 2018

Правильный хук для этого - woocommerce_admin_order_preview_actions фильтр-хук.

В многомерном массиве вам нужно будет определить в приведенной ниже функции ваши данные о статусах пользовательских заказов, по очереди, чтобы получить кнопку действия для каждого:

  • Статусslug (без запуска с «wc-») в качестве ключа
  • Имя метки состояния
  • Разрешенные слагаемые массива состояний (для отображения кнопки действия текущего состояния)

Пример кода (здесь для двух пользовательских поддельных статусов «Custom One» и «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;
}

Код помещается в файл function.php вашего активного ребенкатема (активная тема).Проверено и работает.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...