Untitled

 avatar
unknown
plain_text
10 days ago
2.4 kB
4
Indexable
add_filter('woocommerce_get_catalog_ordering_args', 'custom_b2b_price_sorting', 9999);
function custom_b2b_price_sorting($args) {
    // Get current user ID
    $user_id = get_current_user_id();
    
    // Check if user is B2B
    $is_b2b_user = get_user_meta($user_id, 'b2bking_b2buser', true);
    
    if ($is_b2b_user === 'yes') {
        // Get the current sorting method
        $orderby_value = isset($_GET['orderby']) ? wc_clean($_GET['orderby']) : apply_filters('woocommerce_default_catalog_orderby', get_option('woocommerce_default_catalog_orderby'));
        
        // Only modify if sorting by price
        if ($orderby_value === 'price' || $orderby_value === 'price-desc') {
            // Get user's B2B group ID
            $currentusergroupidnr = apply_filters('b2bking_b2b_group_for_pricing', b2bking()->get_user_group($user_id), $user_id);
            
            // Modify the sorting query
            $args['meta_key'] = 'b2bking_regular_product_price_group_' . $currentusergroupidnr;
            $args['orderby'] = 'meta_value_num';
            $args['order'] = ($orderby_value === 'price') ? 'ASC' : 'DESC';
            
            // Ensure we only use numeric values
            add_filter('posts_clauses', 'custom_b2b_price_sorting_clauses', 10, 2);
        }
    }
    
    return $args;
}

function custom_b2b_price_sorting_clauses($clauses, $wp_query) {
    global $wpdb;
    
    $user_id = get_current_user_id();
    $is_b2b_user = get_user_meta($user_id, 'b2bking_b2buser', true);
    
    if ($is_b2b_user === 'yes' && $wp_query->get('orderby') === 'meta_value_num') {
        $currentusergroupidnr = apply_filters('b2bking_b2b_group_for_pricing', b2bking()->get_user_group($user_id), $user_id);
        $meta_key = 'b2bking_regular_product_price_group_' . $currentusergroupidnr;
        
        // Force numeric sorting and handle cases where meta might not exist
        $clauses['join'] .= " LEFT JOIN {$wpdb->postmeta} AS b2b_mt ON {$wpdb->posts}.ID = b2b_mt.post_id AND b2b_mt.meta_key = '" . esc_sql($meta_key) . "'";
        $clauses['orderby'] = "CAST(b2b_mt.meta_value AS DECIMAL(10,2)) " . $wp_query->get('order');
    }
    
    return $clauses;
}

// Remove the filter after it's applied to prevent affecting other queries
add_action('wp_footer', function() {
    remove_filter('posts_clauses', 'custom_b2b_price_sorting_clauses', 10);
});
Editor is loading...
Leave a Comment