Version Description
- Fix - Values Order - Default/Numeric, Order Type was not working with multigobyte values
- Fix - PHP notices/errors
Download this release
Release Info
Developer | dholovnia |
Plugin | Advanced AJAX Product Filters |
Version | 1.3.2.6 |
Comparing to | |
See all releases |
Code changes from version 1.3.3.1 to 1.3.2.6
- berocket/assets/css/admin.css +6 -0
- berocket/assets/css/global-admin.css +2 -2
- berocket/framework.php +8 -8
- berocket/framework_version.php +1 -1
- berocket/includes/admin_notices.php +350 -0
- berocket/includes/updater.php +1 -0
- berocket/templates/premium.php +3 -2
- berocket/templates/settings.php +1 -0
- includes/addons/woocommerce-variation.php +16 -8
- includes/functions.php +9 -14
- includes/new_widget.php +8 -8
- includes/widget.php +46 -84
- js/admin.js +0 -2
- js/themes/the7.js +0 -4
- js/widget.min.js +22 -70
- main.php +60 -77
- readme.txt +10 -30
- templates/filter_condition.php +293 -0
- templates/filters_condition.php +293 -0
- templates/filters_group.php +2 -22
- templates/free/features.php +10 -10
- templates/premium.php +3 -2
- templates/settings_footer.php +62 -0
- templates/settings_head.php +9 -0
- woocommerce-filters.php +7 -5
berocket/assets/css/admin.css
CHANGED
@@ -311,6 +311,12 @@
|
|
311 |
line-height: 1.7em;
|
312 |
}
|
313 |
|
|
|
|
|
|
|
|
|
|
|
|
|
314 |
.br_framework_settings .paid_features ul li {
|
315 |
text-align: left;
|
316 |
}
|
311 |
line-height: 1.7em;
|
312 |
}
|
313 |
|
314 |
+
.br_framework_settings .paid_features h3 {
|
315 |
+
color: #ff5252;
|
316 |
+
font-size: 2em;
|
317 |
+
line-height: 1em;
|
318 |
+
}
|
319 |
+
|
320 |
.br_framework_settings .paid_features ul li {
|
321 |
text-align: left;
|
322 |
}
|
berocket/assets/css/global-admin.css
CHANGED
@@ -17,8 +17,8 @@
|
|
17 |
width: 14px;
|
18 |
display: block;
|
19 |
position: absolute;
|
20 |
-
left:
|
21 |
-
top: -
|
22 |
}
|
23 |
.current .berocket_admin_menu_custom_post_submenu:before {
|
24 |
background: transparent url('../images/submenu-icon-a.png') top left/cover;
|
17 |
width: 14px;
|
18 |
display: block;
|
19 |
position: absolute;
|
20 |
+
left: 6px;
|
21 |
+
top: -1px;
|
22 |
}
|
23 |
.current .berocket_admin_menu_custom_post_submenu:before {
|
24 |
background: transparent url('../images/submenu-icon-a.png') top left/cover;
|
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;
|
@@ -167,10 +167,10 @@ if( ! class_exists( 'BeRocket_Framework' ) ) {
|
|
167 |
*
|
168 |
* @return array
|
169 |
*/
|
170 |
-
public function get_product_data_berocket() {
|
171 |
-
$products = get_transient(
|
172 |
if( $products === FALSE ) {
|
173 |
-
$response = wp_remote_post('https://berocket.com/main/get_product_data/'.$
|
174 |
'method' => 'POST',
|
175 |
'timeout' => 15,
|
176 |
'redirection' => 5,
|
@@ -181,12 +181,12 @@ if( ! class_exists( 'BeRocket_Framework' ) ) {
|
|
181 |
$out = wp_remote_retrieve_body($response);
|
182 |
if( !empty($out) && json_decode($out) ) {
|
183 |
$products = json_decode($out, true);
|
184 |
-
set_transient(
|
185 |
} else {
|
186 |
-
set_transient(
|
187 |
}
|
188 |
} else {
|
189 |
-
set_transient(
|
190 |
}
|
191 |
}
|
192 |
return $products;
|
@@ -420,7 +420,7 @@ if( ! class_exists( 'BeRocket_Framework' ) ) {
|
|
420 |
if( isset($this->plugin_version_capability) && $this->plugin_version_capability <= 5 ) {
|
421 |
berocket_admin_notices::generate_subscribe_notice();
|
422 |
if( empty($this->feature_list) || ! is_array($this->feature_list) || ! count($this->feature_list) ) {
|
423 |
-
$products_info = $this->get_product_data_berocket();
|
424 |
if( is_array($products_info) && isset($products_info['difference']) && is_array($products_info['difference']) ) {
|
425 |
$this->feature_list = $products_info['difference'];
|
426 |
}
|
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.3';
|
38 |
public static $settings_name = '';
|
39 |
public $addons;
|
40 |
public $libraries;
|
167 |
*
|
168 |
* @return array
|
169 |
*/
|
170 |
+
public static function get_product_data_berocket($plugin_id) {
|
171 |
+
$products = get_transient('berocket_' . $plugin_id . '_paid_info');
|
172 |
if( $products === FALSE ) {
|
173 |
+
$response = wp_remote_post('https://berocket.com/main/get_product_data/'.$plugin_id, array(
|
174 |
'method' => 'POST',
|
175 |
'timeout' => 15,
|
176 |
'redirection' => 5,
|
181 |
$out = wp_remote_retrieve_body($response);
|
182 |
if( !empty($out) && json_decode($out) ) {
|
183 |
$products = json_decode($out, true);
|
184 |
+
set_transient('berocket_' . $plugin_id . '_paid_info', $products, WEEK_IN_SECONDS);
|
185 |
} else {
|
186 |
+
set_transient('berocket_' . $plugin_id . '_paid_info', '', DAY_IN_SECONDS);
|
187 |
}
|
188 |
} else {
|
189 |
+
set_transient('berocket_' . $plugin_id . '_paid_info', '', DAY_IN_SECONDS);
|
190 |
}
|
191 |
}
|
192 |
return $products;
|
420 |
if( isset($this->plugin_version_capability) && $this->plugin_version_capability <= 5 ) {
|
421 |
berocket_admin_notices::generate_subscribe_notice();
|
422 |
if( empty($this->feature_list) || ! is_array($this->feature_list) || ! count($this->feature_list) ) {
|
423 |
+
$products_info = $this->get_product_data_berocket($this->info['id']);
|
424 |
if( is_array($products_info) && isset($products_info['difference']) && is_array($products_info['difference']) ) {
|
425 |
$this->feature_list = $products_info['difference'];
|
426 |
}
|
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.3';
|
3 |
if( version_compare($framework_version_current, $framework_version, '>') ) {
|
4 |
$framework_version = $framework_version_current;
|
5 |
$framework_dir = __DIR__;
|
berocket/includes/admin_notices.php
CHANGED
@@ -797,6 +797,8 @@ if( ! class_exists( 'berocket_admin_notices_rate_stars' ) ) {
|
|
797 |
add_action( 'wp_ajax_berocket_rate_stars_close', array($this, 'disable_rate_notice') );
|
798 |
add_action( 'wp_ajax_berocket_feature_request_send', array($this, 'feature_request_send') );
|
799 |
add_action( 'berocket_rate_plugin_window', array($this, 'show_rate_window'), 10, 2 );
|
|
|
|
|
800 |
add_action( 'berocket_feature_request_window', array($this, 'show_feature_request_window'), 10, 2 );
|
801 |
}
|
802 |
function admin_notices() {
|
@@ -1070,6 +1072,354 @@ if( ! class_exists( 'berocket_admin_notices_rate_stars' ) ) {
|
|
1070 |
}
|
1071 |
return $html;
|
1072 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1073 |
function show_feature_request_window($html, $plugin_id) {
|
1074 |
$disabled = get_option('berocket_admin_notices_rate_stars');
|
1075 |
$plugins = apply_filters('berocket_admin_notices_rate_stars_plugins', array());
|
797 |
add_action( 'wp_ajax_berocket_rate_stars_close', array($this, 'disable_rate_notice') );
|
798 |
add_action( 'wp_ajax_berocket_feature_request_send', array($this, 'feature_request_send') );
|
799 |
add_action( 'berocket_rate_plugin_window', array($this, 'show_rate_window'), 10, 2 );
|
800 |
+
add_action( 'berocket_related_plugins_window', array($this, 'show_related_window'), 10, 3 );
|
801 |
+
add_action( 'berocket_above_admin_settings', array($this, 'show_ad_above_admin_settings'), 10, 2 );
|
802 |
add_action( 'berocket_feature_request_window', array($this, 'show_feature_request_window'), 10, 2 );
|
803 |
}
|
804 |
function admin_notices() {
|
1072 |
}
|
1073 |
return $html;
|
1074 |
}
|
1075 |
+
|
1076 |
+
function get_plugin_data($plugin_id = false) {
|
1077 |
+
$host = 'https://berocket.ams3.cdn.digitaloceanspaces.com/plugins/banners/';
|
1078 |
+
|
1079 |
+
$plugins = array(
|
1080 |
+
array(
|
1081 |
+
'plugin_id' => 1,
|
1082 |
+
'id' => 1,
|
1083 |
+
'price' => '35',
|
1084 |
+
'slug' => 'ajax_filters',
|
1085 |
+
'image' => $host . 'Filters.png',
|
1086 |
+
'image_top' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA2CAYAAAB9TjFQAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wgDEAUjvfcB5AAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAJNUlEQVRo3u2aWWxc1RmAv3PuMov32IRaSUhEiCEB7GyYIjWPSIiq6huiKmr7inguD1SELWlLKwqFNmoq2r4Apa1UoCmkLCGYJBAnECCeopRMgx2Iwbtn7qx3ObcPM3c228GxZ0ioONJo7LHnnP+7/3r+c8Q3b7rDp45DCFHz++K+5/u1v9dPLH0pEJWC+361QLXC1UPWyjVr11s2pO/7xQVEaWLf9+cVXNMkLS1NRCIhhBBIKQiFTHRNQ9c1dF0HAVKKgqDKx1MK13VxXQ/bdvA8D19B3rZJpTLkcnZp7fnWDKzmi6D1xZheARai0TBtrS10d3fRdVkH7W3Fn7s6aG6O0t7eQlNTBCkFuq4TjoQwdB3D0NE0OWdOpXxcz8N1XHK5PLbt4nkeuVyeRDJFOpVldtbis88mmJyaZWYmydjnU0xMzpDJ5HAcd3maFAJWdLSxavXlXHXVGq679iquvnodzc1RotEwuq7h+wrPUziOg2WlyWRyTE1Nk8vlyGQKr3Qmg+u4c8wsgJWaJBoJE41GiEbDRJsimIZBR3sTa1avJBqNFC1DonwfO++QzmQ5d26c9987RTx+ljMfn2N6OkEuZy8O0jQNtm3bxI4dW+i9vofLVq4gHDLJ5/PE48N88EGMj4fPMTk5w+ysxcxMkkwmRy6bx/M8PKVwnIL5KeUDoggkgFqzCrSqEAJMUycUMhECNE0jFDKIRMK0tjazYkUb7W3NrFp1OevXX8H69Wvp6+0BYGoqwZkznzB4bIiDB48zPZ2sXqUyul5zzTp+9MPv0t9/PZFIiImJKV577TDHjw8xMjLK52NTZLM2UupIqSGELAGIxYbRJYyCT/r4vsL3FZom6Opso7u7i76+a9ixYzt9fRsBiMfP8udnX+KVl9/G9VQ15Nq13Tz6q7vp7u4C4NVXD/Gb3z7F2ZExdCNUhBIIIbmUhvJcIlGD22+/lTu+/x2am5twHJdf/PIP7Nv3JkJIShJv7rualSs7ChHO9xkcfJ/R0VnCkRZ03Sxp7lIbUtPJ532OHo2RzebxfR9d19jc14Pr2tU+6TgurqcwDR0hBHfd9QN6ejYwMPAOp+OfYFmZZRcGizHLCwKUgiuvXM22bZv49q076OzsQCkfKQW5fB6lvAJkkAuDMBDkpY6ONm677RZuueVbjI1NMTw8yrHjQwwPjzI5OUs6lSWby6OUKgaY5Qu90AiCUDQSpq29hVWrLmPrlo1s6FnLFWu+QXt7azHal/OpEOWHrJfyFn6VkwejtbWZ1tZmNmxYy80334RtO4yOjmNZaaankyQSFtMzSdKpDLbtkkpnSCRSzM4ksW23VFD4+CUhAgXLovn7+GiapLW1mba2ZlpamgiFTKKREB0dbbS2NdHV2U5LSxOdne2sWNG2QHAqg1U++JImrWQax3ExDL0U2ufThmkarFu36rxP3nFcHNdFeaoE6Xle4TEGlD5VBYIQYBgGRtFdlmLWlV9LpdKlqF/S5FAsTi6XJxoNlxYOJgt+ri2xyov5VWlE17Xiw1paulDKX3DuWv5K2ZQqVGaep/jwwzhSagWLCf45kUixd+/fako5UTVJMKmUopiwJVIWqpHgs0AIpfwlvFQJpDBvee7y/KLqVQkYyDc4+B4HDw4iZcFPqx73vn++SUtLhDvv/F7JhIKJK0ErI+dCprW02kBcULSutq6CX7/77hD37nwUMEqa1Fav6b2/8osnh05j23m2bt1YzItiSemg0aMS0PMUuq5x9OgJ7vnJIySTDppmlGSeAymEIBaLY9t5brjhunnhLjZw2UQVvl+IAYcPH2fnzseYTdjoullVuMyBDEZsKI7t2NzY31t8YhT9Yq7pXiwN+sUI/fbbJ7h356MkkjaGEZoj24KQIDh58jTpdJob+3uRMoheFw+0NshommRw8D3uuecRkpaDYYTm9esFIYMJh4bieJ7Lli2bqsL0lwlam8qCIHPiRIwf3/1zUmkPwzAXDFwLQlZGzw/eP0U2m2Xr1o1omlbqFHxZmqy0HqUUmqZx4MAR7rvvMZKWU/TBhWU5j7lW54OhodOkMxn6+69H0+ScnkujgCurG6V8NE1jYGCQ+x94nJTlzuuDS4L0fR8pNWKxOJlsli2bN2IYeikYNQq0HGSCAkFy+PBxHnzoCVIpB/08JnrBkGX/k8Ri/yWbK4MGW5t6+2hlmoBCxfP660e4/4EnsIomuhjAxZtrjY/GYnEsy6K/mF6UUkgp6wZamSYCH3zxxdfZtXsPmYyHrocWDVhVu15YIJD8/bk32Lv3L2iaLO4yVN0BPc9D13XeeusdHn749+RyoGnmhe9HF6vJ+TR7cug06VSK3t4eTNNYdjCq1mChjXHo0DF27d5DIml/YRStO2QgUOzfZ5hNJNm6bROhIuhSfLTSB4M+6/79B9m589ekUi6GYS7ZSpalyWCcOjWMZVls37YJwzDwPHVBoNWVTCHIBD7oONp5E31DIWuBT50aITGbZPv2azHNAuhiKqP5tkuvvPImu3fvwXZkMYous0dUD8iSRv8zwsTEJFs2byQcNiuaSmJRPqhpkv3/eoOf/fR35PJUbZeW1basd+J+6aW32Lv3r7iu+4VHbbWAAwOD7Nq1h0xWLTnINBSynC8FL/xjgP37D5VaFvMxBuYZFBMfffQxDz70OLZNcTdRxwZ0vQtppQo79T/+6XkSCWvOoW21FguR2HVdnn7meWZn85hmuK6nzHWHrBzj4zOMj0/P6eNWm3cBNpvN8emnYxhGiDrzNRYSBEkrXdXarIYsw+bzDo7jAaLuWmwwpI88T0cv+KjcFSy3Gb9CkMvbO/7fQTYK7pKCbHQb5dI7Vf0a8mvISz/wNDL4XFKaXKhw+EpC1l44FEIgG9iRlxfDLIPiPDjjz+XyJBJWw3KmbBwQFTcrq/8WnCoHjennnnuZs598ztxrafUZeuP8q/AetCqDdyicJ0qpYVkpnnzyWZ56eh+aFm3YZSi9kZrU9fIV0MqRTFocOfIuTz/zArHYGUwzgqY1TJTGQQIcOHCUzs5WDEPHth3Gxic59+kY/3zxIMeOxTDNCJFIC8vpxC3Kqup9B73K4aVgzZoumpvCWKk0U1OJ4vU1HV3Xl3TV+pLTpFI+IyMTVYeoUoZKp9Zf1vgfR0Yik9k+7VMAAAAASUVORK5CYII=',
|
1087 |
+
'title' => 'WooCommerce AJAX Products Filter',
|
1088 |
+
'desc' => "Increase conversions by making the product search easier and suitable for your customers' needs",
|
1089 |
+
'desc_top' => 'Get nice URLs and correct variations filtering for your shop with WooCommerce AJAX Products Filter for only ${price}!',
|
1090 |
+
'url' => 'https://berocket.com/l/filters-upgrade',
|
1091 |
+
'bg' => 'white'
|
1092 |
+
),
|
1093 |
+
array(
|
1094 |
+
'plugin_id' => 18,
|
1095 |
+
'id' => 35,
|
1096 |
+
'price' => '29',
|
1097 |
+
'slug' => 'products_label',
|
1098 |
+
'image' => $host . 'Labels.png',
|
1099 |
+
'image_top' => 'data:image/png;base64,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',
|
1100 |
+
'title' => 'WooCommerce Advanced Product Labels',
|
1101 |
+
'desc' => "Capture client's attention on needed products. Create labels easily and quickly",
|
1102 |
+
'desc_top' => 'Capture client\'s attention on needed products. Create labels easily and quickly for only ${price}!',
|
1103 |
+
'url' => 'https://berocket.com/product/woocommerce-advanced-product-labels',
|
1104 |
+
'bg' => '#f2f2f2'
|
1105 |
+
),
|
1106 |
+
array(
|
1107 |
+
'plugin_id' => 2,
|
1108 |
+
'id' => 3,
|
1109 |
+
'price' => '29',
|
1110 |
+
'slug' => 'list_grid',
|
1111 |
+
'image' => $host . 'GridList.png',
|
1112 |
+
'image_top' => 'data:image/png;base64,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',
|
1113 |
+
'title' => 'WooCommerce Grid/List View',
|
1114 |
+
'desc' => "Users need option to see more info. Add Grid/List toggle and Products per page to show more",
|
1115 |
+
'desc_top' => 'Users need option to see more info. Add Grid/List toggle and Products per page to show more for only ${price}!',
|
1116 |
+
'url' => 'https://berocket.com/product/woocommerce-grid-list-view',
|
1117 |
+
'bg' => '#5f4a8b'
|
1118 |
+
),
|
1119 |
+
array(
|
1120 |
+
'plugin_id' => 3,
|
1121 |
+
'id' => 5,
|
1122 |
+
'price' => '29',
|
1123 |
+
'slug' => 'BeRocket_LMP',
|
1124 |
+
'image' => $host . 'LoadMore.png',
|
1125 |
+
'image_top' => 'data:image/png;base64,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',
|
1126 |
+
'title' => 'WooCommerce Load More Products',
|
1127 |
+
'desc' => "Load next page' products with infinite scrolling, AJAX pagination or load more products button",
|
1128 |
+
'desc_top' => 'Load next page\' products with infinite scrolling, AJAX pagination or load more products button for only ${price}!',
|
1129 |
+
'url' => 'https://berocket.com/product/woocommerce-load-more-products',
|
1130 |
+
'bg' => '#5f4a8b'
|
1131 |
+
),
|
1132 |
+
array(
|
1133 |
+
'plugin_id' => 9,
|
1134 |
+
'id' => 17,
|
1135 |
+
'price' => '29',
|
1136 |
+
'slug' => 'MM_Quantity',
|
1137 |
+
'image' => $host . 'MinMax.png',
|
1138 |
+
'image_top' => 'data:image/png;base64,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',
|
1139 |
+
'title' => 'WooCommerce Min/Max Quantity',
|
1140 |
+
'desc' => "Define quantity rules for orders, products and variations. Group the products and limit all of them together",
|
1141 |
+
'desc_top' => 'Define quantity rules for orders, products and variations. Group the products and limit all of them together for only ${price}!',
|
1142 |
+
'url' => 'https://berocket.com/product/woocommerce-minmax-quantity',
|
1143 |
+
'bg' => '#f5ebdd'
|
1144 |
+
),
|
1145 |
+
array(
|
1146 |
+
'plugin_id' => 10,
|
1147 |
+
'id' => 19,
|
1148 |
+
'price' => '29',
|
1149 |
+
'slug' => 'tab_manager',
|
1150 |
+
'image' => $host . 'Tabs.png',
|
1151 |
+
'image_top' => 'data:image/png;base64,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',
|
1152 |
+
'title' => 'WooCommerce Product Tabs Manager',
|
1153 |
+
'desc' => "Upgrade your tabs to a powerful marketing instrument. Show there related products or special info.",
|
1154 |
+
'desc_top' => 'Upgrade your tabs to a powerful marketing instrument. Show there related products or special info for only ${price}!',
|
1155 |
+
'url' => 'https://berocket.com/product/woocommerce-product-tabs-manager',
|
1156 |
+
'bg' => '#955188'
|
1157 |
+
),
|
1158 |
+
array(
|
1159 |
+
'plugin_id' => 14,
|
1160 |
+
'id' => 27,
|
1161 |
+
'price' => '29',
|
1162 |
+
'slug' => 'image_watermark',
|
1163 |
+
'image' => $host . 'Watermark.png',
|
1164 |
+
'image_top' => 'data:image/png;base64,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',
|
1165 |
+
'title' => 'WooCommerce Products Image Watermark',
|
1166 |
+
'desc' => "Don't let them steal it. Add watermarks to protect your images",
|
1167 |
+
'desc_top' => 'Don\'t let them steal it. Add watermarks to protect your images for only ${price}!',
|
1168 |
+
'url' => 'https://berocket.com/product/woocommerce-products-image-watermark',
|
1169 |
+
'bg' => '#c2c3c5'
|
1170 |
+
),
|
1171 |
+
);
|
1172 |
+
$plugin_ids = array_column( $plugins, 'plugin_id' );
|
1173 |
+
$plugins_data = BeRocket_Framework::get_product_data_berocket( implode( '-', $plugin_ids ) );
|
1174 |
+
|
1175 |
+
if ( is_array( $plugins_data ) ) {
|
1176 |
+
foreach ( $plugins_data as $plugin_data ) {
|
1177 |
+
if ( ! is_array( $plugin_data ) ) {
|
1178 |
+
continue;
|
1179 |
+
}
|
1180 |
+
|
1181 |
+
foreach ( $plugins as &$plugin ) {
|
1182 |
+
if ( $plugin[ 'plugin_id' ] == berocket_isset( $plugin_data[ 'id' ] ) && isset( $plugin_data[ 'price' ] ) ) {
|
1183 |
+
$plugin[ 'price' ] = $plugin_data[ 'price' ];
|
1184 |
+
break;
|
1185 |
+
}
|
1186 |
+
}
|
1187 |
+
}
|
1188 |
+
}
|
1189 |
+
|
1190 |
+
foreach ( $plugins as & $plugin ) {
|
1191 |
+
$plugin['desc_top'] = str_replace('{price}', $plugin['price'], $plugin['desc_top']);
|
1192 |
+
}
|
1193 |
+
|
1194 |
+
if ( $plugin_id !== false ) {
|
1195 |
+
foreach ( $plugins as $plugin2 ) {
|
1196 |
+
if ( $plugin2[ 'plugin_id' ] == $plugin_id ) {
|
1197 |
+
return $plugin2;
|
1198 |
+
}
|
1199 |
+
}
|
1200 |
+
|
1201 |
+
return false;
|
1202 |
+
}
|
1203 |
+
|
1204 |
+
return $plugins;
|
1205 |
+
}
|
1206 |
+
|
1207 |
+
function show_ad_above_admin_settings($plugin_version_capability, $cur_plugin) {
|
1208 |
+
if( $plugin_version_capability < 10 ) {
|
1209 |
+
$plugin = $this->get_plugin_data($cur_plugin->info['id']);
|
1210 |
+
if( $plugin === false ) {
|
1211 |
+
$plugin = $this->get_plugin_data(1);
|
1212 |
+
}
|
1213 |
+
echo "
|
1214 |
+
<div class='berocket-above-settings-banner'>
|
1215 |
+
<h1>{$plugin['title']}</h1>
|
1216 |
+
" . (empty($plugin['image_top']) ? '' : "<img src='{$plugin['image_top']}' alt='{$plugin['title']}' />" ) . "
|
1217 |
+
<p>".(empty($plugin['desc_top']) ? $plugin['desc'] : $plugin['desc_top'])."</p>
|
1218 |
+
<a href='{$plugin['url']}?utm_source=free_plugin&utm_medium=settings&utm_campaign={$cur_plugin->info['plugin_name']}&utm_content=top' target='_blank'>" . __('Get it now', 'BeRocket_domain') . "</a>
|
1219 |
+
</div>
|
1220 |
+
<style>
|
1221 |
+
.berocket-above-settings-banner {
|
1222 |
+
width: 100%;
|
1223 |
+
padding: 20px 30px 30px;
|
1224 |
+
background: #38395c;
|
1225 |
+
color: #81a0cc;
|
1226 |
+
border: 1px solid white;
|
1227 |
+
text-align: center;
|
1228 |
+
position: relative;
|
1229 |
+
margin: 5px 0 15px;
|
1230 |
+
box-sizing: border-box;
|
1231 |
+
}
|
1232 |
+
.berocket-above-settings-banner h1{
|
1233 |
+
color: white;
|
1234 |
+
padding-bottom: 25px;
|
1235 |
+
}
|
1236 |
+
.berocket-above-settings-banner p{
|
1237 |
+
margin: 20px 0 15px;
|
1238 |
+
}
|
1239 |
+
.berocket-above-settings-banner a{
|
1240 |
+
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
|
1241 |
+
text-shadow: none;
|
1242 |
+
min-width: 120px;
|
1243 |
+
width: 250px;
|
1244 |
+
-moz-user-select: none;
|
1245 |
+
background: #ff5252 none repeat scroll 0 0;
|
1246 |
+
box-sizing: border-box;
|
1247 |
+
cursor: pointer;
|
1248 |
+
display: inline-block;
|
1249 |
+
font-size: 18px;
|
1250 |
+
outline: 0 none;
|
1251 |
+
padding: 6px 8px;
|
1252 |
+
position: relative;
|
1253 |
+
text-align: center;
|
1254 |
+
text-decoration: none;
|
1255 |
+
transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) 0s, background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) 0s;
|
1256 |
+
white-space: nowrap;
|
1257 |
+
height: auto;
|
1258 |
+
vertical-align: top;
|
1259 |
+
line-height: 25px;
|
1260 |
+
border-radius: 3px;
|
1261 |
+
font-family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;
|
1262 |
+
font-weight: 500;
|
1263 |
+
margin: 5px 0;
|
1264 |
+
border: 2px solid #ff5252;
|
1265 |
+
color: white;
|
1266 |
+
}
|
1267 |
+
</style>
|
1268 |
+
";
|
1269 |
+
}
|
1270 |
+
}
|
1271 |
+
|
1272 |
+
function show_related_window( $html, $plugin_id, $plugin, $location = 'sidebar' ) {
|
1273 |
+
add_action( 'admin_footer', array( $this, 'wp_footer_js' ) );
|
1274 |
+
$plugins = $this->get_plugin_data();
|
1275 |
+
$plugins_use = array_rand($plugins, 2);
|
1276 |
+
|
1277 |
+
foreach($plugins_use as $plugin_use) {
|
1278 |
+
$plugin_data = $plugins[$plugin_use];
|
1279 |
+
$html .= '
|
1280 |
+
<div class="berocket_related_plugins berocket-related-plugins-page-' . $plugin_data[ 'id' ] . '">
|
1281 |
+
<div style="background-color: ' . $plugin_data[ 'bg' ] . ';">
|
1282 |
+
<img style="width: 100%;" src="' . $plugin_data[ 'image' ] . '" />
|
1283 |
+
</div>
|
1284 |
+
<div>
|
1285 |
+
<div>
|
1286 |
+
<h3>' . $plugin_data[ 'title' ] . '</h3>
|
1287 |
+
<p>' . $plugin_data[ 'desc' ] . '</p>
|
1288 |
+
<a class="brfirst" href="' . $plugin_data[ 'url' ] . '?utm_source=free_plugin&utm_medium=settings&utm_campaign=' . $plugin->info['plugin_name'] . '&utm_content=sidebar" target="_blank">From: $' . $plugin_data[ 'price' ] . '</a>
|
1289 |
+
</div>
|
1290 |
+
</div>
|
1291 |
+
</div>';
|
1292 |
+
}
|
1293 |
+
|
1294 |
+
$html .= '
|
1295 |
+
<style>
|
1296 |
+
.berocket_related_plugins {
|
1297 |
+
border-radius: 3px;
|
1298 |
+
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.06);
|
1299 |
+
overflow: auto;
|
1300 |
+
position: relative;
|
1301 |
+
background-color: white;
|
1302 |
+
color: rgba(0, 0, 0, 0.87);
|
1303 |
+
padding: 0;
|
1304 |
+
margin-bottom: 30px;
|
1305 |
+
box-sizing: border-box;
|
1306 |
+
text-align: center;
|
1307 |
+
float: right;
|
1308 |
+
clear: right;
|
1309 |
+
width: 28%;
|
1310 |
+
display: flex;
|
1311 |
+
align-items: stretch;
|
1312 |
+
}
|
1313 |
+
.berocket_related_plugins > div {
|
1314 |
+
box-sizing: border-box;
|
1315 |
+
display: flex;
|
1316 |
+
align-items: center;
|
1317 |
+
float: left;
|
1318 |
+
width: 45%;
|
1319 |
+
}
|
1320 |
+
.berocket_related_plugins > div:last-child {
|
1321 |
+
width: 55%;
|
1322 |
+
padding: 4px 10px;
|
1323 |
+
}
|
1324 |
+
.berocket_related_plugins > div h3 {
|
1325 |
+
margin-top: 0;
|
1326 |
+
}
|
1327 |
+
.berocket_related_plugins a {
|
1328 |
+
margin-top: 30px;
|
1329 |
+
margin-bottom: 20px;
|
1330 |
+
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
|
1331 |
+
text-shadow: none;
|
1332 |
+
min-width: 120px;
|
1333 |
+
width: 70%;
|
1334 |
+
-moz-user-select: none;
|
1335 |
+
background: #ff5252 none repeat scroll 0 0;
|
1336 |
+
box-sizing: border-box;
|
1337 |
+
cursor: pointer;
|
1338 |
+
display: inline-block;
|
1339 |
+
font-size: 14px;
|
1340 |
+
outline: 0 none;
|
1341 |
+
padding: 4px 8px;
|
1342 |
+
position: relative;
|
1343 |
+
text-align: center;
|
1344 |
+
text-decoration: none;
|
1345 |
+
transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) 0s, background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1) 0s;
|
1346 |
+
white-space: nowrap;
|
1347 |
+
height: auto;
|
1348 |
+
vertical-align: top;
|
1349 |
+
line-height: 25px;
|
1350 |
+
border-radius: 3px;
|
1351 |
+
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
|
1352 |
+
font-weight: 400;
|
1353 |
+
margin: 5px 0;
|
1354 |
+
border: 2px solid #ff5252;
|
1355 |
+
color: white;
|
1356 |
+
}
|
1357 |
+
.berocket_related_plugins a:hover {
|
1358 |
+
background: #ff6e68 none repeat scroll 0 0;
|
1359 |
+
border-color: #ff6e68;
|
1360 |
+
}
|
1361 |
+
.berocket_related_plugins.berocket-related-plugins-page-1 > div:first-child {
|
1362 |
+
align-items: start;
|
1363 |
+
}
|
1364 |
+
@media screen and (min-width: 901px) and (max-width: 1700px), screen and (max-width: 500px) {
|
1365 |
+
.berocket_related_plugins > div h3 {
|
1366 |
+
margin-bottom: 0;
|
1367 |
+
font-size: 14px;
|
1368 |
+
}
|
1369 |
+
.berocket_related_plugins > div p {
|
1370 |
+
margin-top: 5px;
|
1371 |
+
margin-bottom: 5px;
|
1372 |
+
font-size: 13px;
|
1373 |
+
line-height: 1.3;
|
1374 |
+
}
|
1375 |
+
.berocket_related_plugins > div a {
|
1376 |
+
padding: 1px 5px;
|
1377 |
+
min-width: 100px;
|
1378 |
+
width: 60%;
|
1379 |
+
}
|
1380 |
+
}
|
1381 |
+
@media screen and (max-width: 1400px) {
|
1382 |
+
.berocket_related_plugins > div {
|
1383 |
+
width: 30%;
|
1384 |
+
}
|
1385 |
+
.berocket_related_plugins > div:last-child {
|
1386 |
+
width: 70%;
|
1387 |
+
}
|
1388 |
+
}
|
1389 |
+
@media screen and (min-width: 901px) and (max-width: 1200px) {
|
1390 |
+
.berocket_related_plugins{
|
1391 |
+
display: block;
|
1392 |
+
}
|
1393 |
+
.berocket_related_plugins > div{
|
1394 |
+
float: none;
|
1395 |
+
clear: both;
|
1396 |
+
width: 100%;
|
1397 |
+
}
|
1398 |
+
.berocket_related_plugins > div:first-child {
|
1399 |
+
height: 20px;
|
1400 |
+
box-shadow: 0 0 4px 0px #ccc;
|
1401 |
+
margin-bottom: 6px;
|
1402 |
+
}
|
1403 |
+
.berocket_related_plugins > div:last-child{
|
1404 |
+
width: 100%;
|
1405 |
+
}
|
1406 |
+
.berocket_related_plugins > div:first-child img {
|
1407 |
+
display: none;
|
1408 |
+
}
|
1409 |
+
}
|
1410 |
+
@media screen and (max-width: 900px) {
|
1411 |
+
.berocket_related_plugins {
|
1412 |
+
float: none;
|
1413 |
+
width: 100%;
|
1414 |
+
margin-top: 30px;
|
1415 |
+
margin-bottom: 0;
|
1416 |
+
}
|
1417 |
+
}
|
1418 |
+
</style>';
|
1419 |
+
|
1420 |
+
return $html;
|
1421 |
+
}
|
1422 |
+
|
1423 |
function show_feature_request_window($html, $plugin_id) {
|
1424 |
$disabled = get_option('berocket_admin_notices_rate_stars');
|
1425 |
$plugins = apply_filters('berocket_admin_notices_rate_stars_plugins', array());
|
berocket/includes/updater.php
CHANGED
@@ -137,6 +137,7 @@ if ( ! class_exists( 'BeRocket_updater' ) ) {
|
|
137 |
$item_0 = "<span class='berocket_admin_menu_custom_post_submenu";
|
138 |
if ( $item[ 0 ] == 'Upgrade' ) {
|
139 |
$item_0 .= " berocket_admin_menu_custom_post_submenu_upgrade";
|
|
|
140 |
}
|
141 |
$item[ 0 ] = $item_0 . "'>" . $item[ 0 ] . "</span>";
|
142 |
$new_sub_order[ $compatibility_hack[ str_replace( "edit.php?post_type=", "", $item[ 2 ] ) ] ][] = $item;
|
137 |
$item_0 = "<span class='berocket_admin_menu_custom_post_submenu";
|
138 |
if ( $item[ 0 ] == 'Upgrade' ) {
|
139 |
$item_0 .= " berocket_admin_menu_custom_post_submenu_upgrade";
|
140 |
+
$item[ 0 ] .= " ⚡";
|
141 |
}
|
142 |
$item[ 0 ] = $item_0 . "'>" . $item[ 0 ] . "</span>";
|
143 |
$new_sub_order[ $compatibility_hack[ str_replace( "edit.php?post_type=", "", $item[ 2 ] ) ] ][] = $item;
|
berocket/templates/premium.php
CHANGED
@@ -21,7 +21,7 @@ if ( isset($this->plugin_version_capability) && $this->plugin_version_capability
|
|
21 |
foreach ( $feature_list as $feature ) {
|
22 |
$feature_text .= '<li>' . $feature . '</li>';
|
23 |
}
|
24 |
-
$text = '<h3>Unlock
|
25 |
<div>
|
26 |
<ul>
|
27 |
%feature_list%
|
@@ -54,7 +54,8 @@ if ( isset($this->plugin_version_capability) && $this->plugin_version_capability
|
|
54 |
</div>
|
55 |
<?php
|
56 |
}
|
57 |
-
echo apply_filters('
|
|
|
58 |
$subscribed = get_option('berocket_email_subscribed');
|
59 |
if( ! $subscribed ) {
|
60 |
$user_email = wp_get_current_user();
|
21 |
foreach ( $feature_list as $feature ) {
|
22 |
$feature_text .= '<li>' . $feature . '</li>';
|
23 |
}
|
24 |
+
$text = '<h3>Unlock Premium features!</h3>
|
25 |
<div>
|
26 |
<ul>
|
27 |
%feature_list%
|
54 |
</div>
|
55 |
<?php
|
56 |
}
|
57 |
+
echo apply_filters('berocket_related_plugins_window', '', br_get_value_from_array($this->cc->info, 'id'), $this);
|
58 |
+
echo apply_filters('berocket_feature_request_window', '', br_get_value_from_array($this->cc->info, 'id'), $this);
|
59 |
$subscribed = get_option('berocket_email_subscribed');
|
60 |
if( ! $subscribed ) {
|
61 |
$user_email = wp_get_current_user();
|
berocket/templates/settings.php
CHANGED
@@ -15,6 +15,7 @@ $options = $this->get_option();
|
|
15 |
<div class="wrap br_framework_settings br_<?php echo $this->cc->info['plugin_name']?>_settings">
|
16 |
<div id="icon-themes" class="icon32"></div>
|
17 |
<h2><?php echo $this->cc->info['full_name'] . ' ' . __( 'Settings', 'BeRocket_domain' )?></h2>
|
|
|
18 |
<?php settings_errors(); ?>
|
19 |
<?php $this->cc->admin_settings() ?>
|
20 |
</div>
|
15 |
<div class="wrap br_framework_settings br_<?php echo $this->cc->info['plugin_name']?>_settings">
|
16 |
<div id="icon-themes" class="icon32"></div>
|
17 |
<h2><?php echo $this->cc->info['full_name'] . ' ' . __( 'Settings', 'BeRocket_domain' )?></h2>
|
18 |
+
<?php do_action('berocket_above_admin_settings', berocket_isset($this->plugin_version_capability), $this); ?>
|
19 |
<?php settings_errors(); ?>
|
20 |
<?php $this->cc->admin_settings() ?>
|
21 |
</div>
|
includes/addons/woocommerce-variation.php
CHANGED
@@ -35,7 +35,7 @@ class BeRocket_AAPF_compat_woocommerce_variation {
|
|
35 |
$outofstock = wc_get_product_visibility_term_ids();
|
36 |
if( empty($outofstock['outofstock']) ) {
|
37 |
$outofstock = get_term_by( 'slug', 'outofstock', 'product_visibility' );
|
38 |
-
$outofstock = $outofstock->
|
39 |
} else {
|
40 |
$outofstock = $outofstock['outofstock'];
|
41 |
}
|
@@ -66,20 +66,28 @@ class BeRocket_AAPF_compat_woocommerce_variation {
|
|
66 |
$current_attributes = array_unique($current_attributes);
|
67 |
$current_terms = implode('", "', $current_terms);
|
68 |
$current_attributes = implode('", "', $current_attributes);
|
69 |
-
$
|
|
|
|
|
|
|
|
|
70 |
SELECT %1$s.id as var_id, %1$s.post_parent as ID, COUNT(%1$s.id) as meta_count FROM %1$s
|
71 |
INNER JOIN %2$s AS pf1 ON (%1$s.ID = pf1.post_id)
|
72 |
WHERE %1$s.post_type = "product_variation"
|
73 |
AND %1$s.post_status != "trash"
|
74 |
AND pf1.meta_key IN ("%4$s") AND pf1.meta_value IN ("%5$s")
|
75 |
-
GROUP BY %1$s.id
|
76 |
-
|
77 |
-
SELECT filtered_post.id, filtered_post.out_of_stock, COUNT(filtered_post.ID) as post_count FROM
|
78 |
-
(
|
79 |
-
SELECT filtered_post.*, max_filtered_post.max_meta_count, stock_table.out_of_stock_init as out_of_stock FROM ('.$query_filtered_posts.') as filtered_post
|
80 |
INNER JOIN
|
81 |
(
|
82 |
-
SELECT ID, MAX(meta_count) as max_meta_count FROM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
GROUP BY ID
|
84 |
) as max_filtered_post ON max_filtered_post.ID = filtered_post.ID AND max_filtered_post.max_meta_count = filtered_post.meta_count
|
85 |
LEFT JOIN
|
35 |
$outofstock = wc_get_product_visibility_term_ids();
|
36 |
if( empty($outofstock['outofstock']) ) {
|
37 |
$outofstock = get_term_by( 'slug', 'outofstock', 'product_visibility' );
|
38 |
+
$outofstock = $outofstock->term_id;
|
39 |
} else {
|
40 |
$outofstock = $outofstock['outofstock'];
|
41 |
}
|
66 |
$current_attributes = array_unique($current_attributes);
|
67 |
$current_terms = implode('", "', $current_terms);
|
68 |
$current_attributes = implode('", "', $current_attributes);
|
69 |
+
$query = sprintf( '
|
70 |
+
SELECT filtered_post.id, filtered_post.out_of_stock, COUNT(filtered_post.ID) as post_count FROM
|
71 |
+
(
|
72 |
+
SELECT filtered_post.*, max_filtered_post.max_meta_count, stock_table.out_of_stock_init as out_of_stock FROM
|
73 |
+
(
|
74 |
SELECT %1$s.id as var_id, %1$s.post_parent as ID, COUNT(%1$s.id) as meta_count FROM %1$s
|
75 |
INNER JOIN %2$s AS pf1 ON (%1$s.ID = pf1.post_id)
|
76 |
WHERE %1$s.post_type = "product_variation"
|
77 |
AND %1$s.post_status != "trash"
|
78 |
AND pf1.meta_key IN ("%4$s") AND pf1.meta_value IN ("%5$s")
|
79 |
+
GROUP BY %1$s.id
|
80 |
+
) as filtered_post
|
|
|
|
|
|
|
81 |
INNER JOIN
|
82 |
(
|
83 |
+
SELECT ID, MAX(meta_count) as max_meta_count FROM
|
84 |
+
(
|
85 |
+
SELECT %1$s.id as var_id, %1$s.post_parent as ID, COUNT(%1$s.id) as meta_count FROM %1$s
|
86 |
+
INNER JOIN %2$s AS pf1 ON (%1$s.ID = pf1.post_id)
|
87 |
+
WHERE %1$s.post_type = "product_variation"
|
88 |
+
AND pf1.meta_key IN ("%4$s") AND pf1.meta_value IN ("%5$s")
|
89 |
+
GROUP BY %1$s.id
|
90 |
+
) as max_filtered_post
|
91 |
GROUP BY ID
|
92 |
) as max_filtered_post ON max_filtered_post.ID = filtered_post.ID AND max_filtered_post.max_meta_count = filtered_post.meta_count
|
93 |
LEFT JOIN
|
includes/functions.php
CHANGED
@@ -2168,12 +2168,12 @@ if ( ! function_exists( 'br_filters_query' ) ) {
|
|
2168 |
if( ! isset($query[ 'join' ]) ) {
|
2169 |
$query[ 'join' ] = '';
|
2170 |
}
|
2171 |
-
|
|
|
2172 |
INNER JOIN {$wpdb->term_relationships} AS term_relationships ON {$wpdb->posts}.ID = term_relationships.object_id
|
2173 |
INNER JOIN {$wpdb->term_taxonomy} AS term_taxonomy USING( term_taxonomy_id )
|
2174 |
INNER JOIN {$wpdb->terms} AS terms USING( term_id )
|
2175 |
-
"
|
2176 |
-
$query[ 'join' ] .= $tax_query_sql[ 'join' ] . $meta_query_sql[ 'join' ];
|
2177 |
if( ! isset($query[ 'where' ]) ) {
|
2178 |
$query[ 'where' ] = '';
|
2179 |
}
|
@@ -2191,10 +2191,10 @@ if ( ! function_exists( 'br_filters_query' ) ) {
|
|
2191 |
if ( ! empty( $post__in ) ) {
|
2192 |
$query[ 'where' ] .= " AND {$wpdb->posts}.ID IN (\"" . implode( '","', $post__in ) . "\")";
|
2193 |
}
|
2194 |
-
|
2195 |
$product_visibility_term_ids = wc_get_product_visibility_term_ids();
|
2196 |
-
$query[ 'where' ] .= " AND
|
2197 |
-
}
|
2198 |
|
2199 |
$query[ 'where' ] .= $old_join_posts;
|
2200 |
//$query['group_by'] = "GROUP BY {$wpdb->posts}.ID";
|
@@ -2205,19 +2205,14 @@ if ( ! function_exists( 'br_filters_query' ) ) {
|
|
2205 |
}
|
2206 |
|
2207 |
if( ! function_exists('berocket_add_filter_to_link') ) {
|
2208 |
-
function berocket_add_filter_to_link($attribute = '', $values = array(), $operator = 'OR', $remove_attribute = FALSE
|
2209 |
if( ! is_array($values) ) {
|
2210 |
$values = array($values);
|
2211 |
}
|
2212 |
$options = BeRocket_AAPF::get_aapf_option();
|
2213 |
|
2214 |
-
|
2215 |
-
|
2216 |
-
$filters = (empty($_GET['filters']) ? '' : $_GET['filters']);
|
2217 |
-
} else {
|
2218 |
-
parse_str(parse_url($current_url, PHP_URL_QUERY), $filters);
|
2219 |
-
$filters = br_get_value_from_array($filters, 'filters');
|
2220 |
-
}
|
2221 |
$current_url = remove_query_arg('filters', $current_url);
|
2222 |
if( strpos($current_url, '?') === FALSE ) {
|
2223 |
$url_string = $current_url;
|
2168 |
if( ! isset($query[ 'join' ]) ) {
|
2169 |
$query[ 'join' ] = '';
|
2170 |
}
|
2171 |
+
$query[ 'join' ]
|
2172 |
+
.= "
|
2173 |
INNER JOIN {$wpdb->term_relationships} AS term_relationships ON {$wpdb->posts}.ID = term_relationships.object_id
|
2174 |
INNER JOIN {$wpdb->term_taxonomy} AS term_taxonomy USING( term_taxonomy_id )
|
2175 |
INNER JOIN {$wpdb->terms} AS terms USING( term_id )
|
2176 |
+
" . $tax_query_sql[ 'join' ] . $meta_query_sql[ 'join' ];
|
|
|
2177 |
if( ! isset($query[ 'where' ]) ) {
|
2178 |
$query[ 'where' ] = '';
|
2179 |
}
|
2191 |
if ( ! empty( $post__in ) ) {
|
2192 |
$query[ 'where' ] .= " AND {$wpdb->posts}.ID IN (\"" . implode( '","', $post__in ) . "\")";
|
2193 |
}
|
2194 |
+
if( function_exists('wc_get_product_visibility_term_ids') ) {
|
2195 |
$product_visibility_term_ids = wc_get_product_visibility_term_ids();
|
2196 |
+
$query[ 'where' ] .= " AND {$wpdb->posts}.ID NOT IN (\"SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id='" . $product_visibility_term_ids[ 'exclude-from-catalog' ] . "'\")";
|
2197 |
+
}
|
2198 |
|
2199 |
$query[ 'where' ] .= $old_join_posts;
|
2200 |
//$query['group_by'] = "GROUP BY {$wpdb->posts}.ID";
|
2205 |
}
|
2206 |
|
2207 |
if( ! function_exists('berocket_add_filter_to_link') ) {
|
2208 |
+
function berocket_add_filter_to_link($attribute = '', $values = array(), $operator = 'OR', $remove_attribute = FALSE) {
|
2209 |
if( ! is_array($values) ) {
|
2210 |
$values = array($values);
|
2211 |
}
|
2212 |
$options = BeRocket_AAPF::get_aapf_option();
|
2213 |
|
2214 |
+
$current_url = "//" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
2215 |
+
$filters = (empty($_GET['filters']) ? '' : $_GET['filters']);
|
|
|
|
|
|
|
|
|
|
|
2216 |
$current_url = remove_query_arg('filters', $current_url);
|
2217 |
if( strpos($current_url, '?') === FALSE ) {
|
2218 |
$url_string = $current_url;
|
includes/new_widget.php
CHANGED
@@ -31,20 +31,20 @@ class BeRocket_new_AAPF_Widget extends WP_Widget
|
|
31 |
$custom_vars = apply_filters('berocket_aapf_group_before_all', $custom_vars, $filters);
|
32 |
$new_args = apply_filters('berocket_aapf_group_new_args', $new_args, $filters, $custom_vars);
|
33 |
foreach($filters['filters'] as $filter) {
|
34 |
-
$
|
35 |
if( $is_shortcode ) {
|
36 |
-
if( isset($
|
37 |
-
unset($
|
38 |
}
|
39 |
-
if( isset($
|
40 |
-
unset($
|
41 |
}
|
42 |
} else {
|
43 |
-
$
|
44 |
-
$
|
45 |
}
|
46 |
$custom_vars = apply_filters('berocket_aapf_group_before_filter', $custom_vars, $filters);
|
47 |
-
the_widget( 'BeRocket_new_AAPF_Widget_single', array('filter_id' => $filter), $
|
48 |
$custom_vars = apply_filters('berocket_aapf_group_after_filter', $custom_vars, $filters);
|
49 |
$i++;
|
50 |
}
|
31 |
$custom_vars = apply_filters('berocket_aapf_group_before_all', $custom_vars, $filters);
|
32 |
$new_args = apply_filters('berocket_aapf_group_new_args', $new_args, $filters, $custom_vars);
|
33 |
foreach($filters['filters'] as $filter) {
|
34 |
+
$new_args = apply_filters('berocket_aapf_group_new_args_filter', $new_args, $filters, $filter, $custom_vars);
|
35 |
if( $is_shortcode ) {
|
36 |
+
if( isset($new_args['before_widget']) ) {
|
37 |
+
unset($new_args['before_widget']);
|
38 |
}
|
39 |
+
if( isset($new_args['after_widget']) ) {
|
40 |
+
unset($new_args['after_widget']);
|
41 |
}
|
42 |
} else {
|
43 |
+
$new_args['widget_id'] = $args['widget_id'].'-'.$i;
|
44 |
+
$new_args['before_widget'] = sprintf($before_widget, $new_args['widget_id'], '%s');
|
45 |
}
|
46 |
$custom_vars = apply_filters('berocket_aapf_group_before_filter', $custom_vars, $filters);
|
47 |
+
the_widget( 'BeRocket_new_AAPF_Widget_single', array('filter_id' => $filter), $new_args);
|
48 |
$custom_vars = apply_filters('berocket_aapf_group_after_filter', $custom_vars, $filters);
|
49 |
$i++;
|
50 |
}
|
includes/widget.php
CHANGED
@@ -572,8 +572,6 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
572 |
if ( $attribute == 'price' ) {
|
573 |
if ( ! empty($price_values) ) {
|
574 |
$price_range = explode( ",", $price_values );
|
575 |
-
} elseif( $use_min_price && $use_max_price ) {
|
576 |
-
$price_range = array($min_price, $max_price);
|
577 |
} else {
|
578 |
$price_range = br_get_cache( 'price_range', $wp_check_product_cat );
|
579 |
if ( $price_range === false ) {
|
@@ -766,9 +764,6 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
766 |
$terms = self::get_terms_child_parent ( $child_parent, $custom_taxonomy, FALSE, ( isset($child_parent_depth) ? $child_parent_depth : 0 ) );
|
767 |
$terms = BeRocket_AAPF_Widget::get_attribute_values( $custom_taxonomy, 'id', ( empty($br_options['show_all_values']) ), ( ! empty($br_options['recount_products']) ), $terms, ( isset($cat_value_limit) ? $cat_value_limit : null ), $operator );
|
768 |
}
|
769 |
-
if( $custom_taxonomy == 'product_cat' ) {
|
770 |
-
$terms = BeRocket_AAPF_Widget::get_attribute_values( $custom_taxonomy, 'id', ( empty($br_options['show_all_values']) ), ( ! empty($br_options['recount_products']) ), $terms, ( isset($cat_value_limit) ? $cat_value_limit : null ), $operator );
|
771 |
-
}
|
772 |
if ( $order_values_by != 'Default' || in_array($custom_taxonomy, array('berocket_brand', 'product_cat')) ) {
|
773 |
self::sort_terms( $terms, array(
|
774 |
"order_values_by" => $order_values_by,
|
@@ -776,6 +771,9 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
776 |
"order_values_type"=> (empty($order_values_type) || $order_values_type == 'asc' ? SORT_ASC : SORT_DESC)
|
777 |
) );
|
778 |
}
|
|
|
|
|
|
|
779 |
if ( ! br_is_filtered() && $child_parent != 'parent' && $child_parent != 'child' ) {
|
780 |
br_set_cache( $custom_taxonomy . $order_values_by, $terms, $filter_type . $wp_check_product_cat, BeRocket_AJAX_cache_expire );
|
781 |
}
|
@@ -860,7 +858,6 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
860 |
$set_query_var_title['widget_id'] = ( $this->id ? $this->id : $widget_id );
|
861 |
$set_query_var_title['widget_id_number'] = ( $this->number ? $this->number : $widget_id_number );
|
862 |
$set_query_var_title['slug_urls'] = ! empty($br_options['slug_urls']);
|
863 |
-
$set_query_var_title = apply_filters('berocket_aapf_query_var_title_filter', $set_query_var_title, $instance, $br_options);
|
864 |
set_query_var( 'berocket_query_var_title', $set_query_var_title );
|
865 |
|
866 |
// widget title and start tag ( <ul> ) can be found in templates/widget_start.php
|
@@ -994,8 +991,8 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
994 |
$max = count( $all_terms_name ) - 1;
|
995 |
if( ! empty($stringed_is_numeric) ) {
|
996 |
array_multisort( $all_terms_slug, SORT_NUMERIC, $all_terms_slug, $all_terms_name );
|
997 |
-
}
|
998 |
-
array_multisort( $all_terms_name, $all_terms_name, $all_terms_slug );
|
999 |
}
|
1000 |
}
|
1001 |
$widget_error_log['all_terms_slug'] = (isset($all_terms_slug) ? $all_terms_slug : null);
|
@@ -1243,35 +1240,25 @@ class BeRocket_AAPF_Widget extends WP_Widget {
|
|
1243 |
public static function get_price_range( $wp_query_product_cat, $product_cat = null ) {
|
1244 |
global $wpdb;
|
1245 |
|
1246 |
-
$
|
1247 |
-
|
|
|
|
|
1248 |
|
1249 |
-
if( br_woocommerce_version_check('3.6') ) {
|
1250 |
-
$query[ 'select' ] = "SELECT MIN(cast(FLOOR(wc_product_meta_lookup.min_price) as decimal)) as min_price,
|
1251 |
-
MAX(cast(CEIL(wc_product_meta_lookup.max_price) as decimal)) as max_price ";
|
1252 |
-
$query[ 'from' ] = "FROM {$wpdb->posts}";
|
1253 |
-
$query[ 'join' ] = " INNER JOIN {$wpdb->wc_product_meta_lookup} wc_product_meta_lookup ON $wpdb->posts.ID = wc_product_meta_lookup.product_id ";
|
1254 |
-
} else {
|
1255 |
-
$query[ 'select' ] = "SELECT MIN(cast(FLOOR(wp_price_check.meta_value) as decimal)) as min_price,
|
1256 |
-
MAX(cast(CEIL(wp_price_check.meta_value) as decimal)) as max_price ";
|
1257 |
-
$query[ 'from' ] = "FROM {$wpdb->postmeta} as wp_price_check";
|
1258 |
-
$query[ 'join' ] = "INNER JOIN {$wpdb->posts} ON ({$wpdb->posts}.ID = wp_price_check.post_id)";
|
1259 |
-
}
|
1260 |
if ( ! empty( $br_options[ 'show_all_values' ] ) ) {
|
1261 |
$query[ 'where' ] = " WHERE {$wpdb->posts}.post_type = 'product' AND " . br_select_post_status();
|
1262 |
} else {
|
1263 |
$query = br_filters_query( $query, 'price', $product_cat );
|
1264 |
}
|
1265 |
|
1266 |
-
if(
|
1267 |
-
|
1268 |
-
|
1269 |
-
|
1270 |
-
$query[ 'where' ] = " WHERE ";
|
1271 |
-
}
|
1272 |
-
$query[ 'where' ] .= "wp_price_check.meta_key = '".apply_filters('berocket_price_filter_meta_key', '_price', 'widget_1243')."' AND wp_price_check.meta_value > ''";
|
1273 |
}
|
1274 |
|
|
|
|
|
1275 |
$query_string = implode( ' ', $query );
|
1276 |
|
1277 |
$query_string = $wpdb->get_row( $query_string );
|
@@ -1395,7 +1382,7 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1395 |
}
|
1396 |
}
|
1397 |
$queried_object = $wp_query->get_queried_object_id();
|
1398 |
-
if( ! empty($queried_object)
|
1399 |
$query_object = $wp_query->get_queried_object();
|
1400 |
if( ! empty($query_object->taxonomy) && ! empty($query_object->slug) ) {
|
1401 |
$tax_query[ $query_object->taxonomy ] = array(
|
@@ -1520,7 +1507,7 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1520 |
}
|
1521 |
}
|
1522 |
$queried_object = $wp_query->get_queried_object_id();
|
1523 |
-
if( ! empty($queried_object)
|
1524 |
$query_object = $wp_query->get_queried_object();
|
1525 |
if( ! empty($query_object->taxonomy) && ! empty($query_object->slug) ) {
|
1526 |
$tax_query[ $query_object->taxonomy ] = array(
|
@@ -1572,7 +1559,6 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1572 |
$query['where'] .= $old_join_posts;
|
1573 |
}
|
1574 |
$query = apply_filters( 'woocommerce_get_filtered_term_product_counts_query', $query );
|
1575 |
-
$query = apply_filters( 'berocket_posts_clauses_recount', $query );
|
1576 |
$on_sale = array_merge( array( 0 ), wc_get_product_ids_on_sale() );
|
1577 |
$not_on_sale = $on_sale;
|
1578 |
$query_sale = $query;
|
@@ -1718,7 +1704,7 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1718 |
);
|
1719 |
}
|
1720 |
$queried_object = $wp_query->get_queried_object_id();
|
1721 |
-
if( ! empty($queried_object)
|
1722 |
$query_object = $wp_query->get_queried_object();
|
1723 |
if( ! empty($query_object->taxonomy) && ! empty($query_object->slug) ) {
|
1724 |
$tax_query[ $query_object->taxonomy ] = array(
|
@@ -1735,7 +1721,7 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1735 |
$tax_query_sql = $tax_query->get_sql( $wpdb->posts, 'ID' );
|
1736 |
unset($tax_query);
|
1737 |
if( ! empty($re) && ! is_wp_error($re) ) {
|
1738 |
-
$term_ids = wp_list_pluck( $re, '
|
1739 |
}
|
1740 |
if( empty($term_ids) || ! is_array($term_ids) || ! count($term_ids) ) {
|
1741 |
$terms = array();
|
@@ -1744,22 +1730,18 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1744 |
|
1745 |
// Generate query
|
1746 |
$query = array();
|
1747 |
-
$query['select'] = "SELECT COUNT( DISTINCT {$wpdb->posts}.ID ) as term_count";
|
1748 |
-
if( $taxonomy == 'product_cat' ) {
|
1749 |
-
$query['select'] .= ", GROUP_CONCAT(DISTINCT {$wpdb->posts}.ID SEPARATOR ',') as PID";
|
1750 |
-
} else {
|
1751 |
-
$query['select'] .= ", '' as PID";
|
1752 |
-
}
|
1753 |
-
$query['select'] .= ", term_relationships.term_taxonomy_id as term_count_id";
|
1754 |
$query['from'] = "FROM {$wpdb->posts}";
|
1755 |
$query['join'] = "
|
1756 |
INNER JOIN {$wpdb->term_relationships} AS term_relationships ON {$wpdb->posts}.ID = term_relationships.object_id
|
|
|
|
|
1757 |
" . $tax_query_sql['join'] . $meta_query_sql['join'];
|
1758 |
$query['where'] = "
|
1759 |
WHERE {$wpdb->posts}.post_type IN ( 'product' )
|
1760 |
AND " . br_select_post_status() . "
|
1761 |
" . $tax_query_sql['where'] . $meta_query_sql['where'] . "
|
1762 |
-
AND
|
1763 |
";
|
1764 |
|
1765 |
br_where_search( $query );
|
@@ -1767,19 +1749,13 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1767 |
$query['join'] = $query['join']." INNER JOIN {$wpdb->prefix}icl_translations as wpml_lang ON ( {$wpdb->posts}.ID = wpml_lang.element_id )";
|
1768 |
$query['where'] = $query['where']." AND wpml_lang.language_code = '".ICL_LANGUAGE_CODE."' AND wpml_lang.element_type = 'post_product'";
|
1769 |
}
|
1770 |
-
$query['group_by'] = "GROUP BY
|
1771 |
$query = apply_filters( 'woocommerce_get_filtered_term_product_counts_query', $query );
|
1772 |
-
$query = apply_filters( 'berocket_posts_clauses_recount', $query );
|
1773 |
$query = implode( ' ', $query );
|
1774 |
if( BeRocket_AAPF::$debug_mode ) {
|
1775 |
$term_recount_log['query_1'] = $query;
|
1776 |
}
|
1777 |
-
$wpdb->query( 'SET SESSION group_concat_max_len = 1000000' );
|
1778 |
$results = $wpdb->get_results( $query );
|
1779 |
-
$term_to_taxonomy = wp_list_pluck( $re, 'term_id', 'term_taxonomy_id' );
|
1780 |
-
foreach($results as &$results_convert) {
|
1781 |
-
$results_convert->term_count_id = $term_to_taxonomy[$results_convert->term_count_id];
|
1782 |
-
}
|
1783 |
$results_pid = wp_list_pluck( $results, 'PID', 'term_count_id' );
|
1784 |
$results = wp_list_pluck( $results, 'term_count', 'term_count_id' );
|
1785 |
$term_count = array();
|
@@ -1824,7 +1800,7 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1824 |
}
|
1825 |
}
|
1826 |
|
1827 |
-
$cache_result = array('terms' => $terms, 'term_count' => $term_count, 'results_pid' =>
|
1828 |
br_set_cache ( $cache_name, $cache_result, 'get_attribute_values_hide_empty', BeRocket_AJAX_cache_expire );
|
1829 |
} else {
|
1830 |
$terms = array();
|
@@ -1893,7 +1869,7 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1893 |
$terms2 = $input_terms;
|
1894 |
unset( $input_terms );
|
1895 |
}
|
1896 |
-
if(
|
1897 |
$re2 = array();
|
1898 |
$is_child = false;
|
1899 |
foreach($re as $re_id => $re_term) {
|
@@ -1996,13 +1972,7 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
1996 |
}
|
1997 |
}
|
1998 |
|
1999 |
-
if (
|
2000 |
-
( ! $hide_empty
|
2001 |
-
|| apply_filters( 'berocket_aapf_is_filtered_page_check', ! empty($_GET['filters']), 'get_filter_args', $wp_query )
|
2002 |
-
|| ( ! empty($br_options['out_of_stock_variable_reload']) && ! empty($br_options['out_of_stock_variable']) )
|
2003 |
-
|| is_filtered()
|
2004 |
-
) && $count_filtering
|
2005 |
-
) {
|
2006 |
if ( class_exists('WP_Meta_Query') && class_exists('WP_Tax_Query') ) {
|
2007 |
if ( $has_new_function ) {
|
2008 |
$tax_query = WC_Query::get_main_tax_query();
|
@@ -2039,7 +2009,7 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
2039 |
}
|
2040 |
|
2041 |
$queried_object = $wp_query->get_queried_object_id();
|
2042 |
-
if ( ! empty($queried_object)
|
2043 |
$query_object = $wp_query->get_queried_object();
|
2044 |
if ( ! empty($query_object->taxonomy) && ! empty($query_object->slug) ) {
|
2045 |
$tax_query[ $query_object->taxonomy ] = array(
|
@@ -2062,26 +2032,22 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
2062 |
$meta_query_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
|
2063 |
$tax_query_sql = $tax_query->get_sql( $wpdb->posts, 'ID' );
|
2064 |
if( ! empty($re) && count($re)) {
|
2065 |
-
$term_ids = wp_list_pluck( $re, '
|
2066 |
|
2067 |
// Generate query
|
2068 |
$query = array();
|
2069 |
-
$query['select'] = "SELECT COUNT( DISTINCT {$wpdb->posts}.ID ) as term_count";
|
2070 |
-
if( $taxonomy == 'product_cat' ) {
|
2071 |
-
$query['select'] .= ", GROUP_CONCAT(DISTINCT {$wpdb->posts}.ID SEPARATOR ',') as PID";
|
2072 |
-
} else {
|
2073 |
-
$query['select'] .= ", '' as PID";
|
2074 |
-
}
|
2075 |
-
$query['select'] .= ", term_relationships.term_taxonomy_id as term_count_id";
|
2076 |
$query['from'] = "FROM {$wpdb->posts}";
|
2077 |
$query['join'] = "
|
2078 |
INNER JOIN {$wpdb->term_relationships} AS term_relationships ON {$wpdb->posts}.ID = term_relationships.object_id
|
|
|
|
|
2079 |
" . $tax_query_sql['join'] . $meta_query_sql['join'];
|
2080 |
$query['where'] = "
|
2081 |
WHERE {$wpdb->posts}.post_type IN ( 'product' )
|
2082 |
AND " . br_select_post_status() . "
|
2083 |
" . $tax_query_sql['where'] . $meta_query_sql['where'] . "
|
2084 |
-
AND
|
2085 |
";
|
2086 |
if( defined( 'WCML_VERSION' ) && defined('ICL_LANGUAGE_CODE') ) {
|
2087 |
$query['join'] = $query['join']." INNER JOIN {$wpdb->prefix}icl_translations as wpml_lang ON ( {$wpdb->posts}.ID = wpml_lang.element_id )";
|
@@ -2091,9 +2057,13 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
2091 |
if( ! empty($post__in) ) {
|
2092 |
$query['where'] .= " AND {$wpdb->posts}.ID IN (\"" . implode('","', $post__in) . "\")";
|
2093 |
}
|
|
|
|
|
|
|
|
|
2094 |
|
2095 |
$query['where'] .= $old_join_posts;
|
2096 |
-
$query['group_by'] = "GROUP BY
|
2097 |
if( ! empty($br_options['out_of_stock_variable_reload']) ) {
|
2098 |
$new_post_terms = berocket_isset($_POST['terms']);
|
2099 |
$new_post_limits = berocket_isset($_POST['limits_arr']);
|
@@ -2120,13 +2090,13 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
2120 |
$limit_post__term_id_without_product = array();
|
2121 |
foreach($limit_post__not_in as $terms_id => $limit_post) {
|
2122 |
if( is_array($limit_post) && count($limit_post) ) {
|
2123 |
-
$limit_post__not_in_where_array[$terms_id] = "({$wpdb->posts}.ID NOT IN (\"" . implode('","', $limit_post) . "\") AND
|
2124 |
} else {
|
2125 |
$limit_post__term_id_without_product[] = $terms_id;
|
2126 |
}
|
2127 |
}
|
2128 |
if( count($limit_post__term_id_without_product) ) {
|
2129 |
-
$limit_post__not_in_where_array[] = "(
|
2130 |
}
|
2131 |
$limit_post__not_in_where = implode(' OR ', $limit_post__not_in_where_array);
|
2132 |
}
|
@@ -2139,7 +2109,6 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
2139 |
}
|
2140 |
}
|
2141 |
$query = apply_filters( 'woocommerce_get_filtered_term_product_counts_query', $query );
|
2142 |
-
$query = apply_filters( 'berocket_posts_clauses_recount', $query );
|
2143 |
|
2144 |
$wpdb->query( 'SET SESSION group_concat_max_len = 1000000' );
|
2145 |
if( ! empty($br_options['out_of_stock_variable_reload']) && ! empty($br_options['out_of_stock_variable_single']) ) {
|
@@ -2164,10 +2133,6 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
2164 |
$term_recount_log['query_2'] = $query;
|
2165 |
}
|
2166 |
$results = $wpdb->get_results( $query );
|
2167 |
-
$term_to_taxonomy = wp_list_pluck( $re, 'term_id', 'term_taxonomy_id' );
|
2168 |
-
foreach($results as &$results_convert) {
|
2169 |
-
$results_convert->term_count_id = $term_to_taxonomy[$results_convert->term_count_id];
|
2170 |
-
}
|
2171 |
$results_pid = wp_list_pluck( $results, 'PID', 'term_count_id' );
|
2172 |
$results = wp_list_pluck( $results, 'term_count', 'term_count_id' );
|
2173 |
}
|
@@ -2512,17 +2477,14 @@ if( BeRocket_AAPF::$debug_mode ) {
|
|
2512 |
break;
|
2513 |
}
|
2514 |
|
2515 |
-
|
2516 |
-
|
2517 |
-
$
|
2518 |
-
|
2519 |
-
|
2520 |
-
if ( ! empty($term->child) ) {
|
2521 |
-
self::sort_terms( $term->child, $sort_data );
|
2522 |
-
}
|
2523 |
}
|
2524 |
-
@ array_multisort( $sort_array, $sort_data['order_values_type'], SORT_NUMERIC, $terms );
|
2525 |
}
|
|
|
2526 |
}
|
2527 |
$sort_array = self::sort_child_parent_hierarchy($terms);
|
2528 |
@ array_multisort( $sort_array, SORT_DESC, SORT_NUMERIC, $terms );
|
572 |
if ( $attribute == 'price' ) {
|
573 |
if ( ! empty($price_values) ) {
|
574 |
$price_range = explode( ",", $price_values );
|
|
|
|
|
575 |
} else {
|
576 |
$price_range = br_get_cache( 'price_range', $wp_check_product_cat );
|
577 |
if ( $price_range === false ) {
|
764 |
$terms = self::get_terms_child_parent ( $child_parent, $custom_taxonomy, FALSE, ( isset($child_parent_depth) ? $child_parent_depth : 0 ) );
|
765 |
$terms = BeRocket_AAPF_Widget::get_attribute_values( $custom_taxonomy, 'id', ( empty($br_options['show_all_values']) ), ( ! empty($br_options['recount_products']) ), $terms, ( isset($cat_value_limit) ? $cat_value_limit : null ), $operator );
|
766 |
}
|
|
|
|
|
|
|
767 |
if ( $order_values_by != 'Default' || in_array($custom_taxonomy, array('berocket_brand', 'product_cat')) ) {
|
768 |
self::sort_terms( $terms, array(
|
769 |
"order_values_by" => $order_values_by,
|
771 |
"order_values_type"=> (empty($order_values_type) || $order_values_type == 'asc' ? SORT_ASC : SORT_DESC)
|
772 |
) );
|
773 |
}
|
774 |
+
if( $custom_taxonomy == 'product_cat' ) {
|
775 |
+
$terms = BeRocket_AAPF_Widget::get_attribute_values( $custom_taxonomy, 'id', ( empty($br_options['show_all_values']) ), ( ! empty($br_options['recount_products']) ), $terms, ( isset($cat_value_limit) ? $cat_value_limit : null ), $operator );
|
776 |
+
}
|
777 |
if ( ! br_is_filtered() && $child_parent != 'parent' && $child_parent != 'child' ) {
|
778 |
br_set_cache( $custom_taxonomy . $order_values_by, $terms, $filter_type . $wp_check_product_cat, BeRocket_AJAX_cache_expire );
|
779 |
}
|
858 |
$set_query_var_title['widget_id'] = ( $this->id ? $this->id : $widget_id );
|
859 |
$set_query_var_title['widget_id_number'] = ( $this->number ? $this->number : $widget_id_number );
|
860 |
$set_query_var_title['slug_urls'] = ! empty($br_options['slug_urls']);
|
|
|
861 |
set_query_var( 'berocket_query_var_title', $set_query_var_title );
|
862 |
|
863 |
// widget title and start tag ( <ul> ) can be found in templates/widget_start.php
|
991 |
$max = count( $all_terms_name ) - 1;
|
992 |
if( ! empty($stringed_is_numeric) ) {
|
993 |
array_multisort( $all_terms_slug, SORT_NUMERIC, $all_terms_slug, $all_terms_name );
|
994 |
+
} else {
|
995 |
+
//array_multisort( $all_terms_name, $all_terms_name, $all_terms_slug );
|
996 |
}
|
997 |
}
|
998 |
$widget_error_log['all_terms_slug'] = (isset($all_terms_slug) ? $all_terms_slug : null);
|
1240 |
public static function get_price_range( $wp_query_product_cat, $product_cat = null ) {
|
1241 |
global $wpdb;
|
1242 |
|
1243 |
+
$query[ 'select' ] = "SELECT MIN(cast(FLOOR(wp_price_check.meta_value) as decimal)) as min_price,
|
1244 |
+
MAX(cast(CEIL(wp_price_check.meta_value) as decimal)) as max_price ";
|
1245 |
+
$query[ 'from' ] = "FROM {$wpdb->postmeta} as wp_price_check";
|
1246 |
+
$query[ 'join' ] = "INNER JOIN {$wpdb->posts} ON ({$wpdb->posts}.ID = wp_price_check.post_id)";
|
1247 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1248 |
if ( ! empty( $br_options[ 'show_all_values' ] ) ) {
|
1249 |
$query[ 'where' ] = " WHERE {$wpdb->posts}.post_type = 'product' AND " . br_select_post_status();
|
1250 |
} else {
|
1251 |
$query = br_filters_query( $query, 'price', $product_cat );
|
1252 |
}
|
1253 |
|
1254 |
+
if ( $query[ 'where' ] ) {
|
1255 |
+
$query[ 'where' ] .= "AND ";
|
1256 |
+
} else {
|
1257 |
+
$query[ 'where' ] = " WHERE ";
|
|
|
|
|
|
|
1258 |
}
|
1259 |
|
1260 |
+
$query[ 'where' ] .= "wp_price_check.meta_key = '".apply_filters('berocket_price_filter_meta_key', '_price', 'widget_1243')."' AND wp_price_check.meta_value > ''";
|
1261 |
+
|
1262 |
$query_string = implode( ' ', $query );
|
1263 |
|
1264 |
$query_string = $wpdb->get_row( $query_string );
|
1382 |
}
|
1383 |
}
|
1384 |
$queried_object = $wp_query->get_queried_object_id();
|
1385 |
+
if( ! empty($queried_object) ) {
|
1386 |
$query_object = $wp_query->get_queried_object();
|
1387 |
if( ! empty($query_object->taxonomy) && ! empty($query_object->slug) ) {
|
1388 |
$tax_query[ $query_object->taxonomy ] = array(
|
1507 |
}
|
1508 |
}
|
1509 |
$queried_object = $wp_query->get_queried_object_id();
|
1510 |
+
if( ! empty($queried_object) ) {
|
1511 |
$query_object = $wp_query->get_queried_object();
|
1512 |
if( ! empty($query_object->taxonomy) && ! empty($query_object->slug) ) {
|
1513 |
$tax_query[ $query_object->taxonomy ] = array(
|
1559 |
$query['where'] .= $old_join_posts;
|
1560 |
}
|
1561 |
$query = apply_filters( 'woocommerce_get_filtered_term_product_counts_query', $query );
|
|
|
1562 |
$on_sale = array_merge( array( 0 ), wc_get_product_ids_on_sale() );
|
1563 |
$not_on_sale = $on_sale;
|
1564 |
$query_sale = $query;
|
1704 |
);
|
1705 |
}
|
1706 |
$queried_object = $wp_query->get_queried_object_id();
|
1707 |
+
if( ! empty($queried_object) ) {
|
1708 |
$query_object = $wp_query->get_queried_object();
|
1709 |
if( ! empty($query_object->taxonomy) && ! empty($query_object->slug) ) {
|
1710 |
$tax_query[ $query_object->taxonomy ] = array(
|
1721 |
$tax_query_sql = $tax_query->get_sql( $wpdb->posts, 'ID' );
|
1722 |
unset($tax_query);
|
1723 |
if( ! empty($re) && ! is_wp_error($re) ) {
|
1724 |
+
$term_ids = wp_list_pluck( $re, 'term_id' );
|
1725 |
}
|
1726 |
if( empty($term_ids) || ! is_array($term_ids) || ! count($term_ids) ) {
|
1727 |
$terms = array();
|
1730 |
|
1731 |
// Generate query
|
1732 |
$query = array();
|
1733 |
+
$query['select'] = "SELECT COUNT( DISTINCT {$wpdb->posts}.ID ) as term_count, GROUP_CONCAT({$wpdb->posts}.ID SEPARATOR ',') as PID, terms.term_id as term_count_id";
|
|
|
|
|
|
|
|
|
|
|
|
|
1734 |
$query['from'] = "FROM {$wpdb->posts}";
|
1735 |
$query['join'] = "
|
1736 |
INNER JOIN {$wpdb->term_relationships} AS term_relationships ON {$wpdb->posts}.ID = term_relationships.object_id
|
1737 |
+
INNER JOIN {$wpdb->term_taxonomy} AS term_taxonomy USING( term_taxonomy_id )
|
1738 |
+
INNER JOIN {$wpdb->terms} AS terms USING( term_id )
|
1739 |
" . $tax_query_sql['join'] . $meta_query_sql['join'];
|
1740 |
$query['where'] = "
|
1741 |
WHERE {$wpdb->posts}.post_type IN ( 'product' )
|
1742 |
AND " . br_select_post_status() . "
|
1743 |
" . $tax_query_sql['where'] . $meta_query_sql['where'] . "
|
1744 |
+
AND terms.term_id IN (" . implode( ',', array_map( 'absint', $term_ids ) ) . ")
|
1745 |
";
|
1746 |
|
1747 |
br_where_search( $query );
|
1749 |
$query['join'] = $query['join']." INNER JOIN {$wpdb->prefix}icl_translations as wpml_lang ON ( {$wpdb->posts}.ID = wpml_lang.element_id )";
|
1750 |
$query['where'] = $query['where']." AND wpml_lang.language_code = '".ICL_LANGUAGE_CODE."' AND wpml_lang.element_type = 'post_product'";
|
1751 |
}
|
1752 |
+
$query['group_by'] = "GROUP BY terms.term_id";
|
1753 |
$query = apply_filters( 'woocommerce_get_filtered_term_product_counts_query', $query );
|
|
|
1754 |
$query = implode( ' ', $query );
|
1755 |
if( BeRocket_AAPF::$debug_mode ) {
|
1756 |
$term_recount_log['query_1'] = $query;
|
1757 |
}
|
|
|
1758 |
$results = $wpdb->get_results( $query );
|
|
|
|
|
|
|
|
|
1759 |
$results_pid = wp_list_pluck( $results, 'PID', 'term_count_id' );
|
1760 |
$results = wp_list_pluck( $results, 'term_count', 'term_count_id' );
|
1761 |
$term_count = array();
|
1800 |
}
|
1801 |
}
|
1802 |
|
1803 |
+
$cache_result = array('terms' => $terms, 'term_count' => $term_count, 'results_pid' => $results_pid);
|
1804 |
br_set_cache ( $cache_name, $cache_result, 'get_attribute_values_hide_empty', BeRocket_AJAX_cache_expire );
|
1805 |
} else {
|
1806 |
$terms = array();
|
1869 |
$terms2 = $input_terms;
|
1870 |
unset( $input_terms );
|
1871 |
}
|
1872 |
+
if( $input_terms !== FALSE && is_array($input_terms) && is_array($re) ) {
|
1873 |
$re2 = array();
|
1874 |
$is_child = false;
|
1875 |
foreach($re as $re_id => $re_term) {
|
1972 |
}
|
1973 |
}
|
1974 |
|
1975 |
+
if ( $count_filtering ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
1976 |
if ( class_exists('WP_Meta_Query') && class_exists('WP_Tax_Query') ) {
|
1977 |
if ( $has_new_function ) {
|
1978 |
$tax_query = WC_Query::get_main_tax_query();
|
2009 |
}
|
2010 |
|
2011 |
$queried_object = $wp_query->get_queried_object_id();
|
2012 |
+
if ( ! empty($queried_object) ) {
|
2013 |
$query_object = $wp_query->get_queried_object();
|
2014 |
if ( ! empty($query_object->taxonomy) && ! empty($query_object->slug) ) {
|
2015 |
$tax_query[ $query_object->taxonomy ] = array(
|
2032 |
$meta_query_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
|
2033 |
$tax_query_sql = $tax_query->get_sql( $wpdb->posts, 'ID' );
|
2034 |
if( ! empty($re) && count($re)) {
|
2035 |
+
$term_ids = wp_list_pluck( $re, 'term_id' );
|
2036 |
|
2037 |
// Generate query
|
2038 |
$query = array();
|
2039 |
+
$query['select'] = "SELECT COUNT( DISTINCT {$wpdb->posts}.ID ) as term_count, GROUP_CONCAT(DISTINCT {$wpdb->posts}.ID SEPARATOR ',') as PID, terms.term_id as term_count_id";
|
|
|
|
|
|
|
|
|
|
|
|
|
2040 |
$query['from'] = "FROM {$wpdb->posts}";
|
2041 |
$query['join'] = "
|
2042 |
INNER JOIN {$wpdb->term_relationships} AS term_relationships ON {$wpdb->posts}.ID = term_relationships.object_id
|
2043 |
+
INNER JOIN {$wpdb->term_taxonomy} AS term_taxonomy USING( term_taxonomy_id )
|
2044 |
+
INNER JOIN {$wpdb->terms} AS terms USING( term_id )
|
2045 |
" . $tax_query_sql['join'] . $meta_query_sql['join'];
|
2046 |
$query['where'] = "
|
2047 |
WHERE {$wpdb->posts}.post_type IN ( 'product' )
|
2048 |
AND " . br_select_post_status() . "
|
2049 |
" . $tax_query_sql['where'] . $meta_query_sql['where'] . "
|
2050 |
+
AND terms.term_id IN (" . implode( ',', array_map( 'absint', $term_ids ) ) . ")
|
2051 |
";
|
2052 |
if( defined( 'WCML_VERSION' ) && defined('ICL_LANGUAGE_CODE') ) {
|
2053 |
$query['join'] = $query['join']." INNER JOIN {$wpdb->prefix}icl_translations as wpml_lang ON ( {$wpdb->posts}.ID = wpml_lang.element_id )";
|
2057 |
if( ! empty($post__in) ) {
|
2058 |
$query['where'] .= " AND {$wpdb->posts}.ID IN (\"" . implode('","', $post__in) . "\")";
|
2059 |
}
|
2060 |
+
if( function_exists('wc_get_product_visibility_term_ids') ) {
|
2061 |
+
$product_visibility_term_ids = wc_get_product_visibility_term_ids();
|
2062 |
+
$query['where'] .= " AND {$wpdb->posts}.ID NOT IN (\"SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id='" . $product_visibility_term_ids['exclude-from-catalog'] . "'\")";
|
2063 |
+
}
|
2064 |
|
2065 |
$query['where'] .= $old_join_posts;
|
2066 |
+
$query['group_by'] = "GROUP BY terms.term_id";
|
2067 |
if( ! empty($br_options['out_of_stock_variable_reload']) ) {
|
2068 |
$new_post_terms = berocket_isset($_POST['terms']);
|
2069 |
$new_post_limits = berocket_isset($_POST['limits_arr']);
|
2090 |
$limit_post__term_id_without_product = array();
|
2091 |
foreach($limit_post__not_in as $terms_id => $limit_post) {
|
2092 |
if( is_array($limit_post) && count($limit_post) ) {
|
2093 |
+
$limit_post__not_in_where_array[$terms_id] = "({$wpdb->posts}.ID NOT IN (\"" . implode('","', $limit_post) . "\") AND terms.term_id = {$terms_id})";
|
2094 |
} else {
|
2095 |
$limit_post__term_id_without_product[] = $terms_id;
|
2096 |
}
|
2097 |
}
|
2098 |
if( count($limit_post__term_id_without_product) ) {
|
2099 |
+
$limit_post__not_in_where_array[] = "(terms.term_id IN (".implode(', ', $limit_post__term_id_without_product)."))";
|
2100 |
}
|
2101 |
$limit_post__not_in_where = implode(' OR ', $limit_post__not_in_where_array);
|
2102 |
}
|
2109 |
}
|
2110 |
}
|
2111 |
$query = apply_filters( 'woocommerce_get_filtered_term_product_counts_query', $query );
|
|
|
2112 |
|
2113 |
$wpdb->query( 'SET SESSION group_concat_max_len = 1000000' );
|
2114 |
if( ! empty($br_options['out_of_stock_variable_reload']) && ! empty($br_options['out_of_stock_variable_single']) ) {
|
2133 |
$term_recount_log['query_2'] = $query;
|
2134 |
}
|
2135 |
$results = $wpdb->get_results( $query );
|
|
|
|
|
|
|
|
|
2136 |
$results_pid = wp_list_pluck( $results, 'PID', 'term_count_id' );
|
2137 |
$results = wp_list_pluck( $results, 'term_count', 'term_count_id' );
|
2138 |
}
|
2477 |
break;
|
2478 |
}
|
2479 |
|
2480 |
+
$terms2 = get_terms( $terms[0]->taxonomy, $get_terms_args );
|
2481 |
+
foreach ( $terms as $term ) {
|
2482 |
+
$sort_array[] = array_search($term->term_id, $terms2);
|
2483 |
+
if ( ! empty($term->child) ) {
|
2484 |
+
self::sort_terms( $term->child, $sort_data );
|
|
|
|
|
|
|
2485 |
}
|
|
|
2486 |
}
|
2487 |
+
@ array_multisort( $sort_array, $sort_data['order_values_type'], SORT_NUMERIC, $terms );
|
2488 |
}
|
2489 |
$sort_array = self::sort_child_parent_hierarchy($terms);
|
2490 |
@ array_multisort( $sort_array, SORT_DESC, SORT_NUMERIC, $terms );
|
js/admin.js
CHANGED
@@ -330,8 +330,6 @@ var berocket_admin_filter_types_by_attr = {
|
|
330 |
&& filter_type != 'product_cat'
|
331 |
&& filter_type != 'tag' )
|
332 |
|| type != 'select' ) );
|
333 |
-
berocket_aapf_show_hide( $('.br_aapf_date_style_select', $parent),
|
334 |
-
( filter_type != 'date' ) );
|
335 |
if ( type == 'color' || type == 'image' ) {
|
336 |
var tax_color_name;
|
337 |
if ( filter_type == 'attribute' ) {
|
330 |
&& filter_type != 'product_cat'
|
331 |
&& filter_type != 'tag' )
|
332 |
|| type != 'select' ) );
|
|
|
|
|
333 |
if ( type == 'color' || type == 'image' ) {
|
334 |
var tax_color_name;
|
335 |
if ( filter_type == 'attribute' ) {
|
js/themes/the7.js
CHANGED
@@ -52,7 +52,3 @@ function fixWooOrdering() {
|
|
52 |
jQuery(this).customSelect();
|
53 |
});
|
54 |
}
|
55 |
-
jQuery(document).on('berocket_ajax_products_loaded berocket_lmp_end', function() {
|
56 |
-
fixWooIsotope();
|
57 |
-
fixWooOrdering();
|
58 |
-
});
|
52 |
jQuery(this).customSelect();
|
53 |
});
|
54 |
}
|
|
|
|
|
|
|
|
js/widget.min.js
CHANGED
@@ -25,29 +25,16 @@ var berocket_aapf_widget_product_filters = [],
|
|
25 |
$(document).on('change', '.br_date_filter', function() {
|
26 |
var $berocket_aapf_widget = $(this).parents('.berocket_aapf_widget');
|
27 |
var $date_info = $berocket_aapf_widget.find('.berocket_date_picker');
|
28 |
-
var value =
|
29 |
value = value.replace(/\//g, '');
|
30 |
if( $(this).is('.br_start_date')) {
|
31 |
-
$date_info.data('value_1',
|
32 |
$date_info.data('value1', value);
|
33 |
} else {
|
34 |
-
$date_info.data('value_2',
|
35 |
$date_info.data('value2', value);
|
36 |
}
|
37 |
});
|
38 |
-
function berocket_convert_date_to_date_picker(date) {
|
39 |
-
var mm = date.getMonth();
|
40 |
-
mm++;
|
41 |
-
if( mm < 10 ) {
|
42 |
-
mm = '0'+mm;
|
43 |
-
}
|
44 |
-
var dd = date.getDate();
|
45 |
-
if( dd < 10 ) {
|
46 |
-
dd = '0'+dd;
|
47 |
-
}
|
48 |
-
var yy = date.getFullYear();
|
49 |
-
return mm+'/'+dd+'/'+yy;
|
50 |
-
}
|
51 |
if( $(the_ajax_script.products_holder_id).is('.wf-container') ) {
|
52 |
berocket_replace_only_html = true;
|
53 |
}
|
@@ -609,10 +596,10 @@ var berocket_aapf_widget_product_filters = [],
|
|
609 |
is_product_table = true;
|
610 |
}
|
611 |
}
|
612 |
-
$('.hide_products').removeClass('hide_products');
|
613 |
if( is_product_table ) {
|
614 |
$data = $(data);
|
615 |
berocket_aapf_attribute_data.jquery = $data;
|
|
|
616 |
} else {
|
617 |
if( the_ajax_script.ajax_request_load && the_ajax_script.ajax_request_load_style == 'jquery' ) {
|
618 |
$data = $(data);
|
@@ -628,22 +615,7 @@ var berocket_aapf_widget_product_filters = [],
|
|
628 |
args_ajax.no_products = the_ajax_script.no_products;
|
629 |
}
|
630 |
} else {
|
631 |
-
|
632 |
-
if( $data.find(the_ajax_script.products_holder_id).length > 1 ) {
|
633 |
-
$data.find(the_ajax_script.products_holder_id).each(function () {
|
634 |
-
if( $(this).is('.berocket_aapf_true') || $(this).parents('.berocket_aapf_true').length || $(this).find('.berocket_aapf_true').length ) {
|
635 |
-
$block_products_holder_id = $(this);
|
636 |
-
return false;
|
637 |
-
}
|
638 |
-
if( typeof($block_products_holder_id) == 'undefined' && ! $(this).is('.berocket_aapf_false') && $(this).parents('.berocket_aapf_false').length && $(this).find('.berocket_aapf_false').length ) {
|
639 |
-
$block_products_holder_id = $(this);
|
640 |
-
}
|
641 |
-
});
|
642 |
-
}
|
643 |
-
if( typeof($block_products_holder_id) == 'undefined' ) {
|
644 |
-
$block_products_holder_id = $data.find(the_ajax_script.products_holder_id);
|
645 |
-
}
|
646 |
-
args_ajax.products = $block_products_holder_id.prop('outerHTML');
|
647 |
}
|
648 |
result = afterAjaxLoad(args_ajax);
|
649 |
berocket_aapf_attribute_data.jquery = $data;
|
@@ -741,8 +713,6 @@ var berocket_aapf_widget_product_filters = [],
|
|
741 |
}
|
742 |
}
|
743 |
// call user func on_update
|
744 |
-
|
745 |
-
$(document).trigger('berocket_ajax_filtering_on_update');
|
746 |
if( the_ajax_script.user_func != null )
|
747 |
berocket_fire( the_ajax_script.user_func.on_update );
|
748 |
|
@@ -755,43 +725,28 @@ var berocket_aapf_widget_product_filters = [],
|
|
755 |
}
|
756 |
}
|
757 |
} else {
|
758 |
-
var $block_products_holder_id;
|
759 |
-
if( $(the_ajax_script.products_holder_id).length > 1 ) {
|
760 |
-
$(the_ajax_script.products_holder_id).each(function () {
|
761 |
-
if( $(this).is('.berocket_aapf_true') || $(this).parents('.berocket_aapf_true').length || $(this).find('.berocket_aapf_true').length ) {
|
762 |
-
$block_products_holder_id = $(this);
|
763 |
-
return false;
|
764 |
-
}
|
765 |
-
if( typeof($block_products_holder_id) == 'undefined' && ! $(this).is('.berocket_aapf_false') && $(this).parents('.berocket_aapf_false').length && $(this).find('.berocket_aapf_false').length ) {
|
766 |
-
$block_products_holder_id = $(this);
|
767 |
-
}
|
768 |
-
});
|
769 |
-
}
|
770 |
-
if( typeof($block_products_holder_id) == 'undefined' ) {
|
771 |
-
$block_products_holder_id = $(the_ajax_script.products_holder_id);
|
772 |
-
}
|
773 |
if ( typeof args.no_products != 'undefined' ) {
|
774 |
if( berocket_child_no_products ) {
|
775 |
args.no_products = berocket_child_no_products;
|
776 |
}
|
777 |
-
if ( $
|
778 |
-
$
|
779 |
} else if ( $('div.woocommerce').length > 0 ) {
|
780 |
$('div.woocommerce').html(args.no_products);
|
781 |
}
|
782 |
} else {
|
783 |
var $products = $(args.products);
|
784 |
if ( $products.length > 0 ) {
|
785 |
-
if ( $
|
786 |
if( berocket_replace_only_html ) {
|
787 |
-
$
|
788 |
-
if( typeof($
|
789 |
-
$
|
790 |
-
$
|
791 |
}
|
792 |
-
|
793 |
} else {
|
794 |
-
$
|
795 |
}
|
796 |
} else {
|
797 |
if ( $('div.woocommerce').length > 0 ) {
|
@@ -800,14 +755,14 @@ var berocket_aapf_widget_product_filters = [],
|
|
800 |
}
|
801 |
} else {
|
802 |
if ( $products.find(the_ajax_script.products_holder_id).length > 0 ) {
|
803 |
-
if ( $
|
804 |
-
$
|
805 |
} else if ( $('div.woocommerce').length > 0 ) {
|
806 |
$('div.woocommerce').html($products.find(the_ajax_script.products_holder_id).prop('outerHTML'));
|
807 |
}
|
808 |
} else {
|
809 |
-
if ( $
|
810 |
-
$
|
811 |
} else if ( $('div.woocommerce').length > 0 ) {
|
812 |
$('div.woocommerce').html('');
|
813 |
}
|
@@ -1692,8 +1647,8 @@ var berocket_aapf_widget_product_filters = [],
|
|
1692 |
} else if ( el_type == 'slider' ) {
|
1693 |
$slider = $('#'+el_id).closest('li').find('.berocket_filter_slider');
|
1694 |
|
1695 |
-
|
1696 |
-
|
1697 |
|
1698 |
ui = {handle:$slider.children(), values:[val1,val2]};
|
1699 |
$slider.slider( "values", [ val1, val2 ] ).trigger('slide', ui);
|
@@ -1702,8 +1657,8 @@ var berocket_aapf_widget_product_filters = [],
|
|
1702 |
} else if ( el_type == '_date' ) {
|
1703 |
$date = $('.'+el_id+'.berocket_date_picker');
|
1704 |
|
1705 |
-
|
1706 |
-
|
1707 |
|
1708 |
berocket_unselect_all = true;
|
1709 |
$('.'+el_id+'.br_start_date').val(val1).trigger('change');
|
@@ -2221,9 +2176,6 @@ load_hash_test();
|
|
2221 |
$element = $('.berocket_single_filter_widget.berocket_inline_filters:not(".berocket_inline_filters_rewidth")').first();
|
2222 |
width_to_set = '12.5%!important';
|
2223 |
$style = $element.attr('style');
|
2224 |
-
if( typeof($style) == 'undefined' ) {
|
2225 |
-
$style = '';
|
2226 |
-
}
|
2227 |
$style = $style.replace(/width:\s?(\d|\.)+%!important;/g, '');
|
2228 |
$style = $style.replace(/clear:both!important;/g, '');
|
2229 |
$style = $style.replace(/opacity:0!important;/g, '');
|
25 |
$(document).on('change', '.br_date_filter', function() {
|
26 |
var $berocket_aapf_widget = $(this).parents('.berocket_aapf_widget');
|
27 |
var $date_info = $berocket_aapf_widget.find('.berocket_date_picker');
|
28 |
+
var value = $(this).val();
|
29 |
value = value.replace(/\//g, '');
|
30 |
if( $(this).is('.br_start_date')) {
|
31 |
+
$date_info.data('value_1', $(this).val());
|
32 |
$date_info.data('value1', value);
|
33 |
} else {
|
34 |
+
$date_info.data('value_2', $(this).val());
|
35 |
$date_info.data('value2', value);
|
36 |
}
|
37 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
if( $(the_ajax_script.products_holder_id).is('.wf-container') ) {
|
39 |
berocket_replace_only_html = true;
|
40 |
}
|
596 |
is_product_table = true;
|
597 |
}
|
598 |
}
|
|
|
599 |
if( is_product_table ) {
|
600 |
$data = $(data);
|
601 |
berocket_aapf_attribute_data.jquery = $data;
|
602 |
+
$('.hide_products').removeClass('hide_products');
|
603 |
} else {
|
604 |
if( the_ajax_script.ajax_request_load && the_ajax_script.ajax_request_load_style == 'jquery' ) {
|
605 |
$data = $(data);
|
615 |
args_ajax.no_products = the_ajax_script.no_products;
|
616 |
}
|
617 |
} else {
|
618 |
+
args_ajax.products = $data.find(the_ajax_script.products_holder_id).prop('outerHTML');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
619 |
}
|
620 |
result = afterAjaxLoad(args_ajax);
|
621 |
berocket_aapf_attribute_data.jquery = $data;
|
713 |
}
|
714 |
}
|
715 |
// call user func on_update
|
|
|
|
|
716 |
if( the_ajax_script.user_func != null )
|
717 |
berocket_fire( the_ajax_script.user_func.on_update );
|
718 |
|
725 |
}
|
726 |
}
|
727 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
728 |
if ( typeof args.no_products != 'undefined' ) {
|
729 |
if( berocket_child_no_products ) {
|
730 |
args.no_products = berocket_child_no_products;
|
731 |
}
|
732 |
+
if ( $(the_ajax_script.products_holder_id).length > 0 ) {
|
733 |
+
$(the_ajax_script.products_holder_id).html(args.no_products).removeClass('hide_products');
|
734 |
} else if ( $('div.woocommerce').length > 0 ) {
|
735 |
$('div.woocommerce').html(args.no_products);
|
736 |
}
|
737 |
} else {
|
738 |
var $products = $(args.products);
|
739 |
if ( $products.length > 0 ) {
|
740 |
+
if ( $(the_ajax_script.products_holder_id).length > 0 ) {
|
741 |
if( berocket_replace_only_html ) {
|
742 |
+
$(the_ajax_script.products_holder_id).removeClass('hide_products').html($products.html());
|
743 |
+
if( typeof($(the_ajax_script.products_holder_id).isotope) == 'function' ) {
|
744 |
+
$(the_ajax_script.products_holder_id).isotope( 'reloadItems' );
|
745 |
+
$(the_ajax_script.products_holder_id).isotope();
|
746 |
}
|
747 |
+
$(the_ajax_script.products_holder_id).find('*').filter(function() {return $(this).css('opacity') == '0';}).css('opacity', 1);
|
748 |
} else {
|
749 |
+
$(the_ajax_script.products_holder_id).replaceWith($products);
|
750 |
}
|
751 |
} else {
|
752 |
if ( $('div.woocommerce').length > 0 ) {
|
755 |
}
|
756 |
} else {
|
757 |
if ( $products.find(the_ajax_script.products_holder_id).length > 0 ) {
|
758 |
+
if ( $(the_ajax_script.products_holder_id).length > 0 ) {
|
759 |
+
$(the_ajax_script.products_holder_id).html($products.find(the_ajax_script.products_holder_id).html()).removeClass('hide_products');
|
760 |
} else if ( $('div.woocommerce').length > 0 ) {
|
761 |
$('div.woocommerce').html($products.find(the_ajax_script.products_holder_id).prop('outerHTML'));
|
762 |
}
|
763 |
} else {
|
764 |
+
if ( $(the_ajax_script.products_holder_id).length > 0 ) {
|
765 |
+
$(the_ajax_script.products_holder_id).html('').removeClass('hide_products');
|
766 |
} else if ( $('div.woocommerce').length > 0 ) {
|
767 |
$('div.woocommerce').html('');
|
768 |
}
|
1647 |
} else if ( el_type == 'slider' ) {
|
1648 |
$slider = $('#'+el_id).closest('li').find('.berocket_filter_slider');
|
1649 |
|
1650 |
+
val1 = parseFloat($slider.data('min'));
|
1651 |
+
val2 = parseFloat($slider.data('max'));
|
1652 |
|
1653 |
ui = {handle:$slider.children(), values:[val1,val2]};
|
1654 |
$slider.slider( "values", [ val1, val2 ] ).trigger('slide', ui);
|
1657 |
} else if ( el_type == '_date' ) {
|
1658 |
$date = $('.'+el_id+'.berocket_date_picker');
|
1659 |
|
1660 |
+
val1 = $date.data('min');
|
1661 |
+
val2 = $date.data('max');
|
1662 |
|
1663 |
berocket_unselect_all = true;
|
1664 |
$('.'+el_id+'.br_start_date').val(val1).trigger('change');
|
2176 |
$element = $('.berocket_single_filter_widget.berocket_inline_filters:not(".berocket_inline_filters_rewidth")').first();
|
2177 |
width_to_set = '12.5%!important';
|
2178 |
$style = $element.attr('style');
|
|
|
|
|
|
|
2179 |
$style = $style.replace(/width:\s?(\d|\.)+%!important;/g, '');
|
2180 |
$style = $style.replace(/clear:both!important;/g, '');
|
2181 |
$style = $style.replace(/opacity:0!important;/g, '');
|
main.php
CHANGED
@@ -268,11 +268,6 @@ class BeRocket_AAPF extends BeRocket_Framework {
|
|
268 |
add_filter( 'plugin_action_links_' . $plugin_base_slug, array( $this, 'plugin_action_links' ) );
|
269 |
add_filter( 'berocket_aapf_widget_terms', array($this, 'wpml_attribute_slug_translate'));
|
270 |
add_filter ( 'BeRocket_updater_menu_order_custom_post', array($this, 'menu_order_custom_post') );
|
271 |
-
if( br_woocommerce_version_check('3.6') ) {
|
272 |
-
//TEST FUNCTIONS
|
273 |
-
add_filter( 'posts_clauses', array( $this, 'price_filter_post_clauses' ), 10, 2 );
|
274 |
-
add_filter( 'berocket_posts_clauses_recount', array( $this, 'add_price_to_post_clauses' ), 10, 1 );
|
275 |
-
}
|
276 |
} else {
|
277 |
if( is_plugin_active( 'woocommerce/woocommerce.php' ) || is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) {
|
278 |
add_action( 'admin_notices', array( $this, 'update_woocommerce' ) );
|
@@ -1254,20 +1249,6 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1254 |
add_filter( 'pre_get_posts', array( $this, 'apply_user_price' ) );
|
1255 |
add_filter( 'pre_get_posts', array( $this, 'apply_user_filters' ), 900000 );
|
1256 |
add_filter( 'woocommerce_shortcode_products_query', array( $this, 'woocommerce_shortcode_products_query' ), 10, 3 );
|
1257 |
-
$shortcode_types = array(
|
1258 |
-
'products',
|
1259 |
-
'product',
|
1260 |
-
'sale_products',
|
1261 |
-
'recent_products',
|
1262 |
-
'best_selling_products',
|
1263 |
-
'top_rated_products',
|
1264 |
-
'featured_products',
|
1265 |
-
'product_attribute',
|
1266 |
-
'product_category',
|
1267 |
-
);
|
1268 |
-
foreach($shortcode_types as $shortcode_type) {
|
1269 |
-
add_action( "woocommerce_shortcode_{$shortcode_type}_loop_no_results", array( $this, 'woocommerce_shortcode_no_result' ), 10, 1 );
|
1270 |
-
}
|
1271 |
add_filter( 'shortcode_atts_sale_products', array($this, 'shortcode_atts_products'), 10, 3);
|
1272 |
add_filter( 'shortcode_atts_featured_products', array($this, 'shortcode_atts_products'), 10, 3);
|
1273 |
add_filter( 'shortcode_atts_best_selling_products', array($this, 'shortcode_atts_products'), 10, 3);
|
@@ -1277,16 +1258,8 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1277 |
add_filter( 'shortcode_atts_products', array($this, 'shortcode_atts_products'), 10, 3);
|
1278 |
}
|
1279 |
function shortcode_atts_products($out, $pairs, $atts) {
|
1280 |
-
if( ! empty($atts['berocket_aapf']) ) {
|
1281 |
-
|
1282 |
-
$out['berocket_aapf'] = false;
|
1283 |
-
$out['class'] = (empty($out['class']) ? '' : $out['class'] . ' ') . 'berocket_aapf_false';
|
1284 |
-
}
|
1285 |
-
if( $atts['berocket_aapf'] == 'true' || $atts['berocket_aapf'] == '1' ) {
|
1286 |
-
$out['cache'] = false;
|
1287 |
-
$out['berocket_aapf'] = true;
|
1288 |
-
$out['class'] = (empty($out['class']) ? '' : $out['class'] . ' ') . 'berocket_aapf_true';
|
1289 |
-
}
|
1290 |
}
|
1291 |
return $out;
|
1292 |
}
|
@@ -1325,8 +1298,8 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1325 |
public function include_all_scripts() {
|
1326 |
/* theme scripts */
|
1327 |
if( defined('THE7_VERSION') && THE7_VERSION ) {
|
1328 |
-
add_filter('berocket_aapf_time_to_fix_products_style', '__return_false');
|
1329 |
wp_enqueue_script( 'berocket_ajax_fix-the7', plugins_url( 'js/themes/the7.js', __FILE__ ), array( 'jquery' ), BeRocket_AJAX_filters_version );
|
|
|
1330 |
}
|
1331 |
global $wp_query, $wp, $sitepress, $wp_rewrite;
|
1332 |
$this->wp_print_special_scripts();
|
@@ -1458,6 +1431,10 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1458 |
) )
|
1459 |
);
|
1460 |
}
|
|
|
|
|
|
|
|
|
1461 |
public function add_error_log( $error_log ) {
|
1462 |
$error_log[plugin_basename( __FILE__ )] = self::$error_log;
|
1463 |
return $error_log;
|
@@ -1585,42 +1562,11 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1585 |
return ob_get_clean();
|
1586 |
}
|
1587 |
public function woocommerce_shortcode_products_query( $query_vars, $atts = array(), $name = 'products' ) {
|
1588 |
-
if( isset($atts['berocket_aapf']) && $atts['berocket_aapf'] === false ) {
|
1589 |
-
return $query_vars;
|
1590 |
-
}
|
1591 |
if( apply_filters('berocket_aapf_wcshortcode_is_filtering', ( (! is_shop() && ! is_product_taxonomy() && ! is_product_category() && ! is_product_tag()) || ! empty($atts['berocket_aapf']) ), $query_vars, $atts, $name ) ) {
|
1592 |
$query_vars = $this->woocommerce_filter_query_vars($query_vars, $atts, $name);
|
1593 |
}
|
1594 |
return $query_vars;
|
1595 |
}
|
1596 |
-
public function woocommerce_shortcode_no_result($atts) {
|
1597 |
-
if( ! empty($atts['berocket_aapf']) ) {
|
1598 |
-
wc_no_products_found();
|
1599 |
-
}
|
1600 |
-
}
|
1601 |
-
public function price_filter_post_clauses( $args, $wp_query ) {
|
1602 |
-
if( empty($wp_query->query_vars['berocket_filtered']) ) {
|
1603 |
-
return $args;
|
1604 |
-
}
|
1605 |
-
return $this->add_price_to_post_clauses($args);
|
1606 |
-
}
|
1607 |
-
public function add_price_to_post_clauses($args) {
|
1608 |
-
if( ! empty($_POST['price']) ) {
|
1609 |
-
global $wpdb;
|
1610 |
-
|
1611 |
-
if ( ! strstr( $args['join'], 'wc_product_meta_lookup' ) ) {
|
1612 |
-
$args['join'] .= " LEFT JOIN {$wpdb->wc_product_meta_lookup} wc_product_meta_lookup ON {$wpdb->posts}.ID = wc_product_meta_lookup.product_id ";
|
1613 |
-
}
|
1614 |
-
$min = isset( $_POST['price'][0] ) ? floatval( $_POST['price'][0] ) : 0;
|
1615 |
-
$max = isset( $_POST['price'][1] ) ? floatval( $_POST['price'][1] ) : 9999999999;
|
1616 |
-
$args['where'] .= $wpdb->prepare(
|
1617 |
-
' AND wc_product_meta_lookup.min_price >= %f AND wc_product_meta_lookup.max_price <= %f ',
|
1618 |
-
$min,
|
1619 |
-
$max
|
1620 |
-
);
|
1621 |
-
}
|
1622 |
-
return $args;
|
1623 |
-
}
|
1624 |
public function woocommerce_filter_query_vars( $query_vars, $atts = array(), $name = 'products' ) {
|
1625 |
$new_query_vars = $query_vars;
|
1626 |
$new_query_vars['nopaging'] = true;
|
@@ -1682,10 +1628,6 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1682 |
}
|
1683 |
$query_vars['post__not_in'] = array_merge($query_vars['post__not_in'], apply_filters('berocket_add_out_of_stock_variable', array(), $custom_terms, berocket_isset($_POST['limits_arr'])));
|
1684 |
$query_vars['post__in'] = apply_filters( 'loop_shop_post_in', $query_vars['post__in']);
|
1685 |
-
if ( br_woocommerce_version_check('3.6') && ! empty($_POST['price']) ) {
|
1686 |
-
$query_vars['berocket_price'] = $_POST['price'];
|
1687 |
-
}
|
1688 |
-
$query_vars['berocket_filtered'] = true;
|
1689 |
global $br_wc_query;
|
1690 |
$br_wc_query = $query_vars;
|
1691 |
add_action( 'wp_footer', array( $this, 'wp_footer_widget'), 99999 );
|
@@ -1751,7 +1693,6 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1751 |
$query->set( $args_field, $variable );
|
1752 |
}
|
1753 |
}
|
1754 |
-
$query->set('berocket_filtered', true);
|
1755 |
|
1756 |
//THIS CAN BE NEW FIX FOR SORTING, BUT NOT SURE
|
1757 |
if( class_exists('WC_Query') && method_exists('WC_Query', 'product_query') ) {
|
@@ -1813,7 +1754,7 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
1813 |
$args['meta_query'] = $meta_query;
|
1814 |
}
|
1815 |
$_POST['terms'] = $old_post_terms;
|
1816 |
-
if ( !
|
1817 |
$min = isset( $_POST['price'][0] ) ? floatval( $_POST['price'][0] ) : 0;
|
1818 |
$max = isset( $_POST['price'][1] ) ? floatval( $_POST['price'][1] ) : 9999999999;
|
1819 |
if ( wc_tax_enabled() && 'incl' === get_option( 'woocommerce_tax_display_shop' ) && ! wc_prices_include_tax() ) {
|
@@ -2530,18 +2471,60 @@ jQuery(document).on('change', '.br_selected_area_show', br_selected_area_show);
|
|
2530 |
$md5 = $md5 . br_get_value_from_array($options, 'purge_cache_time');
|
2531 |
return $md5;
|
2532 |
}
|
2533 |
-
public function
|
2534 |
-
|
|
|
2535 |
}
|
2536 |
-
|
2537 |
-
|
2538 |
-
|
2539 |
-
|
2540 |
-
|
2541 |
-
|
2542 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2543 |
}
|
2544 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2545 |
}
|
2546 |
}
|
2547 |
|
268 |
add_filter( 'plugin_action_links_' . $plugin_base_slug, array( $this, 'plugin_action_links' ) );
|
269 |
add_filter( 'berocket_aapf_widget_terms', array($this, 'wpml_attribute_slug_translate'));
|
270 |
add_filter ( 'BeRocket_updater_menu_order_custom_post', array($this, 'menu_order_custom_post') );
|
|
|
|
|
|
|
|
|
|
|
271 |
} else {
|
272 |
if( is_plugin_active( 'woocommerce/woocommerce.php' ) || is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) {
|
273 |
add_action( 'admin_notices', array( $this, 'update_woocommerce' ) );
|
1249 |
add_filter( 'pre_get_posts', array( $this, 'apply_user_price' ) );
|
1250 |
add_filter( 'pre_get_posts', array( $this, 'apply_user_filters' ), 900000 );
|
1251 |
add_filter( 'woocommerce_shortcode_products_query', array( $this, 'woocommerce_shortcode_products_query' ), 10, 3 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1252 |
add_filter( 'shortcode_atts_sale_products', array($this, 'shortcode_atts_products'), 10, 3);
|
1253 |
add_filter( 'shortcode_atts_featured_products', array($this, 'shortcode_atts_products'), 10, 3);
|
1254 |
add_filter( 'shortcode_atts_best_selling_products', array($this, 'shortcode_atts_products'), 10, 3);
|
1258 |
add_filter( 'shortcode_atts_products', array($this, 'shortcode_atts_products'), 10, 3);
|
1259 |
}
|
1260 |
function shortcode_atts_products($out, $pairs, $atts) {
|
1261 |
+
if( ! empty($atts['berocket_aapf']) && $atts['berocket_aapf'] == 'true' ) {
|
1262 |
+
$out['berocket_aapf'] = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1263 |
}
|
1264 |
return $out;
|
1265 |
}
|
1298 |
public function include_all_scripts() {
|
1299 |
/* theme scripts */
|
1300 |
if( defined('THE7_VERSION') && THE7_VERSION ) {
|
|
|
1301 |
wp_enqueue_script( 'berocket_ajax_fix-the7', plugins_url( 'js/themes/the7.js', __FILE__ ), array( 'jquery' ), BeRocket_AJAX_filters_version );
|
1302 |
+
add_filter('berocket_aapf_user_func', array($this, 'the7_fix'));
|
1303 |
}
|
1304 |
global $wp_query, $wp, $sitepress, $wp_rewrite;
|
1305 |
$this->wp_print_special_scripts();
|
1431 |
) )
|
1432 |
);
|
1433 |
}
|
1434 |
+
public function the7_fix($scripts) {
|
1435 |
+
$scripts['after_update'] = 'fixWooIsotope();fixWooOrdering(); '.$scripts['after_update'];
|
1436 |
+
return $scripts;
|
1437 |
+
}
|
1438 |
public function add_error_log( $error_log ) {
|
1439 |
$error_log[plugin_basename( __FILE__ )] = self::$error_log;
|
1440 |
return $error_log;
|
1562 |
return ob_get_clean();
|
1563 |
}
|
1564 |
public function woocommerce_shortcode_products_query( $query_vars, $atts = array(), $name = 'products' ) {
|
|
|
|
|
|
|
1565 |
if( apply_filters('berocket_aapf_wcshortcode_is_filtering', ( (! is_shop() && ! is_product_taxonomy() && ! is_product_category() && ! is_product_tag()) || ! empty($atts['berocket_aapf']) ), $query_vars, $atts, $name ) ) {
|
1566 |
$query_vars = $this->woocommerce_filter_query_vars($query_vars, $atts, $name);
|
1567 |
}
|
1568 |
return $query_vars;
|
1569 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1570 |
public function woocommerce_filter_query_vars( $query_vars, $atts = array(), $name = 'products' ) {
|
1571 |
$new_query_vars = $query_vars;
|
1572 |
$new_query_vars['nopaging'] = true;
|
1628 |
}
|
1629 |
$query_vars['post__not_in'] = array_merge($query_vars['post__not_in'], apply_filters('berocket_add_out_of_stock_variable', array(), $custom_terms, berocket_isset($_POST['limits_arr'])));
|
1630 |
$query_vars['post__in'] = apply_filters( 'loop_shop_post_in', $query_vars['post__in']);
|
|
|
|
|
|
|
|
|
1631 |
global $br_wc_query;
|
1632 |
$br_wc_query = $query_vars;
|
1633 |
add_action( 'wp_footer', array( $this, 'wp_footer_widget'), 99999 );
|
1693 |
$query->set( $args_field, $variable );
|
1694 |
}
|
1695 |
}
|
|
|
1696 |
|
1697 |
//THIS CAN BE NEW FIX FOR SORTING, BUT NOT SURE
|
1698 |
if( class_exists('WC_Query') && method_exists('WC_Query', 'product_query') ) {
|
1754 |
$args['meta_query'] = $meta_query;
|
1755 |
}
|
1756 |
$_POST['terms'] = $old_post_terms;
|
1757 |
+
if ( ! empty($_POST['price']) ) {
|
1758 |
$min = isset( $_POST['price'][0] ) ? floatval( $_POST['price'][0] ) : 0;
|
1759 |
$max = isset( $_POST['price'][1] ) ? floatval( $_POST['price'][1] ) : 9999999999;
|
1760 |
if ( wc_tax_enabled() && 'incl' === get_option( 'woocommerce_tax_display_shop' ) && ! wc_prices_include_tax() ) {
|
2471 |
$md5 = $md5 . br_get_value_from_array($options, 'purge_cache_time');
|
2472 |
return $md5;
|
2473 |
}
|
2474 |
+
public function fix_WC_outofstock($variation_id) {
|
2475 |
+
$product = wc_get_product($variation_id);
|
2476 |
+
$this->update_visibility($product, true);
|
2477 |
}
|
2478 |
+
|
2479 |
+
/**
|
2480 |
+
* Update visibility terms based on props.
|
2481 |
+
*
|
2482 |
+
* @since 3.0.0
|
2483 |
+
*
|
2484 |
+
* @param WC_Product $product Product object.
|
2485 |
+
* @param bool $force Force update. Used during create.
|
2486 |
+
*/
|
2487 |
+
protected function update_visibility( &$product, $force = false ) {
|
2488 |
+
$changes = $product->get_changes();
|
2489 |
+
|
2490 |
+
if ( $force || array_intersect( array( 'stock_status' ), array_keys( $changes ) ) ) {
|
2491 |
+
$terms = array();
|
2492 |
+
|
2493 |
+
if ( 'outofstock' === $product->get_stock_status() ) {
|
2494 |
+
$terms[] = 'outofstock';
|
2495 |
+
}
|
2496 |
+
|
2497 |
+
wp_set_post_terms( $product->get_id(), $terms, 'product_visibility', false );
|
2498 |
}
|
2499 |
+
}
|
2500 |
+
|
2501 |
+
public function as_schedule_WC_outofstock() {
|
2502 |
+
$variation_ids = wp_parse_id_list(
|
2503 |
+
get_posts(
|
2504 |
+
array(
|
2505 |
+
'post_type' => 'product_variation',
|
2506 |
+
'fields' => 'ids',
|
2507 |
+
'post_status' => array( 'any', 'trash', 'auto-draft' ),
|
2508 |
+
'numberposts' => -1, // phpcs:ignore WordPress.VIP.PostsPerPage.posts_per_page_numberposts
|
2509 |
+
)
|
2510 |
+
)
|
2511 |
+
);
|
2512 |
+
foreach($variation_ids as $variation_id) {
|
2513 |
+
if( function_exists('as_schedule_single_action') ) {
|
2514 |
+
as_schedule_single_action( time(), 'berocket_fix_WC_outofstock', array($variation_id), 'BeRocket' );
|
2515 |
+
}
|
2516 |
+
}
|
2517 |
+
}
|
2518 |
+
public function sanitize_option( $input ) {
|
2519 |
+
$input = parent::sanitize_option( $input );
|
2520 |
+
$option = $this->get_option();
|
2521 |
+
if( br_get_value_from_array($input, 'purge_cache_time') != br_get_value_from_array($option, 'purge_cache_time') ) {
|
2522 |
+
$this->as_schedule_WC_outofstock();
|
2523 |
+
}
|
2524 |
+
return $input;
|
2525 |
+
}
|
2526 |
+
public function option_page_capability($capability = '') {
|
2527 |
+
return 'manage_berocket_aapf';
|
2528 |
}
|
2529 |
}
|
2530 |
|
readme.txt
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
=== Advanced AJAX Product Filters ===
|
2 |
Plugin Name: Advanced AJAX Product Filters
|
3 |
Contributors: dholovnia, berocket
|
4 |
-
Donate link:
|
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.
|
8 |
-
Stable tag: 1.3.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -69,11 +69,11 @@ WooCommerce AJAX Product Filters - Advanced product filtering ability for your W
|
|
69 |
|
70 |
= Plugin Links: =
|
71 |
[Paid Plugin](https://berocket.com/l/filters-upgrade/?utm_source=wordpress_org&utm_medium=plugin_links&utm_campaign=ajax_filters)
|
72 |
-
[Demo](
|
73 |
-
[Demo Description](
|
74 |
|
75 |
= 🍬 Wanna try admin side? =
|
76 |
-
[Admin Demo](
|
77 |
|
78 |
= Premium plugin video =
|
79 |
[youtube https://youtu.be/8gaMj-IxUj0]
|
@@ -92,6 +92,9 @@ Advanced AJAX Product Filters has been tested and compatibility is certain with
|
|
92 |
🔸 [**Products Compare for WooCommerce**](https://wordpress.org/plugins/products-compare-for-woocommerce/)
|
93 |
🔸 [**Wishlist and Waitlist for WooCommerce**](https://wordpress.org/plugins/wish-wait-list-for-woocommerce/)
|
94 |
|
|
|
|
|
|
|
95 |
= Shortcode: =
|
96 |
* In editor `[br_filters attribute=price type=slider title="Price Filter"]`
|
97 |
* In PHP `do_shortcode('[br_filters attribute=price type=slider title="Price Filter"]');`
|
@@ -171,7 +174,7 @@ You can get more features with the premium version of Advanced AJAX Product Filt
|
|
171 |
|
172 |
|
173 |
= How can I try the full-featured plugin? =
|
174 |
-
You can try this plugin's admin side [here](
|
175 |
|
176 |
---
|
177 |
|
@@ -184,29 +187,6 @@ You can try this plugin's admin side [here](https://berocket.com/product/woocomm
|
|
184 |
|
185 |
== Changelog ==
|
186 |
|
187 |
-
= 1.3.3.1 =
|
188 |
-
* Fix - WooCommerce Shortcode with multiple categories
|
189 |
-
* Fix - Incorrect recount terms on some sites
|
190 |
-
|
191 |
-
= 1.3.3 =
|
192 |
-
* Enhancement - Filtering speed optimization
|
193 |
-
* Enhancement - Multiple WooCommerce shortcode can work correct
|
194 |
-
* Enhancement - Database query optimization and less query count
|
195 |
-
|
196 |
-
= 1.3.2.8 =
|
197 |
-
* Enhancement - Price slider speed woocommerce 3.6
|
198 |
-
* Enhancement - WooCommerce shortcode add no products message
|
199 |
-
* Fix - PHP notices
|
200 |
-
* Fix - Remove some files
|
201 |
-
|
202 |
-
= 1.3.2.7 =
|
203 |
-
* Fix - Links to BeRocket
|
204 |
-
* Fix - Compatibility with other BeRocket plugins
|
205 |
-
* Fix - Categories default sorting is not working
|
206 |
-
* Fix - Remove some php notices
|
207 |
-
* Fix - Reset in above products position break other filters
|
208 |
-
* Fix - Tax rates option for price
|
209 |
-
|
210 |
= 1.3.2.6 =
|
211 |
* Fix - Values Order - Default/Numeric, Order Type was not working with multigobyte values
|
212 |
* Fix - PHP notices/errors
|
1 |
=== Advanced AJAX Product Filters ===
|
2 |
Plugin Name: Advanced AJAX Product Filters
|
3 |
Contributors: dholovnia, berocket
|
4 |
+
Donate link: http://berocket.com/product/woocommerce-ajax-products-filter
|
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.1
|
8 |
+
Stable tag: 1.3.2.6
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
69 |
|
70 |
= Plugin Links: =
|
71 |
[Paid Plugin](https://berocket.com/l/filters-upgrade/?utm_source=wordpress_org&utm_medium=plugin_links&utm_campaign=ajax_filters)
|
72 |
+
[Demo](http://woocommerce-products-filter.berocket.com/shop/)
|
73 |
+
[Demo Description](http://woocommerce-products-filter.berocket.com/)
|
74 |
|
75 |
= 🍬 Wanna try admin side? =
|
76 |
+
[Admin Demo](http://berocket.com/product/woocommerce-ajax-products-filter#try-admin) - Get access to this plugin's admin and try it from inside. Change things and watch how they work.
|
77 |
|
78 |
= Premium plugin video =
|
79 |
[youtube https://youtu.be/8gaMj-IxUj0]
|
92 |
🔸 [**Products Compare for WooCommerce**](https://wordpress.org/plugins/products-compare-for-woocommerce/)
|
93 |
🔸 [**Wishlist and Waitlist for WooCommerce**](https://wordpress.org/plugins/wish-wait-list-for-woocommerce/)
|
94 |
|
95 |
+
Nevertheless, it could be compatible with many other WooCommerce plugins that have not been tested yet. If you want to inform us about compatibility with other plugins, please, [email to us](http://berocket.com/contact).
|
96 |
+
|
97 |
+
|
98 |
= Shortcode: =
|
99 |
* In editor `[br_filters attribute=price type=slider title="Price Filter"]`
|
100 |
* In PHP `do_shortcode('[br_filters attribute=price type=slider title="Price Filter"]');`
|
174 |
|
175 |
|
176 |
= How can I try the full-featured plugin? =
|
177 |
+
You can try this plugin's admin side [here](http://berocket.com/product/woocommerce-ajax-products-filter#try-admin). Configure plugin the way you need to check the results.
|
178 |
|
179 |
---
|
180 |
|
187 |
|
188 |
== Changelog ==
|
189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
= 1.3.2.6 =
|
191 |
* Fix - Values Order - Default/Numeric, Order Type was not working with multigobyte values
|
192 |
* Fix - PHP notices/errors
|
templates/filter_condition.php
ADDED
@@ -0,0 +1,293 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
echo '<div class="submitbox" id="submitpost">';
|
3 |
+
$product_categories = get_terms( 'product_cat' );
|
4 |
+
$condition_types = array(
|
5 |
+
'page' => __('Page', 'BeRocket_products_label_domain'),
|
6 |
+
'attribute' => __('Product Attribute', 'BeRocket_products_label_domain'),
|
7 |
+
'search' => __('Search', 'BeRocket_products_label_domain'),
|
8 |
+
);
|
9 |
+
if( is_array($product_categories) && count($product_categories) > 0 ) {
|
10 |
+
$condition_types['category'] = __('Product category', 'BeRocket_products_label_domain');
|
11 |
+
}
|
12 |
+
$condition_types = apply_filters('berocket_filters_condition_types', $condition_types);
|
13 |
+
?>
|
14 |
+
<div class="">
|
15 |
+
<div class="br_filter_group_example" style="display:none;">
|
16 |
+
<div class="br_cond_select" data-current="1">
|
17 |
+
<span>
|
18 |
+
<select class="br_cond_type">
|
19 |
+
<?php
|
20 |
+
foreach($condition_types as $condition_type_slug => $condition_type_name) {
|
21 |
+
echo '<option value="', $condition_type_slug, '">', $condition_type_name, '</option>';
|
22 |
+
}
|
23 |
+
?>
|
24 |
+
</select>
|
25 |
+
</span>
|
26 |
+
<span class="button berocket_remove_condition"><i class="fa fa-minus"></i></span>
|
27 |
+
<div class="br_current_cond">
|
28 |
+
</div>
|
29 |
+
</div>
|
30 |
+
<span class="button berocket_add_condition"><i class="fa fa-plus"></i></span>
|
31 |
+
<span class="button br_remove_group"><i class="fa fa-minus"></i></span>
|
32 |
+
</div>
|
33 |
+
<div class="br_cond_example" style="display:none;">
|
34 |
+
<?php
|
35 |
+
foreach($condition_types as $condition_type_slug => $condition_type_name) {
|
36 |
+
$condition_html = apply_filters('berocket_filters_condition_type_' . $condition_type_slug, '', '%name%[data][%id%][%current_id%]', array());
|
37 |
+
if( ! empty($condition_html) ) {
|
38 |
+
echo '<div class="br_cond br_cond_', $condition_type_slug, '">
|
39 |
+
', $condition_html, '
|
40 |
+
<input type="hidden" name="%name%[data][%id%][%current_id%][type]" value="', $condition_type_slug, '">
|
41 |
+
</div>';
|
42 |
+
}
|
43 |
+
}
|
44 |
+
?>
|
45 |
+
</div>
|
46 |
+
<div class="br_conditions">
|
47 |
+
<?php
|
48 |
+
$last_id = 0;
|
49 |
+
foreach($filters['data'] as $id => $data) {
|
50 |
+
$current_id = 1;
|
51 |
+
ob_start();
|
52 |
+
foreach($data as $current => $conditions) {
|
53 |
+
if( $current > $current_id ) {
|
54 |
+
$current_id = $current;
|
55 |
+
}
|
56 |
+
?>
|
57 |
+
<div class="br_cond_select" data-current="<?php echo $current; ?>">
|
58 |
+
<span>
|
59 |
+
<select class="br_cond_type">
|
60 |
+
<?php
|
61 |
+
foreach($condition_types as $condition_type_slug => $condition_type_name) {
|
62 |
+
echo '<option value="', $condition_type_slug, '"', ( isset($conditions['type']) && $conditions['type'] == $condition_type_slug ? ' selected' : '' ) , '>', $condition_type_name, '</option>';
|
63 |
+
}
|
64 |
+
?>
|
65 |
+
</select>
|
66 |
+
</span>
|
67 |
+
<span class="button berocket_remove_condition"><i class="fa fa-minus"></i></span>
|
68 |
+
<div class="br_current_cond">
|
69 |
+
</div>
|
70 |
+
<?php
|
71 |
+
$condition_html = apply_filters('berocket_filters_condition_type_' . $conditions['type'], '', 'BeRocket_product_new_filter[data][' . $id . '][' . $current . ']', $conditions);
|
72 |
+
if( ! empty($condition_html) ) {
|
73 |
+
echo '<div class="br_cond br_cond_', $conditions['type'], '">
|
74 |
+
', $condition_html, '
|
75 |
+
<input type="hidden" name="BeRocket_product_new_filter[data][' . $id . '][' . $current . '][type]" value="', $conditions['type'], '">
|
76 |
+
</div>';
|
77 |
+
}
|
78 |
+
?>
|
79 |
+
</div>
|
80 |
+
<?php
|
81 |
+
}
|
82 |
+
?>
|
83 |
+
<span class="button berocket_add_condition"><i class="fa fa-plus"></i></span>
|
84 |
+
<span class="button br_remove_group"><i class="fa fa-minus"></i></span>
|
85 |
+
<?php
|
86 |
+
$html = ob_get_clean();
|
87 |
+
echo '<div class="br_filter_group_condition" data-id="'.$id.'" data-current="'.$current_id.'">';
|
88 |
+
echo $html;
|
89 |
+
echo '</div>';
|
90 |
+
if( $id > $last_id ) {
|
91 |
+
$last_id = $id;
|
92 |
+
}
|
93 |
+
}
|
94 |
+
$last_id++;
|
95 |
+
?>
|
96 |
+
<span class="button br_add_group"><i class="fa fa-plus"></i></span>
|
97 |
+
</div>
|
98 |
+
<script>
|
99 |
+
var last_id = <?php echo $last_id; ?>;
|
100 |
+
var $html = jQuery('.br_filter_group_example').html();
|
101 |
+
$html = '<div class="br_cond_one">'+$html+'</div>';
|
102 |
+
jQuery(document).on('change', '.br_cond_type', function(event) {
|
103 |
+
var $parent = jQuery(this).parents('.br_cond_select');
|
104 |
+
$parent.find('.br_cond').remove();
|
105 |
+
var id = $parent.parents('.br_filter_group_condition');
|
106 |
+
var current_id = $parent.data('current');
|
107 |
+
id = id.data('id');
|
108 |
+
var html_need = jQuery('.br_cond_example .br_cond_'+jQuery(this).val()).get(0);
|
109 |
+
html_need = html_need.outerHTML;
|
110 |
+
html_need = html_need.replace(/%id%/g, id);
|
111 |
+
html_need = html_need.replace(/%current_id%/g, current_id);
|
112 |
+
html_need = html_need.replace(/%name%/g, 'BeRocket_product_new_filter');
|
113 |
+
$parent.find('.br_current_cond').html(html_need);
|
114 |
+
});
|
115 |
+
jQuery(document).on('click', '.berocket_add_condition', function() {
|
116 |
+
var id = jQuery(this).parents('.br_filter_group_condition');
|
117 |
+
var current_id = id.data('current');
|
118 |
+
current_id = current_id + 1;
|
119 |
+
id.data('current', current_id);
|
120 |
+
id = id.data('id');
|
121 |
+
var $html = jQuery('.br_filter_group_example .br_cond_select').html();
|
122 |
+
$html = '<div class="br_cond_select" data-current="'+current_id+'">'+$html+'</div>';
|
123 |
+
$html = $html.replace('%id%', id);
|
124 |
+
jQuery(this).before($html);
|
125 |
+
$parent = jQuery(this).prev();
|
126 |
+
$parent.find('.br_cond_type').trigger('change');
|
127 |
+
});
|
128 |
+
jQuery(document).on('click', '.berocket_remove_condition', function() {
|
129 |
+
$parent = jQuery(this).parents('.br_cond_select');
|
130 |
+
$parent.remove();
|
131 |
+
});
|
132 |
+
jQuery(document).on('click', '.br_add_group', function() {
|
133 |
+
last_id++;
|
134 |
+
var html = $html.replace( '%id%', last_id );
|
135 |
+
var html = '<div class="br_filter_group_condition" data-id="'+last_id+'" data-current="1">'+html+'</div>';
|
136 |
+
jQuery(this).before(html);
|
137 |
+
$parent = jQuery(this).prev();
|
138 |
+
$parent.find('.br_cond_type').trigger('change');
|
139 |
+
});
|
140 |
+
jQuery(document).on('click', '.br_remove_group', function() {
|
141 |
+
$parent = jQuery(this).parents('.br_filter_group_condition');
|
142 |
+
$parent.remove();
|
143 |
+
});
|
144 |
+
jQuery(document).on('change', '.br_cond_attr_select', function() {
|
145 |
+
var $attr_block = jQuery(this).parents('.br_cond_attribute');
|
146 |
+
$attr_block.find('.br_attr_values').hide();
|
147 |
+
$attr_block.find('.br_attr_value_'+jQuery(this).val()).show();
|
148 |
+
});
|
149 |
+
jQuery(document).on('change', '.price_from', function() {
|
150 |
+
var val_price_from = jQuery(this).val();
|
151 |
+
var val_price_to = jQuery(this).parents('.br_cond').first().find('.price_to').val();
|
152 |
+
price_from = parseFloat(val_price_from);
|
153 |
+
price_to = parseFloat(val_price_to);
|
154 |
+
price_to_int = parseInt(val_price_to);
|
155 |
+
if( val_price_from == '' ) {
|
156 |
+
jQuery(this).val(0);
|
157 |
+
price_from = 0;
|
158 |
+
}
|
159 |
+
if( price_from > price_to ) {
|
160 |
+
jQuery(this).val(price_to_int);
|
161 |
+
}
|
162 |
+
});
|
163 |
+
jQuery(document).on('change', '.price_to', function() {
|
164 |
+
var val_price_from = jQuery(this).parents('.br_cond').first().find('.price_from').val();
|
165 |
+
var val_price_to = jQuery(this).val();
|
166 |
+
price_from = parseFloat(val_price_from);
|
167 |
+
price_from_int = parseInt(val_price_from);
|
168 |
+
price_to = parseFloat(val_price_to);
|
169 |
+
if( val_price_to == '' ) {
|
170 |
+
jQuery(this).val(0);
|
171 |
+
price_to = 0;
|
172 |
+
}
|
173 |
+
if( price_from > price_to ) {
|
174 |
+
jQuery(this).val(price_from_int);
|
175 |
+
}
|
176 |
+
});
|
177 |
+
</script>
|
178 |
+
<style>
|
179 |
+
.br_conditions .br_filter_group_condition {
|
180 |
+
margin-top: 40px;
|
181 |
+
}
|
182 |
+
.br_conditions .br_filter_group_condition:first-child {
|
183 |
+
margin-top: 0;
|
184 |
+
}
|
185 |
+
.br_conditions .br_filter_group_condition:before {
|
186 |
+
content: "OR";
|
187 |
+
display: block;
|
188 |
+
position: absolute;
|
189 |
+
top: -30px;
|
190 |
+
font-size: 30px;
|
191 |
+
}
|
192 |
+
.br_conditions .br_filter_group_condition:first-child:before {
|
193 |
+
display: none;
|
194 |
+
}
|
195 |
+
.br_filter_group_condition .br_cond_select {
|
196 |
+
margin-top: 40px;
|
197 |
+
position: relative;
|
198 |
+
}
|
199 |
+
.br_filter_group_condition .br_cond_select:first-child {
|
200 |
+
margin-top: 0;
|
201 |
+
}
|
202 |
+
.br_filter_group_condition .br_cond_select:before {
|
203 |
+
content: "AND";
|
204 |
+
display: block;
|
205 |
+
position: absolute;
|
206 |
+
top: -30px;
|
207 |
+
font-size: 30px;
|
208 |
+
}
|
209 |
+
.br_filter_group_condition .br_cond_select:first-child:before {
|
210 |
+
display: none;
|
211 |
+
}
|
212 |
+
.br_filter_group_condition .br_cond_one .br_cond_select:first-child .berocket_remove_condition {
|
213 |
+
display: none;
|
214 |
+
}
|
215 |
+
.br_filter_group_condition {
|
216 |
+
border: 1px solid #999;
|
217 |
+
background-color: #fafafa;
|
218 |
+
padding: 0.5em;
|
219 |
+
margin-bottom: 1em;
|
220 |
+
position: relative;
|
221 |
+
}
|
222 |
+
.br_filter_group_condition .br_remove_group {
|
223 |
+
position: absolute!important;
|
224 |
+
top:-10px;
|
225 |
+
right: -10px;
|
226 |
+
}
|
227 |
+
.br_cond_select {
|
228 |
+
padding-bottom: 1em;
|
229 |
+
}
|
230 |
+
.br_cond_select {
|
231 |
+
border: 1px solid #999;
|
232 |
+
padding: 0.5em;
|
233 |
+
margin-bottom: 0.5em;
|
234 |
+
background-color: #eee;
|
235 |
+
}
|
236 |
+
.br_framework_settings .button.berocket_remove_condition,
|
237 |
+
.br_framework_settings .button.berocket_add_condition,
|
238 |
+
.br_framework_settings .button.br_remove_group,
|
239 |
+
.br_framework_settings .button.br_add_group {
|
240 |
+
padding: 0 10px;
|
241 |
+
margin: 0;
|
242 |
+
width: initial;
|
243 |
+
min-width: initial;
|
244 |
+
}
|
245 |
+
|
246 |
+
.berocket_label_preview_wrap {
|
247 |
+
display: inline-block;
|
248 |
+
width: 240px;
|
249 |
+
padding: 20px;
|
250 |
+
background: white;
|
251 |
+
position: fixed;
|
252 |
+
top: 100%;
|
253 |
+
margin-top: -320px;
|
254 |
+
min-height: 320px;
|
255 |
+
right: 20px;
|
256 |
+
box-sizing: border-box;
|
257 |
+
}
|
258 |
+
.berocket_label_preview_wrap .berocket_label_preview {
|
259 |
+
position: relative;
|
260 |
+
}
|
261 |
+
.berocket_label_preview_wrap .berocket_product_image {
|
262 |
+
display: block;
|
263 |
+
width: 200px;
|
264 |
+
}
|
265 |
+
@media screen and (max-width: 850px) {
|
266 |
+
.berocket_label_preview_wrap {
|
267 |
+
position: relative;
|
268 |
+
}
|
269 |
+
}
|
270 |
+
</style>
|
271 |
+
</div>
|
272 |
+
<div>
|
273 |
+
<table>
|
274 |
+
<tr>
|
275 |
+
<th>Hide this group on:</th>
|
276 |
+
<td>
|
277 |
+
<label>
|
278 |
+
<input type="checkbox" value="1" name="BeRocket_product_new_filter[is_hide_mobile]"<?php if( ! empty($filters['is_hide_mobile']) ) echo ' checked'; ?>>
|
279 |
+
<?php _e('Mobile', 'BeRocket_AJAX_domain'); ?>
|
280 |
+
</label>
|
281 |
+
<label>
|
282 |
+
<input type="checkbox" value="1" name="BeRocket_product_new_filter[hide_group][tablet]"<?php if( ! empty($filters['hide_group']['tablet']) ) echo ' checked'; ?>>
|
283 |
+
<?php _e('Tablet', 'BeRocket_AJAX_domain'); ?>
|
284 |
+
</label>
|
285 |
+
<label>
|
286 |
+
<input type="checkbox" value="1" name="BeRocket_product_new_filter[hide_group][desktop]"<?php if( ! empty($filters['hide_group']['desktop']) ) echo ' checked'; ?>>
|
287 |
+
<?php _e('Desktop', 'BeRocket_AJAX_domain'); ?>
|
288 |
+
</label>
|
289 |
+
</td>
|
290 |
+
</tr>
|
291 |
+
</table>
|
292 |
+
</div>
|
293 |
+
</div>
|
templates/filters_condition.php
ADDED
@@ -0,0 +1,293 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
echo '<div class="submitbox" id="submitpost">';
|
3 |
+
$product_categories = get_terms( 'product_cat' );
|
4 |
+
$condition_types = array(
|
5 |
+
'page' => __('Page', 'BeRocket_products_label_domain'),
|
6 |
+
'attribute' => __('Product Attribute', 'BeRocket_products_label_domain'),
|
7 |
+
'search' => __('Search', 'BeRocket_products_label_domain'),
|
8 |
+
);
|
9 |
+
if( is_array($product_categories) && count($product_categories) > 0 ) {
|
10 |
+
$condition_types['category'] = __('Product category', 'BeRocket_products_label_domain');
|
11 |
+
}
|
12 |
+
$condition_types = apply_filters('berocket_filters_condition_types', $condition_types);
|
13 |
+
?>
|
14 |
+
<div class="">
|
15 |
+
<div class="br_filter_group_example" style="display:none;">
|
16 |
+
<div class="br_cond_select" data-current="1">
|
17 |
+
<span>
|
18 |
+
<select class="br_cond_type">
|
19 |
+
<?php
|
20 |
+
foreach($condition_types as $condition_type_slug => $condition_type_name) {
|
21 |
+
echo '<option value="', $condition_type_slug, '">', $condition_type_name, '</option>';
|
22 |
+
}
|
23 |
+
?>
|
24 |
+
</select>
|
25 |
+
</span>
|
26 |
+
<span class="button berocket_remove_condition"><i class="fa fa-minus"></i></span>
|
27 |
+
<div class="br_current_cond">
|
28 |
+
</div>
|
29 |
+
</div>
|
30 |
+
<span class="button berocket_add_condition"><i class="fa fa-plus"></i></span>
|
31 |
+
<span class="button br_remove_group"><i class="fa fa-minus"></i></span>
|
32 |
+
</div>
|
33 |
+
<div class="br_cond_example" style="display:none;">
|
34 |
+
<?php
|
35 |
+
foreach($condition_types as $condition_type_slug => $condition_type_name) {
|
36 |
+
$condition_html = apply_filters('berocket_filters_condition_type_' . $condition_type_slug, '', '%name%[data][%id%][%current_id%]', array());
|
37 |
+
if( ! empty($condition_html) ) {
|
38 |
+
echo '<div class="br_cond br_cond_', $condition_type_slug, '">
|
39 |
+
', $condition_html, '
|
40 |
+
<input type="hidden" name="%name%[data][%id%][%current_id%][type]" value="', $condition_type_slug, '">
|
41 |
+
</div>';
|
42 |
+
}
|
43 |
+
}
|
44 |
+
?>
|
45 |
+
</div>
|
46 |
+
<div class="br_conditions">
|
47 |
+
<?php
|
48 |
+
$last_id = 0;
|
49 |
+
foreach($filters['data'] as $id => $data) {
|
50 |
+
$current_id = 1;
|
51 |
+
ob_start();
|
52 |
+
foreach($data as $current => $conditions) {
|
53 |
+
if( $current > $current_id ) {
|
54 |
+
$current_id = $current;
|
55 |
+
}
|
56 |
+
?>
|
57 |
+
<div class="br_cond_select" data-current="<?php echo $current; ?>">
|
58 |
+
<span>
|
59 |
+
<select class="br_cond_type">
|
60 |
+
<?php
|
61 |
+
foreach($condition_types as $condition_type_slug => $condition_type_name) {
|
62 |
+
echo '<option value="', $condition_type_slug, '"', ( isset($conditions['type']) && $conditions['type'] == $condition_type_slug ? ' selected' : '' ) , '>', $condition_type_name, '</option>';
|
63 |
+
}
|
64 |
+
?>
|
65 |
+
</select>
|
66 |
+
</span>
|
67 |
+
<span class="button berocket_remove_condition"><i class="fa fa-minus"></i></span>
|
68 |
+
<div class="br_current_cond">
|
69 |
+
</div>
|
70 |
+
<?php
|
71 |
+
$condition_html = apply_filters('berocket_filters_condition_type_' . $conditions['type'], '', 'br_filter_group[data][' . $id . '][' . $current . ']', $conditions);
|
72 |
+
if( ! empty($condition_html) ) {
|
73 |
+
echo '<div class="br_cond br_cond_', $conditions['type'], '">
|
74 |
+
', $condition_html, '
|
75 |
+
<input type="hidden" name="br_filter_group[data][' . $id . '][' . $current . '][type]" value="', $conditions['type'], '">
|
76 |
+
</div>';
|
77 |
+
}
|
78 |
+
?>
|
79 |
+
</div>
|
80 |
+
<?php
|
81 |
+
}
|
82 |
+
?>
|
83 |
+
<span class="button berocket_add_condition"><i class="fa fa-plus"></i></span>
|
84 |
+
<span class="button br_remove_group"><i class="fa fa-minus"></i></span>
|
85 |
+
<?php
|
86 |
+
$html = ob_get_clean();
|
87 |
+
echo '<div class="br_filter_group_condition" data-id="'.$id.'" data-current="'.$current_id.'">';
|
88 |
+
echo $html;
|
89 |
+
echo '</div>';
|
90 |
+
if( $id > $last_id ) {
|
91 |
+
$last_id = $id;
|
92 |
+
}
|
93 |
+
}
|
94 |
+
$last_id++;
|
95 |
+
?>
|
96 |
+
<span class="button br_add_group"><i class="fa fa-plus"></i></span>
|
97 |
+
</div>
|
98 |
+
<script>
|
99 |
+
var last_id = <?php echo $last_id; ?>;
|
100 |
+
var $html = jQuery('.br_filter_group_example').html();
|
101 |
+
$html = '<div class="br_cond_one">'+$html+'</div>';
|
102 |
+
jQuery(document).on('change', '.br_cond_type', function(event) {
|
103 |
+
var $parent = jQuery(this).parents('.br_cond_select');
|
104 |
+
$parent.find('.br_cond').remove();
|
105 |
+
var id = $parent.parents('.br_filter_group_condition');
|
106 |
+
var current_id = $parent.data('current');
|
107 |
+
id = id.data('id');
|
108 |
+
var html_need = jQuery('.br_cond_example .br_cond_'+jQuery(this).val()).get(0);
|
109 |
+
html_need = html_need.outerHTML;
|
110 |
+
html_need = html_need.replace(/%id%/g, id);
|
111 |
+
html_need = html_need.replace(/%current_id%/g, current_id);
|
112 |
+
html_need = html_need.replace(/%name%/g, 'br_filter_group');
|
113 |
+
$parent.find('.br_current_cond').html(html_need);
|
114 |
+
});
|
115 |
+
jQuery(document).on('click', '.berocket_add_condition', function() {
|
116 |
+
var id = jQuery(this).parents('.br_filter_group_condition');
|
117 |
+
var current_id = id.data('current');
|
118 |
+
current_id = current_id + 1;
|
119 |
+
id.data('current', current_id);
|
120 |
+
id = id.data('id');
|
121 |
+
var $html = jQuery('.br_filter_group_example .br_cond_select').html();
|
122 |
+
$html = '<div class="br_cond_select" data-current="'+current_id+'">'+$html+'</div>';
|
123 |
+
$html = $html.replace('%id%', id);
|
124 |
+
jQuery(this).before($html);
|
125 |
+
$parent = jQuery(this).prev();
|
126 |
+
$parent.find('.br_cond_type').trigger('change');
|
127 |
+
});
|
128 |
+
jQuery(document).on('click', '.berocket_remove_condition', function() {
|
129 |
+
$parent = jQuery(this).parents('.br_cond_select');
|
130 |
+
$parent.remove();
|
131 |
+
});
|
132 |
+
jQuery(document).on('click', '.br_add_group', function() {
|
133 |
+
last_id++;
|
134 |
+
var html = $html.replace( '%id%', last_id );
|
135 |
+
var html = '<div class="br_filter_group_condition" data-id="'+last_id+'" data-current="1">'+html+'</div>';
|
136 |
+
jQuery(this).before(html);
|
137 |
+
$parent = jQuery(this).prev();
|
138 |
+
$parent.find('.br_cond_type').trigger('change');
|
139 |
+
});
|
140 |
+
jQuery(document).on('click', '.br_remove_group', function() {
|
141 |
+
$parent = jQuery(this).parents('.br_filter_group_condition');
|
142 |
+
$parent.remove();
|
143 |
+
});
|
144 |
+
jQuery(document).on('change', '.br_cond_attr_select', function() {
|
145 |
+
var $attr_block = jQuery(this).parents('.br_cond_attribute');
|
146 |
+
$attr_block.find('.br_attr_values').hide();
|
147 |
+
$attr_block.find('.br_attr_value_'+jQuery(this).val()).show();
|
148 |
+
});
|
149 |
+
jQuery(document).on('change', '.price_from', function() {
|
150 |
+
var val_price_from = jQuery(this).val();
|
151 |
+
var val_price_to = jQuery(this).parents('.br_cond').first().find('.price_to').val();
|
152 |
+
price_from = parseFloat(val_price_from);
|
153 |
+
price_to = parseFloat(val_price_to);
|
154 |
+
price_to_int = parseInt(val_price_to);
|
155 |
+
if( val_price_from == '' ) {
|
156 |
+
jQuery(this).val(0);
|
157 |
+
price_from = 0;
|
158 |
+
}
|
159 |
+
if( price_from > price_to ) {
|
160 |
+
jQuery(this).val(price_to_int);
|
161 |
+
}
|
162 |
+
});
|
163 |
+
jQuery(document).on('change', '.price_to', function() {
|
164 |
+
var val_price_from = jQuery(this).parents('.br_cond').first().find('.price_from').val();
|
165 |
+
var val_price_to = jQuery(this).val();
|
166 |
+
price_from = parseFloat(val_price_from);
|
167 |
+
price_from_int = parseInt(val_price_from);
|
168 |
+
price_to = parseFloat(val_price_to);
|
169 |
+
if( val_price_to == '' ) {
|
170 |
+
jQuery(this).val(0);
|
171 |
+
price_to = 0;
|
172 |
+
}
|
173 |
+
if( price_from > price_to ) {
|
174 |
+
jQuery(this).val(price_from_int);
|
175 |
+
}
|
176 |
+
});
|
177 |
+
</script>
|
178 |
+
<style>
|
179 |
+
.br_conditions .br_filter_group_condition {
|
180 |
+
margin-top: 40px;
|
181 |
+
}
|
182 |
+
.br_conditions .br_filter_group_condition:first-child {
|
183 |
+
margin-top: 0;
|
184 |
+
}
|
185 |
+
.br_conditions .br_filter_group_condition:before {
|
186 |
+
content: "OR";
|
187 |
+
display: block;
|
188 |
+
position: absolute;
|
189 |
+
top: -30px;
|
190 |
+
font-size: 30px;
|
191 |
+
}
|
192 |
+
.br_conditions .br_filter_group_condition:first-child:before {
|
193 |
+
display: none;
|
194 |
+
}
|
195 |
+
.br_filter_group_condition .br_cond_select {
|
196 |
+
margin-top: 40px;
|
197 |
+
position: relative;
|
198 |
+
}
|
199 |
+
.br_filter_group_condition .br_cond_select:first-child {
|
200 |
+
margin-top: 0;
|
201 |
+
}
|
202 |
+
.br_filter_group_condition .br_cond_select:before {
|
203 |
+
content: "AND";
|
204 |
+
display: block;
|
205 |
+
position: absolute;
|
206 |
+
top: -30px;
|
207 |
+
font-size: 30px;
|
208 |
+
}
|
209 |
+
.br_filter_group_condition .br_cond_select:first-child:before {
|
210 |
+
display: none;
|
211 |
+
}
|
212 |
+
.br_filter_group_condition .br_cond_one .br_cond_select:first-child .berocket_remove_condition {
|
213 |
+
display: none;
|
214 |
+
}
|
215 |
+
.br_filter_group_condition {
|
216 |
+
border: 1px solid #999;
|
217 |
+
background-color: #fafafa;
|
218 |
+
padding: 0.5em;
|
219 |
+
margin-bottom: 1em;
|
220 |
+
position: relative;
|
221 |
+
}
|
222 |
+
.br_filter_group_condition .br_remove_group {
|
223 |
+
position: absolute!important;
|
224 |
+
top:-10px;
|
225 |
+
right: -10px;
|
226 |
+
}
|
227 |
+
.br_cond_select {
|
228 |
+
padding-bottom: 1em;
|
229 |
+
}
|
230 |
+
.br_cond_select {
|
231 |
+
border: 1px solid #999;
|
232 |
+
padding: 0.5em;
|
233 |
+
margin-bottom: 0.5em;
|
234 |
+
background-color: #eee;
|
235 |
+
}
|
236 |
+
.br_framework_settings .button.berocket_remove_condition,
|
237 |
+
.br_framework_settings .button.berocket_add_condition,
|
238 |
+
.br_framework_settings .button.br_remove_group,
|
239 |
+
.br_framework_settings .button.br_add_group {
|
240 |
+
padding: 0 10px;
|
241 |
+
margin: 0;
|
242 |
+
width: initial;
|
243 |
+
min-width: initial;
|
244 |
+
}
|
245 |
+
|
246 |
+
.berocket_label_preview_wrap {
|
247 |
+
display: inline-block;
|
248 |
+
width: 240px;
|
249 |
+
padding: 20px;
|
250 |
+
background: white;
|
251 |
+
position: fixed;
|
252 |
+
top: 100%;
|
253 |
+
margin-top: -320px;
|
254 |
+
min-height: 320px;
|
255 |
+
right: 20px;
|
256 |
+
box-sizing: border-box;
|
257 |
+
}
|
258 |
+
.berocket_label_preview_wrap .berocket_label_preview {
|
259 |
+
position: relative;
|
260 |
+
}
|
261 |
+
.berocket_label_preview_wrap .berocket_product_image {
|
262 |
+
display: block;
|
263 |
+
width: 200px;
|
264 |
+
}
|
265 |
+
@media screen and (max-width: 850px) {
|
266 |
+
.berocket_label_preview_wrap {
|
267 |
+
position: relative;
|
268 |
+
}
|
269 |
+
}
|
270 |
+
</style>
|
271 |
+
</div>
|
272 |
+
<div>
|
273 |
+
<table>
|
274 |
+
<tr>
|
275 |
+
<th>Hide this group on:</th>
|
276 |
+
<td>
|
277 |
+
<label>
|
278 |
+
<input type="checkbox" value="1" name="br_filter_group[hide_group][mobile]"<?php if( ! empty($filters['hide_group']['mobile']) ) echo ' checked'; ?>>
|
279 |
+
<?php _e('Mobile', 'BeRocket_AJAX_domain'); ?>
|
280 |
+
</label>
|
281 |
+
<label>
|
282 |
+
<input type="checkbox" value="1" name="br_filter_group[hide_group][tablet]"<?php if( ! empty($filters['hide_group']['tablet']) ) echo ' checked'; ?>>
|
283 |
+
<?php _e('Tablet', 'BeRocket_AJAX_domain'); ?>
|
284 |
+
</label>
|
285 |
+
<label>
|
286 |
+
<input type="checkbox" value="1" name="br_filter_group[hide_group][desktop]"<?php if( ! empty($filters['hide_group']['desktop']) ) echo ' checked'; ?>>
|
287 |
+
<?php _e('Desktop', 'BeRocket_AJAX_domain'); ?>
|
288 |
+
</label>
|
289 |
+
</td>
|
290 |
+
</tr>
|
291 |
+
</table>
|
292 |
+
</div>
|
293 |
+
</div>
|
templates/filters_group.php
CHANGED
@@ -86,7 +86,6 @@
|
|
86 |
line-height: 40px;
|
87 |
height: 40px;
|
88 |
border-right-width: 3px;
|
89 |
-
background-color: rgb(238, 238, 238);
|
90 |
}
|
91 |
.berocket_filter_added_list li .fa-bars {
|
92 |
margin-right: 0.5em;
|
@@ -115,13 +114,12 @@
|
|
115 |
}
|
116 |
.berocket_filter_added_list .berocket_edit_filter {
|
117 |
vertical-align: middle;
|
118 |
-
font-size: 0.
|
119 |
float: right;
|
120 |
line-height: 40px;
|
|
|
121 |
display: inline-block;
|
122 |
color: #2c3b48;
|
123 |
-
margin-left: 0.5em;
|
124 |
-
margin-right: 0.5em;
|
125 |
}
|
126 |
.berocket_filter_added_list li .fa-times:hover,
|
127 |
.berocket_filter_added_list .berocket_edit_filter:hover {
|
@@ -150,22 +148,4 @@
|
|
150 |
.berocket_filter_added_list.berocket_hidden_clickable_enabled .berocket_hidden_clickable_options {
|
151 |
display: inline-block;
|
152 |
}
|
153 |
-
@media screen and (max-width: 600px) {
|
154 |
-
.berocket_filter_added_list small,
|
155 |
-
.berocket_filter_added_list .berocket_edit_filter {
|
156 |
-
display: none;
|
157 |
-
}
|
158 |
-
.berocket_filter_added_list li {
|
159 |
-
position: relative;
|
160 |
-
}
|
161 |
-
.berocket_filter_added_list li .fa-times {
|
162 |
-
position: absolute;
|
163 |
-
top: 1px;
|
164 |
-
right: 0;
|
165 |
-
background-color: rgb(238, 238, 238);
|
166 |
-
margin: 0;
|
167 |
-
padding: 0 10px;
|
168 |
-
line-height: 38px;
|
169 |
-
}
|
170 |
-
}
|
171 |
</style>
|
86 |
line-height: 40px;
|
87 |
height: 40px;
|
88 |
border-right-width: 3px;
|
|
|
89 |
}
|
90 |
.berocket_filter_added_list li .fa-bars {
|
91 |
margin-right: 0.5em;
|
114 |
}
|
115 |
.berocket_filter_added_list .berocket_edit_filter {
|
116 |
vertical-align: middle;
|
117 |
+
font-size: 0.5em;
|
118 |
float: right;
|
119 |
line-height: 40px;
|
120 |
+
height: 2em;
|
121 |
display: inline-block;
|
122 |
color: #2c3b48;
|
|
|
|
|
123 |
}
|
124 |
.berocket_filter_added_list li .fa-times:hover,
|
125 |
.berocket_filter_added_list .berocket_edit_filter:hover {
|
148 |
.berocket_filter_added_list.berocket_hidden_clickable_enabled .berocket_hidden_clickable_options {
|
149 |
display: inline-block;
|
150 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
</style>
|
templates/free/features.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
<h5>Our WooCommerce AJAX Products Filter offers several layouts including slider, image and color</h5>
|
6 |
|
7 |
<div class="demo-site">
|
8 |
-
<a href="https://woocommerce-products-filter.berocket.com/shop
|
9 |
</div>
|
10 |
<img alt="Choose best layout for your filter" src="https://berocket.com/images/features/filters/filters-types.jpg" />
|
11 |
</div>
|
@@ -16,7 +16,7 @@
|
|
16 |
<h5>Users will get next page loaded ordered by their preferences and without page reloading</h5>
|
17 |
|
18 |
<div class="demo-site">
|
19 |
-
<a href="https://woocommerce-products-filter.berocket.com/shop
|
20 |
</div>
|
21 |
|
22 |
<img alt="Pagination and Order without page reloading" src="https://berocket.com/images/features/filters/ajax_order_nav.jpg" />
|
@@ -28,7 +28,7 @@
|
|
28 |
<h5>Need more space for the products? Say no to sidebars</h5>
|
29 |
|
30 |
<div class="demo-site">
|
31 |
-
<a href="https://woocommerce-products-filter.berocket.com/product-category/tshirts
|
32 |
</div>
|
33 |
<img alt="Show filters above products" src="https://berocket.com/images/features/filters/above_products.jpg" />
|
34 |
</div>
|
@@ -39,7 +39,7 @@
|
|
39 |
<h5>Use Nice URLs with canonicalization and slugs instead of IDs</h5>
|
40 |
|
41 |
<div class="demo-site">
|
42 |
-
<a href="https://woocommerce-products-filter.berocket.com/product-category/tshirts
|
43 |
</div>
|
44 |
|
45 |
<div> </div>
|
@@ -61,7 +61,7 @@
|
|
61 |
<h5>Show users what they will get before filters applied. Fast and efficient</h5>
|
62 |
|
63 |
<div class="demo-site">
|
64 |
-
<a href="https://woocommerce-products-filter.berocket.com/woocommerce-products-filter-demo-4
|
65 |
</div>
|
66 |
|
67 |
<div> </div>
|
@@ -75,7 +75,7 @@
|
|
75 |
<h5>Show only needed values from the attribute or hide few</h5>
|
76 |
|
77 |
<div class="demo-site">
|
78 |
-
<a href="https://woocommerce-products-filter.berocket.com/woocommerce-products-filter-demo-4
|
79 |
</div>
|
80 |
<img alt="Include/Exclude values" src="https://berocket.com/images/features/filters/include_exclude.jpg" />
|
81 |
</div>
|
@@ -86,7 +86,7 @@
|
|
86 |
<h5>Users can pre-fill filters before visiting shop page</h5>
|
87 |
|
88 |
<div class="demo-site">
|
89 |
-
<a href="https://woocommerce-products-filter.berocket.com
|
90 |
</div>
|
91 |
<img alt="Search Box on any page" src="https://berocket.com/images/features/filters/searchbox.jpg" />
|
92 |
</div>
|
@@ -97,7 +97,7 @@
|
|
97 |
<h5>Hate "No Products!" message? Hide values without products on the go</h5>
|
98 |
|
99 |
<div class="demo-site">
|
100 |
-
<a href="https://woocommerce-products-filter.berocket.com/shop
|
101 |
</div>
|
102 |
|
103 |
<div> </div>
|
@@ -119,7 +119,7 @@
|
|
119 |
<h5>Users love brands. Help them find favorite brands faster</h5>
|
120 |
|
121 |
<div class="demo-site">
|
122 |
-
<a href="https://woocommerce-products-filter.berocket.com/woocommerce-products-filter-demo-5
|
123 |
</div>
|
124 |
<img alt="Brands" src="https://berocket.com/images/features/filters/brands.jpg" />
|
125 |
</div>
|
@@ -130,7 +130,7 @@
|
|
130 |
<h5>Love sliders? Use them now for the attributes too!</h5>
|
131 |
|
132 |
<div class="demo-site">
|
133 |
-
<a href="https://woocommerce-products-filter.berocket.com/woocommerce-products-filter-demo-2
|
134 |
</div>
|
135 |
<img alt="Price Ranges and Sliders for Attributes" src="https://berocket.com/images/features/filters/range_slider.jpg" />
|
136 |
</div>
|
5 |
<h5>Our WooCommerce AJAX Products Filter offers several layouts including slider, image and color</h5>
|
6 |
|
7 |
<div class="demo-site">
|
8 |
+
<a href="https://woocommerce-products-filter.berocket.com/shop/" target="_blank">[ demo site ]</a>
|
9 |
</div>
|
10 |
<img alt="Choose best layout for your filter" src="https://berocket.com/images/features/filters/filters-types.jpg" />
|
11 |
</div>
|
16 |
<h5>Users will get next page loaded ordered by their preferences and without page reloading</h5>
|
17 |
|
18 |
<div class="demo-site">
|
19 |
+
<a href="https://woocommerce-products-filter.berocket.com/shop/" target="_blank">[ demo site ]</a>
|
20 |
</div>
|
21 |
|
22 |
<img alt="Pagination and Order without page reloading" src="https://berocket.com/images/features/filters/ajax_order_nav.jpg" />
|
28 |
<h5>Need more space for the products? Say no to sidebars</h5>
|
29 |
|
30 |
<div class="demo-site">
|
31 |
+
<a href="https://woocommerce-products-filter.berocket.com/product-category/tshirts/" target="_blank">[ demo site ]</a>
|
32 |
</div>
|
33 |
<img alt="Show filters above products" src="https://berocket.com/images/features/filters/above_products.jpg" />
|
34 |
</div>
|
39 |
<h5>Use Nice URLs with canonicalization and slugs instead of IDs</h5>
|
40 |
|
41 |
<div class="demo-site">
|
42 |
+
<a href="https://woocommerce-products-filter.berocket.com/product-category/tshirts/" target="_blank">[ demo site ]</a>
|
43 |
</div>
|
44 |
|
45 |
<div> </div>
|
61 |
<h5>Show users what they will get before filters applied. Fast and efficient</h5>
|
62 |
|
63 |
<div class="demo-site">
|
64 |
+
<a href="https://woocommerce-products-filter.berocket.com/woocommerce-products-filter-demo-4/" target="_blank">[ demo site ]</a>
|
65 |
</div>
|
66 |
|
67 |
<div> </div>
|
75 |
<h5>Show only needed values from the attribute or hide few</h5>
|
76 |
|
77 |
<div class="demo-site">
|
78 |
+
<a href="https://woocommerce-products-filter.berocket.com/woocommerce-products-filter-demo-4/" target="_blank">[ demo site ]</a>
|
79 |
</div>
|
80 |
<img alt="Include/Exclude values" src="https://berocket.com/images/features/filters/include_exclude.jpg" />
|
81 |
</div>
|
86 |
<h5>Users can pre-fill filters before visiting shop page</h5>
|
87 |
|
88 |
<div class="demo-site">
|
89 |
+
<a href="https://woocommerce-products-filter.berocket.com/" target="_blank">[ demo site ]</a>
|
90 |
</div>
|
91 |
<img alt="Search Box on any page" src="https://berocket.com/images/features/filters/searchbox.jpg" />
|
92 |
</div>
|
97 |
<h5>Hate "No Products!" message? Hide values without products on the go</h5>
|
98 |
|
99 |
<div class="demo-site">
|
100 |
+
<a href="https://woocommerce-products-filter.berocket.com/shop/" target="_blank">[ demo site ]</a>
|
101 |
</div>
|
102 |
|
103 |
<div> </div>
|
119 |
<h5>Users love brands. Help them find favorite brands faster</h5>
|
120 |
|
121 |
<div class="demo-site">
|
122 |
+
<a href="https://woocommerce-products-filter.berocket.com/woocommerce-products-filter-demo-5/" target="_blank">[ demo site ]</a>
|
123 |
</div>
|
124 |
<img alt="Brands" src="https://berocket.com/images/features/filters/brands.jpg" />
|
125 |
</div>
|
130 |
<h5>Love sliders? Use them now for the attributes too!</h5>
|
131 |
|
132 |
<div class="demo-site">
|
133 |
+
<a href="https://woocommerce-products-filter.berocket.com/woocommerce-products-filter-demo-2/" target="_blank">[ demo site ]</a>
|
134 |
</div>
|
135 |
<img alt="Price Ranges and Sliders for Attributes" src="https://berocket.com/images/features/filters/range_slider.jpg" />
|
136 |
</div>
|
templates/premium.php
CHANGED
@@ -13,7 +13,7 @@ if ( isset($this->plugin_version_capability) && $this->plugin_version_capability
|
|
13 |
foreach ( $feature_list as $feature ) {
|
14 |
$feature_text .= '<li>' . $feature . '</li>';
|
15 |
}
|
16 |
-
$text = '<h3>Unlock
|
17 |
<div>
|
18 |
<ul>
|
19 |
%feature_list%
|
@@ -46,7 +46,8 @@ if ( isset($this->plugin_version_capability) && $this->plugin_version_capability
|
|
46 |
</div>
|
47 |
<?php
|
48 |
}
|
49 |
-
echo apply_filters('
|
|
|
50 |
$subscribed = get_option('berocket_email_subscribed');
|
51 |
if( ! $subscribed ) {
|
52 |
$user_email = wp_get_current_user();
|
13 |
foreach ( $feature_list as $feature ) {
|
14 |
$feature_text .= '<li>' . $feature . '</li>';
|
15 |
}
|
16 |
+
$text = '<h3>Unlock Premium features!</h3>
|
17 |
<div>
|
18 |
<ul>
|
19 |
%feature_list%
|
46 |
</div>
|
47 |
<?php
|
48 |
}
|
49 |
+
echo apply_filters('berocket_related_plugins_window', '', br_get_value_from_array($this->cc->info, 'id'), $this);
|
50 |
+
echo apply_filters('berocket_feature_request_window', '', br_get_value_from_array($this->cc->info, 'id'), $this);
|
51 |
$subscribed = get_option('berocket_email_subscribed');
|
52 |
if( ! $subscribed ) {
|
53 |
$user_email = wp_get_current_user();
|
templates/settings_footer.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<?php if( ! empty($feature_list) && count($feature_list) > 0 ) { ?>
|
3 |
+
<div class="paid_features">
|
4 |
+
<?php
|
5 |
+
$feature_text = '';
|
6 |
+
foreach($feature_list as $feature) {
|
7 |
+
$feature_text .= '<li>'.$feature.'</li>';
|
8 |
+
}
|
9 |
+
$text = '<h3>Receive more features and control with Paid version of the plugin:</h3>
|
10 |
+
<div>
|
11 |
+
<ul>
|
12 |
+
%feature_list%
|
13 |
+
</ul>
|
14 |
+
</div>
|
15 |
+
<div><a class="get_premium_version" href="%link%">PREMIUM VERSION</a></div>
|
16 |
+
<p>Support the plugin by purchasing paid version. This will provide faster growth, better support and much more functionality for the plugin</p>';
|
17 |
+
$text = str_replace('%feature_list%', $feature_text, $text);
|
18 |
+
$text = str_replace('%link%', $dplugin_link, $text);
|
19 |
+
$text = str_replace('%plugin_name%', br_get_value_from_array($plugin_info, 'Name'), $text);
|
20 |
+
$text = str_replace('%plugin_link%', br_get_value_from_array($plugin_info, 'PluginURI'), $text);
|
21 |
+
echo $text;
|
22 |
+
?>
|
23 |
+
</div>
|
24 |
+
<?php
|
25 |
+
$text = '<h4>Both <a href="%plugin_link%" target="_blank">Free</a> and <a href="%link%" target="_blank">Paid</a> versions of %plugin_name% developed by <a href="http://berocket.com" target="_blank">BeRocket</a></h4>';
|
26 |
+
} else {
|
27 |
+
$text = '<h4><a href="%plugin_link%" target="_blank">%plugin_name%</a> developed by <a href="http://berocket.com" target="_blank">BeRocket</a></h4>';
|
28 |
+
}
|
29 |
+
$text = str_replace('%link%', $dplugin_link, $text);
|
30 |
+
$text = str_replace('%plugin_name%', br_get_value_from_array($plugin_info, 'Name'), $text);
|
31 |
+
$text = str_replace('%plugin_link%', br_get_value_from_array($plugin_info, 'PluginURI'), $text);
|
32 |
+
echo $text;
|
33 |
+
?>
|
34 |
+
</div>
|
35 |
+
<style>
|
36 |
+
.paid_features {
|
37 |
+
border: 1px solid #c29a9a;
|
38 |
+
background: white;
|
39 |
+
padding: 20px 20px 10px 30px;
|
40 |
+
font-weight: 600;
|
41 |
+
}
|
42 |
+
.get_premium_version {
|
43 |
+
display: inline-block;
|
44 |
+
background-color: rgb(239, 109, 109);
|
45 |
+
border-color: rgb(222, 72, 72);
|
46 |
+
color: white;
|
47 |
+
font-size: 20px;
|
48 |
+
height: auto;
|
49 |
+
padding: 10px 41px;
|
50 |
+
margin: 1em 0 1em 0;
|
51 |
+
text-decoration: none;
|
52 |
+
cursor: pointer;
|
53 |
+
}
|
54 |
+
.get_premium_version:hover {
|
55 |
+
color: white;
|
56 |
+
background-color: rgb(222, 72, 72);
|
57 |
+
}
|
58 |
+
.paid_features ul li{
|
59 |
+
list-style: initial;
|
60 |
+
margin-left: 2em;
|
61 |
+
}
|
62 |
+
</style>
|
templates/settings_head.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<?php
|
3 |
+
$text = '<h1>%plugin_name% by BeRocket</h1>
|
4 |
+
<div>%desc%</div>';
|
5 |
+
$text = str_replace('%plugin_name%', $plugin_info['Name'], $text);
|
6 |
+
$text = str_replace('%desc%', $plugin_info['Description'], $text);
|
7 |
+
echo $text;
|
8 |
+
?>
|
9 |
+
</div>
|
woocommerce-filters.php
CHANGED
@@ -1,16 +1,18 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: Advanced AJAX Product Filters for WooCommerce
|
4 |
-
* Plugin URI: https://wordpress.org/plugins/woocommerce-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
|
|
|
|
|
10 |
* Text Domain: BeRocket_AJAX_domain
|
11 |
* Domain Path: /languages/
|
12 |
-
* WC tested up to: 3.
|
13 |
*/
|
14 |
-
define( "BeRocket_AJAX_filters_version", '1.3.
|
15 |
define( "BeRocket_AJAX_filters_file", __FILE__ );
|
16 |
include_once('main.php');
|
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: Advanced AJAX Product Filters for WooCommerce
|
4 |
+
* Plugin URI: https://wordpress.org/plugins/woocommerce-ajax-filters/
|
5 |
* Description: Unlimited AJAX products filters to make your shop perfect
|
6 |
+
* Version: 1.3.2.6
|
7 |
* Author: BeRocket
|
8 |
* Requires at least: 4.0
|
9 |
+
* Author URI: https://berocket.com
|
10 |
+
* License: Berocket License
|
11 |
+
* License URI: https://berocket.com/license
|
12 |
* Text Domain: BeRocket_AJAX_domain
|
13 |
* Domain Path: /languages/
|
14 |
+
* WC tested up to: 3.7
|
15 |
*/
|
16 |
+
define( "BeRocket_AJAX_filters_version", '1.3.2.6' );
|
17 |
define( "BeRocket_AJAX_filters_file", __FILE__ );
|
18 |
include_once('main.php');
|