按 WooCommerce 管理订单列表中的特定元字段过滤订单

Gau*_*Tak 6 php wordpress backend orders woocommerce

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

请分享功能或显示我的错误,以便我可以解决它。

我尝试过但没有用。非常感谢您的帮助。

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>';
    }
}


Run Code Online (Sandbox Code Playgroud)

谢谢

Loi*_*tec 5

要按管理订单列表上的元字段过滤订单,您将使用以下内容(您将在将过滤订单的元键/标签对下方的第一个函数中定义)

\n
// Custom function where metakeys / labels pairs are defined\nfunction get_filter_shop_order_meta( $domain = \'woocommerce\' ){\n    // Add below the metakey / label pairs to filter orders\n    return [\n        \'_billing_company\' => __(\'Billing company\', $domain),\n        \'_order_total\'     => __(\'Gran total\', $domain), \n    ];\n}\n\n// Add a dropdown to filter orders by meta\nadd_action( \'restrict_manage_posts\', \'display_admin_shop_order_by_meta_filter\' );\nfunction display_admin_shop_order_by_meta_filter(){\n    global $pagenow, $typenow;\n\n    if( \'shop_order\' === $typenow && \'edit.php\' === $pagenow ) {\n        $domain    = \'woocommerce\';\n        $filter_id = \'filter_shop_order_by_meta\';\n        $current   = isset($_GET[$filter_id])? $_GET[$filter_id] : \'\';\n\n        echo \'<select name="\'.$filter_id.\'">\n        <option value="">\' . __(\'Filter by meta\xe2\x80\xa6\', $domain) . \'</option>\';\n\n        $options = get_filter_shop_order_meta( $domain );\n\n        foreach ( $options as $key => $label ) {\n            printf( \'<option value="%s"%s>%s</option>\', $key, \n                $key === $current ? \'" selected="selected"\' : \'\', $label );\n        }\n        echo \'</select>\';\n    }\n}\n\n// Process the filter dropdown for orders by Marketing optin\nadd_filter( \'request\', \'process_admin_shop_order_marketing_by_meta\', 99 );\nfunction process_admin_shop_order_marketing_by_meta( $vars ) {\n    global $pagenow, $typenow;\n    \n    $filter_id = \'filter_shop_order_by_meta\';\n\n    if ( $pagenow == \'edit.php\' && \'shop_order\' === $typenow \n    && isset( $_GET[$filter_id] ) && ! empty($_GET[$filter_id]) ) {\n        $vars[\'meta_key\']   = $_GET[$filter_id];\n        $vars[\'orderby\']    = \'meta_value\';\n    }\n    return $vars;\n}\n\n// (Optional) Make a custom meta field searchable from the admin order list search field\nadd_filter( \'woocommerce_shop_order_search_fields\', \'shop_order_meta_search_fields\', 10, 1 );\nfunction shop_order_meta_search_fields( $meta_keys ){\n    foreach ( get_filter_shop_order_meta() as $meta_key => $label ) {\n        $meta_keys[] = $meta_key;\n    }\n    return $meta_keys;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。

\n

在此输入图像描述

\n