如何在商务订单页面中添加产品过滤器下拉菜单?

时间:2021-07-08 作者:Nikunj w3Nuts

How to add filter by product in woo commerce order page in admin side?filter by product

1 个回复
SO网友:Nikunj w3Nuts

Here is solution for above questions

// Custom function to get the product names, that appear in the existing orders
function get_product_names() {
 global $wpdb;

 return $wpdb->get_col("
    SELECT DISTINCT order_item_name 
    FROM {$wpdb->prefix}woocommerce_order_items
    WHERE order_item_type = \'line_item\'
");
} 

function action_restrict_manage_posts( $post_type, $which ) {   
   global $pagenow;

// Compare
if ( $post_type === \'shop_order\' && $pagenow === \'edit.php\' ) {
    $filter_id  = \'filter_product\';
    $current    = isset( $_GET[$filter_id] ) ? $_GET[$filter_id] : \'\';

    // Create a drop-down list 
    echo \'<select name="\' . $filter_id . \'">
    <option value="">\' . __( \'Filter by product\', \'woocommerce\' ) . \'</option>\';

    foreach ( get_product_names() as $product_name ) {          
        printf( \'<option value="%s"%s>%s</option>\', $product_name, $product_name === $current ? \'" selected="selected"\' : \'\', ucfirst( $product_name ) );
    }
    
    echo \'</select>\';
}
}
add_action( \'restrict_manage_posts\', \'action_restrict_manage_posts\', 10, 2 );

function action_pre_get_posts( $query ) {   
   global $pagenow, $post_type, $wpdb;

    $filter_id = \'filter_product\';

    // Compare
    if ( $query->is_admin && $pagenow === \'edit.php\' && $post_type === \'shop_order\' && isset( $_GET[$filter_id] ) && $_GET[$filter_id] != \'\' ) {

    // Get all orderIDs in which the product name occurs
     $order_ids = $wpdb->get_col( $wpdb->prepare( "
        SELECT DISTINCT order_id
        FROM {$wpdb->prefix}woocommerce_order_items
        WHERE order_item_type = \'line_item\'
        AND order_item_name = \'%s\'
        ",  esc_attr( $_GET[$filter_id] ) 
    ) );

    // Set the new "meta query"
    $query->set( \'post__in\', $order_ids );

    // Set "posts per page"
    $query->set( \'posts_per_page\', 20 );

    // Set "paged"
    $query->set( \'paged\', ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1 
) );
 }
}
add_action( \'pre_get_posts\', \'action_pre_get_posts\', 10, 1 );

相关推荐