簡體   English   中英

Wordpress如何從wc_admin_report覆蓋函數get_order_report_data

[英]Wordpress how to override function get_order_report_data from wc_admin_report

我想在class-wc-admin-report.php更改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

我現在不知道怎么用插件或類似的東西來做這件事

這個問題似乎有些混亂,但這是我最好的解釋。

如果要在查詢中添加要捕獲的自定義狀態,請編寫如下過濾器函數:

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

這里應用了過濾器,這樣您就可以根據需要更改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()更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM