Untitled
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