通过WooCommerce管理订单列表中的特定元字段过滤订单 [英] Filter orders by specific meta fields in WooCommerce admin orders list

查看:79
本文介绍了通过WooCommerce管理订单列表中的特定元字段过滤订单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

谁能告诉我,如何在woo-commerce订单页面中按公司名称添加/设置过滤器.

Can anyone let me know, how can i add / set filter by company name in woo-commerce order page.

并且请共享功能或显示我的错误,以便我可以解决它.

and please share functions or show my error so i can solved it.

我尝试了一下,但是没有用.非常感谢您的帮助.

i tried it but not working. you help is much appreciated.

add_action( 'restrict_manage_posts', 'admin_shop_order_by_product_type_filter' );
function admin_shop_order_by_product_type_filter(){
    global $pagenow, $post_type;

    if( 'shop_order' === $post_type && 'edit.php' === $pagenow ) {
        $domain     = 'woocommerce';
        $filter_id  = 'filter_billing_company';
        $current    = isset($_GET[$filter_id])? $_GET[$filter_id] : '';
        $query_args = ['fields' => '_billing_company', 'orderby' => 'order'];

        echo "<pre>";print_r(get_terms($query_args)); echo "</pre>";

        echo '<select name="'.$filter_id.'">
        <option value="">' . __('Filter by Company', $domain) . '</option>';

        foreach ( get_terms($query_args) as $term_name ) {
            printf( '<option value="%s"%s>%s</option>', $term_name,
                $term_name === $current ? '" selected="selected"' : '', ucfirst($term_name) );
        }
        echo '</select>';
    }
}


谢谢

推荐答案

要按管理订单列表上的元字段过滤订单,您将使用以下(您将在metakey/标签下方的第一个函数中进行定义可以过滤订单的货币对):

To filter orders by meta fields on admin orders list, you will use the following (where you will define in the 1st function below the metakey / label pairs that will filter orders):

// Custom function where metakeys / labels pairs are defined
function get_filter_shop_order_meta( $domain = 'woocommerce' ){
    // Add below the metakey / label pairs to filter orders
    return [
        '_billing_company' => __('Billing company', $domain),
        '_order_total'     => __('Gran total', $domain), 
    ];
}

// Add a dropdown to filter orders by meta
add_action( 'restrict_manage_posts', 'display_admin_shop_order_by_meta_filter' );
function display_admin_shop_order_by_meta_filter(){
    global $pagenow, $typenow;

    if( 'shop_order' === $typenow && 'edit.php' === $pagenow ) {
        $domain    = 'woocommerce';
        $filter_id = 'filter_shop_order_by_meta';
        $current   = isset($_GET[$filter_id])? $_GET[$filter_id] : '';

        echo '<select name="'.$filter_id.'">
        <option value="">' . __('Filter by meta…', $domain) . '</option>';

        $options = get_filter_shop_order_meta( $domain );

        foreach ( $options as $key => $label ) {
            printf( '<option value="%s"%s>%s</option>', $key, 
                $key === $current ? '" selected="selected"' : '', $label );
        }
        echo '</select>';
    }
}

// Process the filter dropdown for orders by Marketing optin
add_filter( 'request', 'process_admin_shop_order_marketing_by_meta', 99 );
function process_admin_shop_order_marketing_by_meta( $vars ) {
    global $pagenow, $typenow;
    
    $filter_id = 'filter_shop_order_by_meta';

    if ( $pagenow == 'edit.php' && 'shop_order' === $typenow 
    && isset( $_GET[$filter_id] ) && ! empty($_GET[$filter_id]) ) {
        $vars['meta_key']   = $_GET[$filter_id];
        $vars['orderby']    = 'meta_value';
    }
    return $vars;
}

// (Optional) Make a custom meta field searchable from the admin order list search field
add_filter( 'woocommerce_shop_order_search_fields', 'shop_order_meta_search_fields', 10, 1 );
function shop_order_meta_search_fields( $meta_keys ){
    foreach ( get_filter_shop_order_meta() as $meta_key => $label ) {
        $meta_keys[] = $meta_key;
    }
    return $meta_keys;
}

代码进入您的活动子主题(或活动主题)的functions.php文件中.经过测试,可以正常工作.

Code goes in functions.php file of your active child theme (or active theme). Tested and works.

这篇关于通过WooCommerce管理订单列表中的特定元字段过滤订单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆