Подтвердить что ты не робот

Wordpress, как переопределить функцию get_order_report_data из wc_admin_report

Я хочу изменить часть функции get_order_report_data() внутри class-wc-admin-report.php, не касаясь ядра.

Я хочу изменить фильтр состояния заказа, прямо сейчас:

$query['where']  = "
            WHERE   posts.post_type     = 'shop_order'
            AND     posts.post_status   = 'publish'
            AND     tax.taxonomy        = 'shop_order_status'
            AND     term.slug           IN ('" . implode( "','", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', 'on-hold' ) ) ) . "')
            ";

И я хочу изменить term.slug на custom_status.

Я не сейчас, как это сделать с помощью плагина или чего-то подобного

4b9b3361

Ответ 1

Этот вопрос кажется немного путаным, но вот моя лучшая интерпретация.

Если вы хотите добавить пользовательский статус для захвата в запросе, напишите функцию фильтра следующим образом:

function woocommerce_reports_order_statuses_filter( $order_status ){
    $order_status[] = 'custom_status';
    return $order_status;
}
add_filter( 'woocommerce_reports_order_statuses', 'woocommerce_reports_order_statuses_filter' );

Позже в функции все статусы в этом массиве получат 'wc-', добавленные к их значениям для фактической строки запроса. Таким образом, вам понадобится ваш статус, чтобы иметь этот префикс. Или... вы можете изменить querystring с помощью более позднего фильтра:

function woocommerce_reports_get_order_report_query_filter( $query ){
    $custom_status = 'custom_status';
    $query['where'] = substr_replace( $query['where'], $custom_status , strpos( $query['where'], 'wc-' . $custom_status), strlen('wc-' . $custom_status)  );
    return $query;
}
add_filter( 'woocommerce_reports_get_order_report_query', 'woocommerce_reports_get_order_report_query_filter' );

Весь этот код фильтра добавляется в вашу тему functions.php или пользовательский код плагина.

Ответ 2

Здесь применяются фильтры, которые позволят вам изменить term.slug, но вы бы хотели.

В пользовательском плагине (или functions.php вашей темы) добавьте фильтр:

function override_order_report_data_terms($slug_array) {
    return array('custom_status');
}
add_filter('woocommerce_reports_order_statuses', 'override_order_report_data_terms');

Подробнее о add_filter() в кодексе.