Version Description
- Critical Update! Sanitize all settings. Can break some custom CSS/JavaScript.
- Fix - Show notification about security problem
Download this release
Release Info
Developer | RazyRx |
Plugin | Advanced AJAX Product Filters |
Version | 1.3.7 |
Comparing to | |
See all releases |
Code changes from version 1.3.6.1 to 1.3.7
- berocket/framework.php +4 -2
- berocket/framework_version.php +1 -1
- berocket/includes/functions.php +22 -16
- berocket/includes/settings_fields.php +1 -1
- images/attention.png +0 -0
- includes/functions.php +21 -0
- main.php +85 -61
- readme.txt +5 -1
- woocommerce-filters.php +2 -2
berocket/framework.php
CHANGED
@@ -34,7 +34,7 @@ if( ! class_exists( 'BeRocket_Framework' ) ) {
|
|
34 |
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
35 |
load_plugin_textdomain('BeRocket_domain', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/');
|
36 |
class BeRocket_Framework {
|
37 |
-
public static $framework_version = '2.5.
|
38 |
public static $settings_name = '';
|
39 |
public $addons;
|
40 |
public $libraries;
|
@@ -368,7 +368,8 @@ if( ! class_exists( 'BeRocket_Framework' ) ) {
|
|
368 |
*/
|
369 |
public function set_styles() {
|
370 |
$options = $this->get_option();
|
371 |
-
|
|
|
372 |
}
|
373 |
public function set_scripts() {
|
374 |
$options = $this->get_option();
|
@@ -953,6 +954,7 @@ if( ! class_exists( 'BeRocket_Framework' ) ) {
|
|
953 |
*/
|
954 |
public function sanitize_option( $input ) {
|
955 |
$new_input = $this->recursive_array_set( $this->cc->defaults, $input );
|
|
|
956 |
return apply_filters('brfr_sanitize_option_' . $this->cc->info[ 'plugin_name' ], $new_input, $input, $this->cc->defaults);
|
957 |
}
|
958 |
|
34 |
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
35 |
load_plugin_textdomain('BeRocket_domain', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/');
|
36 |
class BeRocket_Framework {
|
37 |
+
public static $framework_version = '2.5.5';
|
38 |
public static $settings_name = '';
|
39 |
public $addons;
|
40 |
public $libraries;
|
368 |
*/
|
369 |
public function set_styles() {
|
370 |
$options = $this->get_option();
|
371 |
+
$custom_css = berocket_sanitize_array($options[ 'custom_css' ]);
|
372 |
+
echo '<style>' . $custom_css . '</style>';
|
373 |
}
|
374 |
public function set_scripts() {
|
375 |
$options = $this->get_option();
|
954 |
*/
|
955 |
public function sanitize_option( $input ) {
|
956 |
$new_input = $this->recursive_array_set( $this->cc->defaults, $input );
|
957 |
+
$new_input = berocket_sanitize_array($new_input);
|
958 |
return apply_filters('brfr_sanitize_option_' . $this->cc->info[ 'plugin_name' ], $new_input, $input, $this->cc->defaults);
|
959 |
}
|
960 |
|
berocket/framework_version.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
<?php
|
2 |
-
$framework_version_current = '2.5.
|
3 |
if( version_compare($framework_version_current, $framework_version, '>') ) {
|
4 |
$framework_version = $framework_version_current;
|
5 |
$framework_dir = __DIR__;
|
1 |
<?php
|
2 |
+
$framework_version_current = '2.5.5';
|
3 |
if( version_compare($framework_version_current, $framework_version, '>') ) {
|
4 |
$framework_version = $framework_version_current;
|
5 |
$framework_dir = __DIR__;
|
berocket/includes/functions.php
CHANGED
@@ -132,10 +132,10 @@ if( ! function_exists( 'br_color_picker' ) ) {
|
|
132 |
*/
|
133 |
function br_color_picker($name, $value, $default, $additional = array()) {
|
134 |
$default_button = ( isset($additional['default_button']) ? $additional['default_button'] : true );
|
135 |
-
$class = ( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
136 |
-
$extra = ( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
137 |
-
$default = ( isset($default) && strlen($default) > 1 ? ( $default == -1 ? '' : ( $default[0] == '#' ? $default : '#' . $default ) ) : '#000000' );
|
138 |
-
$value = ( empty($value) ? $default : ( $value[0] == '#' ? $value : '#' . $value ) );
|
139 |
$return = '';
|
140 |
$return .= '<div class="berocket_color"><div class="br_colorpicker" data-default="' . $default . '" data-color="' . $value . '" style="background-color:' . $value . ';"></div>
|
141 |
<input class="br_colorpicker_value' . $class . '" type="hidden" value="' . $value . '" name="' . $name . '"' . $extra . '/>';
|
@@ -162,8 +162,9 @@ if ( ! function_exists( 'br_upload_image' ) ) {
|
|
162 |
*/
|
163 |
function br_upload_image( $name, $value, $additional = array() ) {
|
164 |
$remove_button = ( isset($additional['remove_button']) ? $additional['remove_button'] : true );
|
165 |
-
$class = ( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
166 |
-
$extra = ( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
|
|
167 |
$result = '<div>';
|
168 |
$result .= '<input type="hidden" name="' . $name . '" value="' . $value . '" readonly class="berocket_image_value ' . $class . '"' . $extra . '/>
|
169 |
<span class="berocket_selected_image">' . ( empty($value) ? '' : '<image src="' . $value . '">' ) . '</span>
|
@@ -211,8 +212,9 @@ if ( ! function_exists( 'br_fontawesome_image' ) ) {
|
|
211 |
*/
|
212 |
function br_fontawesome_image( $name, $value, $additional = array() ) {
|
213 |
$remove_button = ( isset($additional['remove_button']) ? $additional['remove_button'] : true );
|
214 |
-
$class = ( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
215 |
-
$extra = ( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
|
|
216 |
$result = '<div class="berocket_select_fontawesome berocket_select_image">';
|
217 |
$result .= berocket_fa_dark();
|
218 |
$result .= '<input type="hidden" name="' . $name . '" value="' . $value . '" readonly class="berocket_image_value berocket_fa_value ' . $class . '"' . $extra . '/>
|
@@ -243,8 +245,9 @@ if ( ! function_exists( 'br_select_fontawesome' ) ) {
|
|
243 |
*/
|
244 |
function br_select_fontawesome( $name, $value, $additional = array() ) {
|
245 |
$remove_button = ( isset($additional['remove_button']) ? $additional['remove_button'] : true );
|
246 |
-
$class = ( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
247 |
-
$extra = ( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
|
|
248 |
$result = '<div class="berocket_select_fontawesome">';
|
249 |
$result .= berocket_fa_dark();
|
250 |
$result .= '<input type="hidden" name="' . $name . '" value="' . $value . '" readonly class="berocket_fa_value ' . $class . '"' . $extra . '/>
|
@@ -262,9 +265,9 @@ if ( ! function_exists( 'br_select_fontawesome' ) ) {
|
|
262 |
if( ! function_exists( 'br_products_selector' ) ) {
|
263 |
function br_products_selector($name, $value, $additional = array()) {
|
264 |
$multiple = ( isset($additional['multiple']) ? $additional['multiple'] : true );
|
265 |
-
$class = ( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
266 |
-
$extra = ( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
267 |
-
$action = ( isset($additional['action']) ? $additional['action'] : 'woocommerce_json_search_products_and_variations' );
|
268 |
if ( $class ) {
|
269 |
$class = " class='" . $class . "'";
|
270 |
}
|
@@ -381,6 +384,7 @@ if ( ! function_exists( 'berocket_font_select_upload' ) ) {
|
|
381 |
* @return string html code with all needed blocks and buttons
|
382 |
*/
|
383 |
function berocket_font_select_upload( $text, $id, $name, $value, $show_fa = true, $show_upload = true, $show_remove = true, $data_sc = '' ) {
|
|
|
384 |
if ( $show_fa ) {
|
385 |
$font_awesome_list = fa_icons_list();
|
386 |
$font_awesome = "";
|
@@ -466,12 +470,14 @@ if( ! function_exists( 'berocket_sanitize_array' ) ){
|
|
466 |
|
467 |
do
|
468 |
{
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
}
|
473 |
while ($old_data !== $filtered);
|
474 |
|
|
|
|
|
475 |
$found = false;
|
476 |
while ( preg_match('/%[a-f0-9]{2}/i', $filtered, $match) ) {
|
477 |
$filtered = str_replace($match[0], '', $filtered);
|
132 |
*/
|
133 |
function br_color_picker($name, $value, $default, $additional = array()) {
|
134 |
$default_button = ( isset($additional['default_button']) ? $additional['default_button'] : true );
|
135 |
+
$class = htmlentities( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
136 |
+
$extra = htmlentities( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
137 |
+
$default = htmlentities( isset($default) && strlen($default) > 1 ? ( $default == -1 ? '' : ( $default[0] == '#' ? $default : '#' . $default ) ) : '#000000' );
|
138 |
+
$value = htmlentities( empty($value) ? $default : ( $value[0] == '#' ? $value : '#' . $value ) );
|
139 |
$return = '';
|
140 |
$return .= '<div class="berocket_color"><div class="br_colorpicker" data-default="' . $default . '" data-color="' . $value . '" style="background-color:' . $value . ';"></div>
|
141 |
<input class="br_colorpicker_value' . $class . '" type="hidden" value="' . $value . '" name="' . $name . '"' . $extra . '/>';
|
162 |
*/
|
163 |
function br_upload_image( $name, $value, $additional = array() ) {
|
164 |
$remove_button = ( isset($additional['remove_button']) ? $additional['remove_button'] : true );
|
165 |
+
$class = htmlentities( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
166 |
+
$extra = htmlentities( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
167 |
+
$value = htmlentities($value);
|
168 |
$result = '<div>';
|
169 |
$result .= '<input type="hidden" name="' . $name . '" value="' . $value . '" readonly class="berocket_image_value ' . $class . '"' . $extra . '/>
|
170 |
<span class="berocket_selected_image">' . ( empty($value) ? '' : '<image src="' . $value . '">' ) . '</span>
|
212 |
*/
|
213 |
function br_fontawesome_image( $name, $value, $additional = array() ) {
|
214 |
$remove_button = ( isset($additional['remove_button']) ? $additional['remove_button'] : true );
|
215 |
+
$class = htmlentities( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
216 |
+
$extra = htmlentities( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
217 |
+
$value = htmlentities($value);
|
218 |
$result = '<div class="berocket_select_fontawesome berocket_select_image">';
|
219 |
$result .= berocket_fa_dark();
|
220 |
$result .= '<input type="hidden" name="' . $name . '" value="' . $value . '" readonly class="berocket_image_value berocket_fa_value ' . $class . '"' . $extra . '/>
|
245 |
*/
|
246 |
function br_select_fontawesome( $name, $value, $additional = array() ) {
|
247 |
$remove_button = ( isset($additional['remove_button']) ? $additional['remove_button'] : true );
|
248 |
+
$class = htmlentities( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
249 |
+
$extra = htmlentities( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
250 |
+
$value = htmlentities($value);
|
251 |
$result = '<div class="berocket_select_fontawesome">';
|
252 |
$result .= berocket_fa_dark();
|
253 |
$result .= '<input type="hidden" name="' . $name . '" value="' . $value . '" readonly class="berocket_fa_value ' . $class . '"' . $extra . '/>
|
265 |
if( ! function_exists( 'br_products_selector' ) ) {
|
266 |
function br_products_selector($name, $value, $additional = array()) {
|
267 |
$multiple = ( isset($additional['multiple']) ? $additional['multiple'] : true );
|
268 |
+
$class = htmlentities( ( isset($additional['class']) && trim( $additional['class'] ) ) ? ' ' . trim( $additional['class'] ) : '' );
|
269 |
+
$extra = htmlentities( ( isset($additional['extra']) && trim( $additional['extra'] ) ) ? ' ' . trim( $additional['extra'] ) : '' );
|
270 |
+
$action = htmlentities( isset($additional['action']) ? $additional['action'] : 'woocommerce_json_search_products_and_variations' );
|
271 |
if ( $class ) {
|
272 |
$class = " class='" . $class . "'";
|
273 |
}
|
384 |
* @return string html code with all needed blocks and buttons
|
385 |
*/
|
386 |
function berocket_font_select_upload( $text, $id, $name, $value, $show_fa = true, $show_upload = true, $show_remove = true, $data_sc = '' ) {
|
387 |
+
$value = htmlentities($value);
|
388 |
if ( $show_fa ) {
|
389 |
$font_awesome_list = fa_icons_list();
|
390 |
$font_awesome = "";
|
470 |
|
471 |
do
|
472 |
{
|
473 |
+
// Remove really unwanted tags
|
474 |
+
$old_data = $filtered;
|
475 |
+
$filtered = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $filtered);
|
476 |
}
|
477 |
while ($old_data !== $filtered);
|
478 |
|
479 |
+
$filtered = str_replace('fromCharCode', 'fr0mCharC0de', $filtered);
|
480 |
+
|
481 |
$found = false;
|
482 |
while ( preg_match('/%[a-f0-9]{2}/i', $filtered, $match) ) {
|
483 |
$filtered = str_replace($match[0], '', $filtered);
|
berocket/includes/settings_fields.php
CHANGED
@@ -67,7 +67,7 @@ class BeRocket_framework_settings_fields {
|
|
67 |
}
|
68 |
function textarea($html, $field_item, $field_name, $value, $class, $extra) {
|
69 |
$html .= $field_item['label_be_for'] . '<textarea name="' . $field_name
|
70 |
-
. '"' . $class . $extra . '>'. $value . '</textarea>' . $field_item['label_for'];
|
71 |
return $html;
|
72 |
}
|
73 |
function color($html, $field_item, $field_name, $value, $class, $extra) {
|
67 |
}
|
68 |
function textarea($html, $field_item, $field_name, $value, $class, $extra) {
|
69 |
$html .= $field_item['label_be_for'] . '<textarea name="' . $field_name
|
70 |
+
. '"' . $class . $extra . '>'. htmlentities($value) . '</textarea>' . $field_item['label_for'];
|
71 |
return $html;
|
72 |
}
|
73 |
function color($html, $field_item, $field_name, $value, $class, $extra) {
|
images/attention.png
ADDED
Binary file
|
includes/functions.php
CHANGED
@@ -1,4 +1,25 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
if( ! function_exists( 'br_get_current_language_code' ) ){
|
3 |
/**
|
4 |
* Permalink block in settings
|
1 |
<?php
|
2 |
+
if( ! function_exists( 'br_set_value_to_array' ) ){
|
3 |
+
function br_set_value_to_array(&$arr, $index, $value = '') {
|
4 |
+
if( ! isset($arr) || ! is_array($arr) ) {
|
5 |
+
$arr = array();
|
6 |
+
}
|
7 |
+
if( ! is_array($index) ) {
|
8 |
+
$index = array($index);
|
9 |
+
}
|
10 |
+
$array = &$arr;
|
11 |
+
foreach($index as $i) {
|
12 |
+
if( ! isset($array[$i]) ) {
|
13 |
+
$array[$i] = array();
|
14 |
+
}
|
15 |
+
$array2 = &$array[$i];
|
16 |
+
unset($array);
|
17 |
+
$array = &$array2;
|
18 |
+
}
|
19 |
+
$array = $value;
|
20 |
+
return $arr;
|
21 |
+
}
|
22 |
+
}
|
23 |
if( ! function_exists( 'br_get_current_language_code' ) ){
|
24 |
/**
|
25 |
* Permalink block in settings
|
main.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
-
define( "BeRocket_AJAX_domain", 'BeRocket_AJAX_domain');
|
3 |
-
define( "BeRocket_AJAX_cache_expire", '21600' );
|
4 |
define( "AAPF_TEMPLATE_PATH", plugin_dir_path( __FILE__ ) . "templates/" );
|
5 |
load_plugin_textdomain('BeRocket_AJAX_domain', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/');
|
6 |
require_once(plugin_dir_path( __FILE__ ).'berocket/framework.php');
|
@@ -122,9 +122,9 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
122 |
'styles_input' => array(
|
123 |
'checkbox' => array( 'bcolor' => '', 'bwidth' => '', 'bradius' => '', 'fcolor' => '', 'backcolor' => '', 'icon' => '', 'fontsize' => '', 'theme' => '' ),
|
124 |
'radio' => array( 'bcolor' => '', 'bwidth' => '', 'bradius' => '', 'fcolor' => '', 'backcolor' => '', 'icon' => '', 'fontsize' => '', 'theme' => '' ),
|
125 |
-
'slider' => array( 'line_color' => '', 'line_height' => '', 'line_border_color' => '', 'line_border_width' => '', 'button_size' => '',
|
126 |
'button_color' => '', 'button_border_color' => '', 'button_border_width' => '', 'button_border_radius' => '' ),
|
127 |
-
'pc_ub' => array( 'back_color' => '', 'border_color' => '', 'font_size' => '', 'font_color' => '', 'show_font_size' => '', 'close_size' => '',
|
128 |
'show_font_color' => '', 'show_font_color_hover' => '', 'close_font_color' => '', 'close_font_color_hover' => '' ),
|
129 |
'product_count' => 'round',
|
130 |
'product_count_position' => '',
|
@@ -286,8 +286,8 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
286 |
}
|
287 |
}
|
288 |
function init_validation() {
|
289 |
-
return parent::init_validation() && ( ( is_plugin_active( 'woocommerce/woocommerce.php' ) || is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) &&
|
290 |
-
|
291 |
}
|
292 |
function check_framework_version() {
|
293 |
return ( ! empty(BeRocket_Framework::$framework_version) && version_compare(BeRocket_Framework::$framework_version, 2.1, '>=') );
|
@@ -398,10 +398,10 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
398 |
),
|
399 |
array(
|
400 |
'General' => array(
|
401 |
-
'setup_wizard' => array(
|
402 |
"section" => "setup_wizard",
|
403 |
"value" => "",
|
404 |
-
)
|
405 |
'no_products_message' => array(
|
406 |
"label" => __( '"No Products" message', "BeRocket_AJAX_domain" ),
|
407 |
"type" => "text",
|
@@ -463,7 +463,7 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
463 |
"items" => array(
|
464 |
'scroll_shop_top' => array(
|
465 |
"label" => __( 'Selected filters position', "BeRocket_AJAX_domain" ),
|
466 |
-
"name" => "scroll_shop_top",
|
467 |
"type" => "selectbox",
|
468 |
"class" => "br_scroll_shop_top",
|
469 |
"options" => array(
|
@@ -514,7 +514,7 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
514 |
'Elements' => array(
|
515 |
'elements_position_hook' => array(
|
516 |
"label" => __( 'Selected filters position', "BeRocket_AJAX_domain" ),
|
517 |
-
"name" => "elements_position_hook",
|
518 |
"type" => "selectbox",
|
519 |
"options" => array(
|
520 |
array('value' => 'woocommerce_archive_description', 'text' => __('WooCommerce Description(in header)', 'BeRocket_AJAX_domain')),
|
@@ -670,7 +670,7 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
670 |
'seo_meta_title_visual' => array(
|
671 |
"label" => __( 'Selected filters position', "BeRocket_AJAX_domain" ),
|
672 |
"tr_class" => "berocket_seo_meta_title_elements",
|
673 |
-
"name" => "seo_meta_title_visual",
|
674 |
"type" => "selectbox",
|
675 |
"options" => apply_filters('berocket_aapf_seo_meta_filters_hooks_list', array(
|
676 |
array('value' => 'BeRocket_AAPF_wcseo_title_visual1', 'text' => __('{title} with [attribute] [values] and [attribute] [values]', 'BeRocket_AJAX_domain')),
|
@@ -851,7 +851,7 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
851 |
"value" => '',
|
852 |
"label_be_for" => __('Use', 'BeRocket_AJAX_domain'),
|
853 |
"label_for" => __('load method', 'BeRocket_AJAX_domain') . '<br>'
|
854 |
-
|
855 |
),
|
856 |
),
|
857 |
),
|
@@ -966,16 +966,16 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
966 |
$html = '<tr>
|
967 |
<th scope="row">' . __('Purge Cache', 'BeRocket_AJAX_domain') . '</th>
|
968 |
<td>';
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
<span class="button berocket_purge_cache" data-time="'.time().'">
|
980 |
<input class="berocket_purge_cache_input" type="hidden" name="br_filters_options[purge_cache_time]" value="'.br_get_value_from_array($options, 'purge_cache_time').'">
|
981 |
' . __('Purge Cache', 'BeRocket_AJAX_domain') . '
|
@@ -1000,27 +1000,27 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
1000 |
$html = '<tr>
|
1001 |
<th scope="row">' . __('Replace old widgets', 'BeRocket_AJAX_domain') . '</th>
|
1002 |
<td>';
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
class="button berocket_replace_deprecated_with_new' . ( !count($old_filter_widgets) ? ' berocket_ajax_sending' : '' ) . '"
|
1014 |
data-ready="' . __('Widget replaced', 'BeRocket_AJAX_domain') . '"
|
1015 |
data-loading="' . __('Replacing widgets... Please wait', 'BeRocket_AJAX_domain') . '"';
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
<p>' . __('Replace deprecated widgets with new single filter widgets', 'BeRocket_AJAX_domain') . '</p>
|
1025 |
<script>
|
1026 |
jQuery(".berocket_replace_deprecated_with_new").click(function() {
|
@@ -1048,7 +1048,7 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
1048 |
</tr>
|
1049 |
<tr>
|
1050 |
<td style="width:600px;">
|
1051 |
-
<textarea style="width: 100%; min-height: 400px; height:900px" name="br_filters_options[user_custom_css]">' . br_get_value_from_array($options, 'user_custom_css') . '</textarea>
|
1052 |
</td>
|
1053 |
<td><div class="berocket_css_examples"style="max-width:300px;">
|
1054 |
<h4>Add border to widget</h4>
|
@@ -1457,11 +1457,11 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1457 |
'no_products' => ("<p class='no-products woocommerce-info" . ( ! empty( $br_options['no_products_class'] ) ? ' '.$br_options['no_products_class'] : '' ) . "'>" . $br_options['no_products_message'] . "</p>"),
|
1458 |
'recount_products' => ( empty($br_options['recount_products']) ? '' : $br_options['recount_products'] ),
|
1459 |
'pos_relative' => ( empty($br_options['pos_relative']) ? '' : $br_options['pos_relative'] ),
|
1460 |
-
'woocommerce_removes' => json_encode( array(
|
1461 |
-
|
1462 |
-
|
1463 |
-
|
1464 |
-
|
1465 |
'description_show' => ( ! empty($br_options['description']['show']) ? $br_options['description']['show'] : 'click' ),
|
1466 |
'description_hide' => ( ! empty($br_options['description']['hide']) ? $br_options['description']['hide'] : 'click' ),
|
1467 |
'hide_sel_value' => ( empty($br_options['hide_value']['sel']) ? '' : $br_options['hide_value']['sel'] ),
|
@@ -1478,11 +1478,11 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1478 |
<div class="berocket_aapf_widget_loading_bottom">' . ( ! empty( $br_options['ajax_load_text']['bottom'] ) ? $br_options['ajax_load_text']['bottom'] : '' ) . '</div>
|
1479 |
</div></div>',
|
1480 |
'translate' => array(
|
1481 |
-
|
1482 |
-
|
1483 |
-
|
1484 |
-
|
1485 |
-
|
1486 |
),
|
1487 |
'trailing_slash' => $permalink_structure,
|
1488 |
'pagination_base' => $wp_rewrite->pagination_base,
|
@@ -1576,7 +1576,7 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1576 |
if( ! isset( self::$error_log['2_shortcodes'] ) )
|
1577 |
{
|
1578 |
self::$error_log['2_shortcodes'] = array();
|
1579 |
-
}
|
1580 |
self::$error_log['2_shortcodes'][] = $atts;
|
1581 |
}
|
1582 |
$default = BeRocket_AAPF_Widget::$defaults;
|
@@ -1774,8 +1774,8 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1774 |
br_aapf_args_converter( $query );
|
1775 |
}
|
1776 |
if ( ( ( ! is_admin() && $is_wc_main_query ) || $is_shortcode ) ) {
|
1777 |
-
if( ( apply_filters( 'berocket_aapf_is_filtered_page_check', ! empty($_GET['filters']), 'apply_user_filters', $query ) )
|
1778 |
-
|
1779 |
$args = $this->get_filter_args($query);
|
1780 |
$args_fields = array( 'meta_key', 'tax_query', 'fields', 'where', 'join', 'meta_query', 'date_query' );
|
1781 |
foreach ( $args_fields as $args_field ) {
|
@@ -1793,7 +1793,7 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1793 |
|
1794 |
//THIS CAN BE NEW FIX FOR SORTING, BUT NOT SURE
|
1795 |
if( class_exists('WC_Query') && method_exists('WC_Query', 'product_query') ) {
|
1796 |
-
|
1797 |
if( empty($_GET['orderby']) && wc_clean( get_query_var( 'orderby' ) ) && strtolower(wc_clean( get_query_var( 'order' ) )) == 'desc' ) {
|
1798 |
$orderby = strtolower(wc_clean( get_query_var( 'orderby' ) ));
|
1799 |
$orderby = explode(' ', $orderby);
|
@@ -2029,7 +2029,7 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
2029 |
switch_to_blog( $old_blog );
|
2030 |
return;
|
2031 |
}
|
2032 |
-
}
|
2033 |
$this->_br_add_defaults();
|
2034 |
}
|
2035 |
public function _br_add_defaults() {
|
@@ -2107,7 +2107,7 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
2107 |
'#widget-title#' => '.berocket_aapf_widget-title'
|
2108 |
);
|
2109 |
$result_css = "";
|
2110 |
-
if ( ! empty( $options['user_custom_css'] ) ) {
|
2111 |
if ( ! (
|
2112 |
preg_match( "/script/i", $options[ 'user_custom_css' ] ) or
|
2113 |
preg_match( "/style/i", $options[ 'user_custom_css' ] ) or
|
@@ -2117,7 +2117,8 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
2117 |
) ) {
|
2118 |
$result_css = $options[ 'user_custom_css' ];
|
2119 |
}
|
2120 |
-
}
|
|
|
2121 |
foreach ( $replace_css as $key => $value ) {
|
2122 |
$result_css = str_replace( $key, $value, $result_css );
|
2123 |
}
|
@@ -2534,9 +2535,9 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
2534 |
$min = isset( $_POST['price'][0] ) ? floatval( $_POST['price'][0] ) : 0;
|
2535 |
$max = isset( $_POST['price'][1] ) ? floatval( $_POST['price'][1] ) : 9999999999;
|
2536 |
if( ! empty($woocommerce_wpml) && is_object($woocommerce_wpml)
|
2537 |
-
|
2538 |
-
|
2539 |
-
|
2540 |
$min = $woocommerce_wpml->multi_currency->prices->unconvert_price_amount($min);
|
2541 |
$max = $woocommerce_wpml->multi_currency->prices->unconvert_price_amount($max);
|
2542 |
}
|
@@ -2599,6 +2600,29 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
2599 |
if( $previous === '0' ) {
|
2600 |
update_option('berocket_filter_open_wizard_on_settings', true);
|
2601 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2602 |
}
|
2603 |
public function save_settings_callback( $settings ) {
|
2604 |
$options = $this->get_option();
|
1 |
<?php
|
2 |
+
define( "BeRocket_AJAX_domain", 'BeRocket_AJAX_domain');
|
3 |
+
define( "BeRocket_AJAX_cache_expire", '21600' );
|
4 |
define( "AAPF_TEMPLATE_PATH", plugin_dir_path( __FILE__ ) . "templates/" );
|
5 |
load_plugin_textdomain('BeRocket_AJAX_domain', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/');
|
6 |
require_once(plugin_dir_path( __FILE__ ).'berocket/framework.php');
|
122 |
'styles_input' => array(
|
123 |
'checkbox' => array( 'bcolor' => '', 'bwidth' => '', 'bradius' => '', 'fcolor' => '', 'backcolor' => '', 'icon' => '', 'fontsize' => '', 'theme' => '' ),
|
124 |
'radio' => array( 'bcolor' => '', 'bwidth' => '', 'bradius' => '', 'fcolor' => '', 'backcolor' => '', 'icon' => '', 'fontsize' => '', 'theme' => '' ),
|
125 |
+
'slider' => array( 'line_color' => '', 'line_height' => '', 'line_border_color' => '', 'line_border_width' => '', 'button_size' => '',
|
126 |
'button_color' => '', 'button_border_color' => '', 'button_border_width' => '', 'button_border_radius' => '' ),
|
127 |
+
'pc_ub' => array( 'back_color' => '', 'border_color' => '', 'font_size' => '', 'font_color' => '', 'show_font_size' => '', 'close_size' => '',
|
128 |
'show_font_color' => '', 'show_font_color_hover' => '', 'close_font_color' => '', 'close_font_color_hover' => '' ),
|
129 |
'product_count' => 'round',
|
130 |
'product_count_position' => '',
|
286 |
}
|
287 |
}
|
288 |
function init_validation() {
|
289 |
+
return parent::init_validation() && ( ( is_plugin_active( 'woocommerce/woocommerce.php' ) || is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) &&
|
290 |
+
br_get_woocommerce_version() >= 2.1 );
|
291 |
}
|
292 |
function check_framework_version() {
|
293 |
return ( ! empty(BeRocket_Framework::$framework_version) && version_compare(BeRocket_Framework::$framework_version, 2.1, '>=') );
|
398 |
),
|
399 |
array(
|
400 |
'General' => array(
|
401 |
+
/*'setup_wizard' => array(
|
402 |
"section" => "setup_wizard",
|
403 |
"value" => "",
|
404 |
+
),*/
|
405 |
'no_products_message' => array(
|
406 |
"label" => __( '"No Products" message', "BeRocket_AJAX_domain" ),
|
407 |
"type" => "text",
|
463 |
"items" => array(
|
464 |
'scroll_shop_top' => array(
|
465 |
"label" => __( 'Selected filters position', "BeRocket_AJAX_domain" ),
|
466 |
+
"name" => "scroll_shop_top",
|
467 |
"type" => "selectbox",
|
468 |
"class" => "br_scroll_shop_top",
|
469 |
"options" => array(
|
514 |
'Elements' => array(
|
515 |
'elements_position_hook' => array(
|
516 |
"label" => __( 'Selected filters position', "BeRocket_AJAX_domain" ),
|
517 |
+
"name" => "elements_position_hook",
|
518 |
"type" => "selectbox",
|
519 |
"options" => array(
|
520 |
array('value' => 'woocommerce_archive_description', 'text' => __('WooCommerce Description(in header)', 'BeRocket_AJAX_domain')),
|
670 |
'seo_meta_title_visual' => array(
|
671 |
"label" => __( 'Selected filters position', "BeRocket_AJAX_domain" ),
|
672 |
"tr_class" => "berocket_seo_meta_title_elements",
|
673 |
+
"name" => "seo_meta_title_visual",
|
674 |
"type" => "selectbox",
|
675 |
"options" => apply_filters('berocket_aapf_seo_meta_filters_hooks_list', array(
|
676 |
array('value' => 'BeRocket_AAPF_wcseo_title_visual1', 'text' => __('{title} with [attribute] [values] and [attribute] [values]', 'BeRocket_AJAX_domain')),
|
851 |
"value" => '',
|
852 |
"label_be_for" => __('Use', 'BeRocket_AJAX_domain'),
|
853 |
"label_for" => __('load method', 'BeRocket_AJAX_domain') . '<br>'
|
854 |
+
. '<p class="notice notice-error">' . __('Some features do not work with alternative load method', 'BeRocket_AJAX_domain') . '</p>',
|
855 |
),
|
856 |
),
|
857 |
),
|
966 |
$html = '<tr>
|
967 |
<th scope="row">' . __('Purge Cache', 'BeRocket_AJAX_domain') . '</th>
|
968 |
<td>';
|
969 |
+
$old_filter_widgets = get_option('widget_berocket_aapf_widget');
|
970 |
+
if( ! is_array($old_filter_widgets) ) {
|
971 |
+
$old_filter_widgets = array();
|
972 |
+
}
|
973 |
+
foreach ($old_filter_widgets as $key => $value) {
|
974 |
+
if (!is_numeric($key)) {
|
975 |
+
unset($old_filter_widgets[$key]);
|
976 |
+
}
|
977 |
+
}
|
978 |
+
$html .= '
|
979 |
<span class="button berocket_purge_cache" data-time="'.time().'">
|
980 |
<input class="berocket_purge_cache_input" type="hidden" name="br_filters_options[purge_cache_time]" value="'.br_get_value_from_array($options, 'purge_cache_time').'">
|
981 |
' . __('Purge Cache', 'BeRocket_AJAX_domain') . '
|
1000 |
$html = '<tr>
|
1001 |
<th scope="row">' . __('Replace old widgets', 'BeRocket_AJAX_domain') . '</th>
|
1002 |
<td>';
|
1003 |
+
$old_filter_widgets = get_option('widget_berocket_aapf_widget');
|
1004 |
+
if( ! is_array($old_filter_widgets) ) {
|
1005 |
+
$old_filter_widgets = array();
|
1006 |
+
}
|
1007 |
+
foreach ($old_filter_widgets as $key => $value) {
|
1008 |
+
if (!is_numeric($key)) {
|
1009 |
+
unset($old_filter_widgets[$key]);
|
1010 |
+
}
|
1011 |
+
}
|
1012 |
+
$html .= '<span
|
1013 |
class="button berocket_replace_deprecated_with_new' . ( !count($old_filter_widgets) ? ' berocket_ajax_sending' : '' ) . '"
|
1014 |
data-ready="' . __('Widget replaced', 'BeRocket_AJAX_domain') . '"
|
1015 |
data-loading="' . __('Replacing widgets... Please wait', 'BeRocket_AJAX_domain') . '"';
|
1016 |
+
if( !count($old_filter_widgets) ) $html .= ' disabled="disabled"';
|
1017 |
+
$html .= '>';
|
1018 |
+
if( count($old_filter_widgets) ) {
|
1019 |
+
$html .= __('Replace widgets', 'BeRocket_AJAX_domain');
|
1020 |
+
} else {
|
1021 |
+
$html .= __('No old widgets', 'BeRocket_AJAX_domain');
|
1022 |
+
}
|
1023 |
+
$html .= '</span>
|
1024 |
<p>' . __('Replace deprecated widgets with new single filter widgets', 'BeRocket_AJAX_domain') . '</p>
|
1025 |
<script>
|
1026 |
jQuery(".berocket_replace_deprecated_with_new").click(function() {
|
1048 |
</tr>
|
1049 |
<tr>
|
1050 |
<td style="width:600px;">
|
1051 |
+
<textarea style="width: 100%; min-height: 400px; height:900px" name="br_filters_options[user_custom_css]">' . htmlentities(br_get_value_from_array($options, 'user_custom_css')) . '</textarea>
|
1052 |
</td>
|
1053 |
<td><div class="berocket_css_examples"style="max-width:300px;">
|
1054 |
<h4>Add border to widget</h4>
|
1457 |
'no_products' => ("<p class='no-products woocommerce-info" . ( ! empty( $br_options['no_products_class'] ) ? ' '.$br_options['no_products_class'] : '' ) . "'>" . $br_options['no_products_message'] . "</p>"),
|
1458 |
'recount_products' => ( empty($br_options['recount_products']) ? '' : $br_options['recount_products'] ),
|
1459 |
'pos_relative' => ( empty($br_options['pos_relative']) ? '' : $br_options['pos_relative'] ),
|
1460 |
+
'woocommerce_removes' => json_encode( array(
|
1461 |
+
'result_count' => ( empty($br_options['woocommerce_removes']['result_count']) ? '' : $br_options['woocommerce_removes']['result_count'] ),
|
1462 |
+
'ordering' => ( empty($br_options['woocommerce_removes']['ordering']) ? '' : $br_options['woocommerce_removes']['ordering'] ),
|
1463 |
+
'pagination' => ( empty($br_options['woocommerce_removes']['pagination']) ? '' : $br_options['woocommerce_removes']['pagination'] ),
|
1464 |
+
) ),
|
1465 |
'description_show' => ( ! empty($br_options['description']['show']) ? $br_options['description']['show'] : 'click' ),
|
1466 |
'description_hide' => ( ! empty($br_options['description']['hide']) ? $br_options['description']['hide'] : 'click' ),
|
1467 |
'hide_sel_value' => ( empty($br_options['hide_value']['sel']) ? '' : $br_options['hide_value']['sel'] ),
|
1478 |
<div class="berocket_aapf_widget_loading_bottom">' . ( ! empty( $br_options['ajax_load_text']['bottom'] ) ? $br_options['ajax_load_text']['bottom'] : '' ) . '</div>
|
1479 |
</div></div>',
|
1480 |
'translate' => array(
|
1481 |
+
'show_value' => __('Show value(s)', 'BeRocket_AJAX_domain'),
|
1482 |
+
'hide_value' => __('Hide value(s)', 'BeRocket_AJAX_domain'),
|
1483 |
+
'unselect_all' => __('Unselect all', 'BeRocket_AJAX_domain'),
|
1484 |
+
'nothing_selected' => __('Nothing is selected', 'BeRocket_AJAX_domain'),
|
1485 |
+
'products' => __('products', 'BeRocket_AJAX_domain'),
|
1486 |
),
|
1487 |
'trailing_slash' => $permalink_structure,
|
1488 |
'pagination_base' => $wp_rewrite->pagination_base,
|
1576 |
if( ! isset( self::$error_log['2_shortcodes'] ) )
|
1577 |
{
|
1578 |
self::$error_log['2_shortcodes'] = array();
|
1579 |
+
}
|
1580 |
self::$error_log['2_shortcodes'][] = $atts;
|
1581 |
}
|
1582 |
$default = BeRocket_AAPF_Widget::$defaults;
|
1774 |
br_aapf_args_converter( $query );
|
1775 |
}
|
1776 |
if ( ( ( ! is_admin() && $is_wc_main_query ) || $is_shortcode ) ) {
|
1777 |
+
if( ( apply_filters( 'berocket_aapf_is_filtered_page_check', ! empty($_GET['filters']), 'apply_user_filters', $query ) )
|
1778 |
+
&& ( ( isset($query->query_vars['wc_query']) && $query->query_vars['wc_query'] == 'product_query' ) || ( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'product' ) ) ) {
|
1779 |
$args = $this->get_filter_args($query);
|
1780 |
$args_fields = array( 'meta_key', 'tax_query', 'fields', 'where', 'join', 'meta_query', 'date_query' );
|
1781 |
foreach ( $args_fields as $args_field ) {
|
1793 |
|
1794 |
//THIS CAN BE NEW FIX FOR SORTING, BUT NOT SURE
|
1795 |
if( class_exists('WC_Query') && method_exists('WC_Query', 'product_query') ) {
|
1796 |
+
|
1797 |
if( empty($_GET['orderby']) && wc_clean( get_query_var( 'orderby' ) ) && strtolower(wc_clean( get_query_var( 'order' ) )) == 'desc' ) {
|
1798 |
$orderby = strtolower(wc_clean( get_query_var( 'orderby' ) ));
|
1799 |
$orderby = explode(' ', $orderby);
|
2029 |
switch_to_blog( $old_blog );
|
2030 |
return;
|
2031 |
}
|
2032 |
+
}
|
2033 |
$this->_br_add_defaults();
|
2034 |
}
|
2035 |
public function _br_add_defaults() {
|
2107 |
'#widget-title#' => '.berocket_aapf_widget-title'
|
2108 |
);
|
2109 |
$result_css = "";
|
2110 |
+
/*if ( ! empty( $options['user_custom_css'] ) ) {
|
2111 |
if ( ! (
|
2112 |
preg_match( "/script/i", $options[ 'user_custom_css' ] ) or
|
2113 |
preg_match( "/style/i", $options[ 'user_custom_css' ] ) or
|
2117 |
) ) {
|
2118 |
$result_css = $options[ 'user_custom_css' ];
|
2119 |
}
|
2120 |
+
}*/
|
2121 |
+
$result_css = str_replace(array('<style>', '</style>', '<'), '', $options[ 'user_custom_css' ]);
|
2122 |
foreach ( $replace_css as $key => $value ) {
|
2123 |
$result_css = str_replace( $key, $value, $result_css );
|
2124 |
}
|
2535 |
$min = isset( $_POST['price'][0] ) ? floatval( $_POST['price'][0] ) : 0;
|
2536 |
$max = isset( $_POST['price'][1] ) ? floatval( $_POST['price'][1] ) : 9999999999;
|
2537 |
if( ! empty($woocommerce_wpml) && is_object($woocommerce_wpml)
|
2538 |
+
&& property_exists($woocommerce_wpml, 'multi_currency') && is_object($woocommerce_wpml->multi_currency)
|
2539 |
+
&& property_exists($woocommerce_wpml->multi_currency, 'prices') && is_object($woocommerce_wpml->multi_currency->prices)
|
2540 |
+
&& method_exists($woocommerce_wpml->multi_currency->prices, 'unconvert_price_amount') ) {
|
2541 |
$min = $woocommerce_wpml->multi_currency->prices->unconvert_price_amount($min);
|
2542 |
$max = $woocommerce_wpml->multi_currency->prices->unconvert_price_amount($max);
|
2543 |
}
|
2600 |
if( $previous === '0' ) {
|
2601 |
update_option('berocket_filter_open_wizard_on_settings', true);
|
2602 |
}
|
2603 |
+
if( $previous !== '0' && ( version_compare($previous, '1.3.7', '<') || (version_compare($previous, '2.0', '>') && version_compare($previous, '2.3.1', '<') ) ) ) {
|
2604 |
+
$options = $this->get_option();
|
2605 |
+
$options = berocket_sanitize_array($options);
|
2606 |
+
update_option( 'br_filters_options', $options );
|
2607 |
+
new berocket_admin_notices(array(
|
2608 |
+
'start' => 0,
|
2609 |
+
'end' => 0,
|
2610 |
+
'name' => 'aapf_security_risk',
|
2611 |
+
'html' => 'Older versions of the AJAX Product Filters by BeRocket have critical issue that require your attention. Please read this article fully - <a href="https://docs.berocket.com/docs_section/error-on-front-end" target="_blank">Error on front-end</a>',
|
2612 |
+
'righthtml' => '<a class="berocket_no_thanks">I read and understand the problem. Close it</a>',
|
2613 |
+
'rightwidth' => 200,
|
2614 |
+
'nothankswidth' => 200,
|
2615 |
+
'contentwidth' => 400,
|
2616 |
+
'subscribe' => false,
|
2617 |
+
'priority' => 20,
|
2618 |
+
'height' => 50,
|
2619 |
+
'repeat' => false,
|
2620 |
+
'repeatcount' => 1,
|
2621 |
+
'image' => array(
|
2622 |
+
'local' => plugin_dir_url( __FILE__ ) . 'images/attention.png',
|
2623 |
+
),
|
2624 |
+
));
|
2625 |
+
}
|
2626 |
}
|
2627 |
public function save_settings_callback( $settings ) {
|
2628 |
$options = $this->get_option();
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Donate link: https://berocket.com/product/woocommerce-ajax-products-filter?utm_s
|
|
5 |
Tags: filters, product filters, ajax product filters, ajax filter, ajax filter widget, color filter, size filter, product onsale filter, product preview, product category filter, product reset filter, product sort by filter, stock filter, product tag filter, price range filter, price box filter, advanced product filters, woocommerce filters, woocommerce product filters, woocommerce products filter, woocommerce ajax product filters, widget, plugin, woocommerce item filters, filters plugin, ajax filters plugin, filter woocommerce products, filter woocommerce products plugin, wc filters, wc filters products, wc products filters, wc ajax products filters, wc product filters, wc advanced product filters, woocommerce layered nav, woocommerce layered navigation, ajax filtered nav, ajax filtered navigation, price filter, ajax price filter, woocommerce product sorting, sidebar filter, sidebar ajax filter, taxonomy filter, category filter, attribute filter, attributes filter, woocommerce product sort, ajax products filter plugin for woocommerce, rocket, berocket, berocket woocommerce ajax products filter
|
6 |
Requires at least: 4.0
|
7 |
Tested up to: 5.2.3
|
8 |
-
Stable tag: 1.3.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -184,6 +184,10 @@ You can try this plugin's admin side [here](https://berocket.com/product/woocomm
|
|
184 |
|
185 |
== Changelog ==
|
186 |
|
|
|
|
|
|
|
|
|
187 |
= 1.3.6.1 =
|
188 |
* Fix - preg_replace warning in the main.php
|
189 |
|
5 |
Tags: filters, product filters, ajax product filters, ajax filter, ajax filter widget, color filter, size filter, product onsale filter, product preview, product category filter, product reset filter, product sort by filter, stock filter, product tag filter, price range filter, price box filter, advanced product filters, woocommerce filters, woocommerce product filters, woocommerce products filter, woocommerce ajax product filters, widget, plugin, woocommerce item filters, filters plugin, ajax filters plugin, filter woocommerce products, filter woocommerce products plugin, wc filters, wc filters products, wc products filters, wc ajax products filters, wc product filters, wc advanced product filters, woocommerce layered nav, woocommerce layered navigation, ajax filtered nav, ajax filtered navigation, price filter, ajax price filter, woocommerce product sorting, sidebar filter, sidebar ajax filter, taxonomy filter, category filter, attribute filter, attributes filter, woocommerce product sort, ajax products filter plugin for woocommerce, rocket, berocket, berocket woocommerce ajax products filter
|
6 |
Requires at least: 4.0
|
7 |
Tested up to: 5.2.3
|
8 |
+
Stable tag: 1.3.7
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
184 |
|
185 |
== Changelog ==
|
186 |
|
187 |
+
= 1.3.7 =
|
188 |
+
* Critical Update! Sanitize all settings. Can break some custom CSS/JavaScript.
|
189 |
+
* Fix - Show notification about security problem
|
190 |
+
|
191 |
= 1.3.6.1 =
|
192 |
* Fix - preg_replace warning in the main.php
|
193 |
|
woocommerce-filters.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Advanced AJAX Product Filters for WooCommerce
|
4 |
* Plugin URI: https://wordpress.org/plugins/woocommerce-ajax-filters/?utm_source=free_plugin&utm_medium=plugins&utm_campaign=ajax_filters
|
5 |
* Description: Unlimited AJAX products filters to make your shop perfect
|
6 |
-
* Version: 1.3.
|
7 |
* Author: BeRocket
|
8 |
* Requires at least: 4.0
|
9 |
* Author URI: https://berocket.com?utm_source=free_plugin&utm_medium=plugins&utm_campaign=ajax_filters
|
@@ -11,6 +11,6 @@
|
|
11 |
* Domain Path: /languages/
|
12 |
* WC tested up to: 3.7.0
|
13 |
*/
|
14 |
-
define( "BeRocket_AJAX_filters_version", '1.3.
|
15 |
define( "BeRocket_AJAX_filters_file", __FILE__ );
|
16 |
include_once('main.php');
|
3 |
* Plugin Name: Advanced AJAX Product Filters for WooCommerce
|
4 |
* Plugin URI: https://wordpress.org/plugins/woocommerce-ajax-filters/?utm_source=free_plugin&utm_medium=plugins&utm_campaign=ajax_filters
|
5 |
* Description: Unlimited AJAX products filters to make your shop perfect
|
6 |
+
* Version: 1.3.7
|
7 |
* Author: BeRocket
|
8 |
* Requires at least: 4.0
|
9 |
* Author URI: https://berocket.com?utm_source=free_plugin&utm_medium=plugins&utm_campaign=ajax_filters
|
11 |
* Domain Path: /languages/
|
12 |
* WC tested up to: 3.7.0
|
13 |
*/
|
14 |
+
define( "BeRocket_AJAX_filters_version", '1.3.7' );
|
15 |
define( "BeRocket_AJAX_filters_file", __FILE__ );
|
16 |
include_once('main.php');
|