/** * 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; }