Wordpress如何从wc_admin_report覆盖函数get_order_report_data

时间:2015-06-09 08:04:18

标签: php wordpress woocommerce status

我想更改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

我现在不知道怎么用插件或类似的东西来做这件事

2 个答案:

答案 0 :(得分:7)

这个问题似乎有些混乱,但这是我最好的解释。

如果要在查询中添加要捕获的自定义状态,请编写如下过滤器函数:

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-'附加到实际查询字符串的值中。因此,您需要您的状态才能拥有该前缀。或者......您可以使用更新的过滤器修改查询字符串:

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或自定义插件代码中。

答案 1 :(得分:1)

此处会应用过滤器,您可以根据需要更改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() in the Codex