add_action('wp_ajax_custom_sort_and_stock_products', 'custom_sort_and_stock_products_callback'); add_action('wp_ajax_nopriv_custom_sort_and_stock_products', 'custom_sort_and_stock_products_callback'); function custom_sort_and_stock_products_callback() { $orderby = isset($_POST['orderby']) ? sanitize_text_field($_POST['orderby']) : 'popularity'; $stock_only = isset($_POST['stock_only']) ? (int)$_POST['stock_only'] : 0; $search_query = isset($_POST['search_query']) ? sanitize_text_field($_POST['search_query']) : ''; $paged = isset($_POST['paged']) ? absint($_POST['paged']) : 1; $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => 36, // تغییر از 24 به 36 'paged' => $paged, ); if (!empty($search_query)) { $args['s'] = $search_query; } if ($stock_only) { $args['meta_query'] = array( array( 'key' => '_stock_status', 'value' => 'instock', 'compare' => '=', ), ); } switch ($orderby) { case 'popularity': $args['meta_key'] = 'total_sales'; $args['orderby'] = 'meta_value_num'; $args['order'] = 'DESC'; break; case 'date': $args['orderby'] = 'date'; $args['order'] = 'DESC'; break; case 'price': $args['meta_key'] = '_price'; $args['orderby'] = 'meta_value_num'; $args['order' = 'ASC'; break; case 'price-desc': $args['meta_key'] = '_price'; $args['orderby'] = 'meta_value_num'; $args['order' = 'DESC'; break; } $query = new WP_Query($args); ob_start(); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); wc_get_template_part('content', 'product'); } wp_reset_postdata(); } else { echo '
محصولی یافت نشد.
'; } $products_html = ob_get_clean(); $total_products = $query->found_posts; wp_send_json_success(array( 'products' => $products_html, 'total_products' => $total_products )); wp_die(); }