Добавление пользовательских статусов заказов в виджет статистики панели администратора

Я хотел бы включить подробную информацию о статусе индивидуального заказа в виджет статистики панели администратора WooCommerce. Я установил 2 пользовательских статуса заказа, которые идут после wc-processing.

Поток заказов после успешной оплаты:
wc-processing = ›wc-awaiting-shipment =› wc-dispatched = ›wc-completed.

Поскольку awaiting shipment и dispatched являются настраиваемыми статусами заказов, виджет статистики WooCommerce не отражает эти заказы в общей сумме продаж. Проблема в том, что у меня много заказов со статусами wc-dispatched и wc-awaiting-shipment.

Это код, который я использовал для регистрации этого пользовательского статуса заказа:

/**
 * Register new status
 * Tutorial: http://www.sellwithwp.com/woocommerce-custom-order-status-2/
 * */
function register_awaiting_shipment_order_status() {
    register_post_status('wc-awaiting-shipment', array(
        'label' => 'Awaiting Shipment',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Awaiting shipment <span class="count">(%s)</span>', 'Awaiting shipment <span class="count">(%s)</span>')
    ));
}

add_action('init', 'register_awaiting_shipment_order_status');

// Add to list of WC Order statuses
function add_awaiting_shipment_to_order_statuses($order_statuses) {

    $new_order_statuses = array();

    // add new order status after processing
    foreach ($order_statuses as $key => $status) {
        $new_order_statuses[$key] = $status;
        if ('wc-processing' === $key) {
            $new_order_statuses['wc-awaiting-shipment'] = 'Awaiting shipment';
        }
    }
    return $new_order_statuses;
}

add_filter('wc_order_statuses', 'add_awaiting_shipment_to_order_statuses');

/**
 * Register new status
 * Tutorial: http://www.sellwithwp.com/woocommerce-custom-order-status-2/
 * */
function register_dispatched_order_status() {
    register_post_status('wc-dispatched', array(
        'label' => 'Dispatched',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Dispatched <span class="count">(%s)</span>', 'Dispatched <span class="count">(%s)</span>')
    ));
}

add_action('init', 'register_dispatched_order_status');

// Add to list of WC Order statuses
function add_dispatched_to_order_status($order_status) {

    $new_order_statuses = array();

    // add new order status after processing
    foreach ($order_status as $key => $status) {

        $new_order_statuses[$key] = $status;

        if ('wc-awaiting-shipment' === $key) {
            $new_order_statuses['wc-dispatched'] = 'Dispatched';
        }
    }

    return $new_order_statuses;
}

add_filter('wc_order_statuses', 'add_dispatched_to_order_status');

Виджеты панели состояния Woocommerce

Как я могу этого добиться?

Спасибо.


person Raunak Gupta    schedule 27.09.2016    source источник
comment
@LoicTheAztec: Сейчас я путешествую, поэтому не могу сейчас протестировать, смогу обновить через 8 часов. и извините за то, что не сообщил.   -  person Raunak Gupta    schedule 27.09.2016


Ответы (1)


Во-первых, я пересмотрел ваш код, поскольку вы использовали два раза одни и те же хуки. Так что знайте, что у вас есть 2 подключенных функции вместо 4.

Чтобы ответить на ваш вопрос: ДА, я только что протестировал рабочую ловушку администратора, которая будет включать заказы с вашими пользовательскими статусами в виджете статистики панели администратора WooCommerce: woocommerce_reports_get_order_report_data_args hook.

Вот этот код:

// Register new status
function register_custom_order_statuses() {
    register_post_status('wc-awaiting-shipment', array(
        'label' => 'Awaiting Shipment',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Awaiting shipment <span class="count">(%s)</span>', 'Awaiting shipment <span class="count">(%s)</span>')
    ));

    register_post_status('wc-dispatched', array(
        'label' => 'Dispatched',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Dispatched <span class="count">(%s)</span>', 'Dispatched <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_custom_order_statuses');


// Add to list of WC Order statuses
function add_custom_order_statuses($order_statuses) {
    $new_order_statuses = array();

    // add new order status after processing
    foreach ($order_statuses as $key => $status) {
        $new_order_statuses[$key] = $status;
        if ('wc-processing' === $key) {
            $new_order_statuses['wc-awaiting-shipment'] = 'Awaiting shipment';
            $new_order_statuses['wc-dispatched'] = 'Dispatched';
        }
    }
    return $new_order_statuses;
}
add_filter('wc_order_statuses', 'add_custom_order_statuses');


// Admin reports for custom order status
function wc_reports_get_order_custom_report_data_args( $args ) {
    $args['order_status'] = array( 'completed', 'processing', 'on-hold', 'awaiting-shipment', 'dispatched' );
    return $args;
};
add_filter( 'woocommerce_reports_get_order_report_data_args', 'wc_reports_get_order_custom_report_data_args');

Этот код находится в файле function.php вашей активной дочерней темы (или темы) или также в любом файле плагина.

Код протестирован и полностью работоспособен.


Использованная литература:

person LoicTheAztec    schedule 27.09.2016
comment
Привет, @LoicTheAztec. Я только что видел, как фильтр woocommerce_reports_get_order_report_data_args отлично вычисляет общую сумму заказа, но показывает 0 элементов на странице WooCommerce wc-reports. Я закомментирую последнюю строку (т.е. add_filter) Количество элементов отображается правильно. Как это исправить? Посмотрите этот снимок экрана. - person Raunak Gupta; 08.10.2016
comment
@RaunakGupta Я пытался найти какой-нибудь трюк, чтобы заставить его работать ... но пока не понял. - person LoicTheAztec; 08.10.2016
comment
Есть ли способ добавить новые поля для итоговых полей (3-я строка вниз - в настоящее время отображаются ожидающие обработки и приостановленные) для пользовательских статусов заказов? - person RayZor; 02.12.2016
comment
Привет, @LoicTheAztec: есть ли у вас какое-нибудь рабочее решение для этого (то, что я дал на снимке экрана)? Я попытался найти решение, выполнив поиск в основных файлах, но безуспешно. - person Raunak Gupta; 29.11.2017
comment
Привет, @RaunakGupta… Нет, я не искал. Решение для этого кажется чем-то долгим и сложным, если оно есть ... Как кто-то сказал, подумайте, что другое может просветить вас, может быть. - person LoicTheAztec; 29.11.2017