Exemple #1
0
 /**
  * Shortcode AJAX Respond
  */
 function prdctfltr_respond()
 {
     global $prdctfltr_global;
     $shortcode_params = explode('|', $_POST['pf_shortcode']);
     $preset = $shortcode_params[0] !== 'false' ? $shortcode_params[0] : '';
     $columns = $shortcode_params[1] !== 'false' ? $shortcode_params[1] : 4;
     $rows = $shortcode_params[2] !== 'false' ? $shortcode_params[2] : 4;
     $pagination = $shortcode_params[3] !== 'false' ? $shortcode_params[3] : '';
     $no_products = $shortcode_params[4] !== 'false' ? $shortcode_params[4] : '';
     $show_products = $shortcode_params[5] !== 'false' ? $shortcode_params[5] : '';
     $use_filter = $shortcode_params[6] !== 'false' ? $shortcode_params[6] : '';
     $action = $shortcode_params[7] !== 'false' ? $shortcode_params[7] : '';
     $bot_margin = $shortcode_params[8] !== 'false' ? $shortcode_params[8] : '';
     $class = $shortcode_params[9] !== 'false' ? $shortcode_params[9] : '';
     $shortcode_id = $shortcode_params[10] !== 'false' ? $shortcode_params[10] : '';
     $disable_overrides = $shortcode_params[11] !== 'false' ? $shortcode_params[11] : '';
     $res_paged = isset($_POST['pf_paged']) ? $_POST['pf_paged'] : $_POST['pf_page'];
     $ajax_query = $_POST['pf_query'];
     $current_page = WC_Prdctfltr::prdctfltr_get_between($ajax_query, 'paged=', '&');
     $page = $res_paged;
     $args = str_replace('paged=' . $current_page . '&', 'paged=' . $page . '&', $ajax_query);
     $prdctfltr_global['ajax_query'] = $args;
     if ($no_products == 'yes') {
         $use_filter = 'no';
         $pagination = 'no';
         $orderby = 'rand';
     }
     $add_ajax = ' data-query="' . $args . '" data-page="' . $res_paged . '" data-shortcode="' . $_POST['pf_shortcode'] . '"';
     $bot_margin = (int) $bot_margin;
     $margin = " style='margin-bottom:" . $bot_margin . "px'";
     if (isset($_POST['pf_filters'])) {
         $curr_filters = $_POST['pf_filters'];
     } else {
         $curr_filters = array();
     }
     $filter_args = '';
     foreach ($curr_filters as $k => $v) {
         if (strpos($v, ',')) {
             $new_v = str_replace(',', '%2C', $v);
         } else {
             if (strpos($v, '+')) {
                 $new_v = str_replace('+', '%2B', $v);
             } else {
                 $new_v = $v;
             }
         }
         $filter_args .= '&' . $k . '=' . $new_v;
     }
     $args = $args . $filter_args;
     $prdctfltr_global['ajax_paged'] = $res_paged;
     $prdctfltr_global['active_filters'] = $curr_filters;
     if ($action !== '') {
         $prdctfltr_global['action'] = $action;
     }
     if ($preset !== '') {
         $prdctfltr_global['preset'] = $preset;
     }
     if ($disable_overrides !== '') {
         $prdctfltr_global['disable_overrides'] = $disable_overrides;
     }
     $out = '';
     global $woocommerce, $woocommerce_loop;
     $woocommerce_loop['columns'] = $columns;
     $prdctfltr_global['ajax'] = true;
     $prdctfltr_global['sc_ajax'] = $_POST['pf_mode'] == 'no' ? 'no' : null;
     $products = new WP_Query($args . '&prdctfltr=active');
     global $wp_the_query;
     $wp_the_query = $products;
     ob_start();
     if ($use_filter == 'yes') {
         include_once WC_Prdctfltr::$dir . 'woocommerce/loop/product-filter.php';
     }
     if ($products->have_posts()) {
         if ($show_products == 'yes') {
             woocommerce_product_loop_start();
             while ($products->have_posts()) {
                 $products->the_post();
                 wc_get_template_part('content', 'product');
             }
             woocommerce_product_loop_end();
         } else {
             $pagination = 'no';
         }
     } else {
         if ($_POST['pf_widget'] == 'yes') {
             $prdctfltr_global['widget_search'] = $_POST['pf_widget'];
             include_once WC_Prdctfltr::$dir . 'woocommerce/loop/product-filter.php';
         }
     }
     $prdctfltr_global['ajax'] = null;
     $shortcode = str_replace('type-product', 'product type-product', ob_get_clean());
     $out .= '<div' . ($shortcode_id != '' ? ' id="' . $shortcode_id . '"' : '') . ' class="prdctfltr_sc_products woocommerce prdctfltr_ajax' . ($class != '' ? ' ' . $class . '' : '') . '"' . $margin . $add_ajax . '>';
     $out .= do_shortcode($shortcode);
     if ($pagination == 'yes') {
         ob_start();
         add_filter('woocommerce_pagination_args', 'WC_Prdctfltr::prdctfltr_pagination_filter', 999, 1);
         wc_get_template('loop/pagination.php');
         remove_filter('woocommerce_pagination_args', 'WC_Prdctfltr::prdctfltr_pagination_filter');
         $pagination = ob_get_clean();
         $out .= $pagination;
     }
     if ($_POST['pf_widget'] == 'yes') {
         if (isset($_POST['pf_widget_title'])) {
             $curr_title = explode('%%%', $_POST['pf_widget_title']);
         }
         ob_start();
         the_widget('prdctfltr', 'preset=' . $_POST['pf_preset'] . '&template=' . $_POST['pf_template'], array('before_title' => stripslashes($curr_title[0]), 'after_title' => stripslashes($curr_title[1])));
         $out .= ob_get_clean();
     }
     $out .= '</div>';
     die($out);
     exit;
 }