Untitled
unknown
plain_text
9 months ago
2.4 kB
10
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