YITH WooCommerce Ajax Product Filter - Version 3.11.7

Version Description

  • Released on 22 January 2021 =

  • Fix: non-standard hook

Download this release

Release Info

Developer yithemes
Plugin Icon 128x128 YITH WooCommerce Ajax Product Filter
Version 3.11.7
Comparing to
See all releases

Code changes from version 3.11.6 to 3.11.7

README.txt CHANGED
@@ -4,7 +4,7 @@ Contributors: yithemes
4
  Tags: woocommerce ajax product filter download, woocommerce, widget, ajax, ajax filtered nav, ajax navigation, ajax filtered navigation, woocommerce layered navigation, woocommerce layered nav, product filter, product filters, ajax product filter, woocommerce ajax product filter, woocommerce filters, sidebar filter, sidebar ajax filter, ajax price filter, price filter, product sorting, woocommerce filter, taxonomy filter, attribute filter, attributes filter, woocommerce product sort, ajax sort, woocommerce ajax product filter, advanced product filters, ajax product filters, filters, woocommerce ajax product filters, woocommerce product filters, woocommerce product filters, category filter, attribute filters, woocommerce products filter, woocommerce price filter, yit, yith, yithemes
5
  Requires at least: 5.3
6
  Tested up to: 5.6
7
- Stable tag: 3.11.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -159,6 +159,10 @@ If you want to see a demonstration version of the premium plugin, you can see it
159
 
160
  == Changelog ==
161
 
 
 
 
 
162
  = 3.11.6 - Released on 11 January 2021 =
163
 
164
  * New: Support for WooCommerce 4.9
4
  Tags: woocommerce ajax product filter download, woocommerce, widget, ajax, ajax filtered nav, ajax navigation, ajax filtered navigation, woocommerce layered navigation, woocommerce layered nav, product filter, product filters, ajax product filter, woocommerce ajax product filter, woocommerce filters, sidebar filter, sidebar ajax filter, ajax price filter, price filter, product sorting, woocommerce filter, taxonomy filter, attribute filter, attributes filter, woocommerce product sort, ajax sort, woocommerce ajax product filter, advanced product filters, ajax product filters, filters, woocommerce ajax product filters, woocommerce product filters, woocommerce product filters, category filter, attribute filters, woocommerce products filter, woocommerce price filter, yit, yith, yithemes
5
  Requires at least: 5.3
6
  Tested up to: 5.6
7
+ Stable tag: 3.11.7
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
159
 
160
  == Changelog ==
161
 
162
+ = 3.11.7 - Released on 22 January 2021 =
163
+
164
+ * Fix: non-standard hook
165
+
166
  = 3.11.6 - Released on 11 January 2021 =
167
 
168
  * New: Support for WooCommerce 4.9
includes/functions.yith-wcan.php CHANGED
@@ -11,58 +11,58 @@ if ( ! defined( 'YITH_WCAN' ) ) {
11
  exit;
12
  } // Exit if accessed directly
13
 
14
-
15
  /**
16
  * Return a dropdown with Woocommerce attributes
17
  */
18
- function yith_wcan_dropdown_attributes( $selected, $echo = true ) {
19
- $_woocommerce = function_exists( 'wc' ) ? wc() : null;
20
- $options = "";
21
- $attributes = array();
22
-
23
- if ( ! empty( $_woocommerce ) ) {
24
-
25
- if ( function_exists( 'wc_get_attribute_taxonomies' ) ) {
26
- $attribute_taxonomies = wc_get_attribute_taxonomies();
27
- }
28
- else {
29
- $attribute_taxonomies = $_woocommerce->get_attribute_taxonomies();
30
- }
31
-
32
- if ( empty( $attribute_taxonomies ) ) {
33
- return array();
34
- }
35
 
36
- foreach ( $attribute_taxonomies as $attribute ) {
37
 
38
- /* FIX TO WOOCOMMERCE 2.1 */
39
- if ( function_exists( 'wc_attribute_taxonomy_name' ) ) {
40
- $taxonomy = wc_attribute_taxonomy_name( $attribute->attribute_name );
41
  }
42
  else {
43
- $taxonomy = $_woocommerce->attribute_taxonomy_name( $attribute->attribute_name );
 
 
 
 
44
  }
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
- if ( taxonomy_exists( $taxonomy ) ) {
48
- $attributes[] = $attribute->attribute_name;
49
  }
50
  }
51
 
52
- foreach ( $attributes as $attribute ) {
53
- $options .= "<option name='{$attribute}'" . selected( $attribute, $selected, false ) . ">{$attribute}</option>";
54
- }
 
 
 
55
  }
56
-
57
- if ( $echo ) {
58
- echo $options;
59
- }
60
- else {
61
- return $options;
62
- }
63
  }
64
 
65
-
66
  /**
67
  * Print the widgets options already filled
68
  *
@@ -74,102 +74,104 @@ function yith_wcan_dropdown_attributes( $selected, $echo = true ) {
74
  *
75
  * @return string
76
  */
77
- function yith_wcan_attributes_table( $type, $attribute, $id, $name, $values = array(), $echo = true ) {
78
- $return = '';
 
79
 
80
- if( empty( $attribute ) ){
81
- return $return;
82
- }
83
 
84
- $terms = get_terms( array( 'taxonomy' => 'pa_' . $attribute, 'hide_empty' => '0' ) );
85
- if ( 'list' == $type ) {
86
- $return = '<input type="hidden" name="' . $name . '[colors]" value="" /><input type="hidden" name="' . $name . '[labels]" value="" />';
87
- }
88
 
89
- elseif ( 'color' == $type ) {
90
- if ( ! empty( $terms ) ) {
91
- $return = sprintf( '<table><tr><th>%s</th><th>%s</th></tr>', __( 'Term', 'yith-woocommerce-ajax-navigation' ), __( 'Color', 'yith-woocommerce-ajax-navigation' ) );
92
 
93
- foreach ( $terms as $term ) {
94
- if( $term instanceof WP_Term ){
95
- $return .= "<tr><td><label for='{$id}{$term->term_id}'>{$term->name}</label></td><td><input type='text' id='{$id}{$term->term_id}' name='{$name}[colors][{$term->term_id}]' value='" . ( isset( $values[$term->term_id] ) ? $values[$term->term_id] : '' ) . "' size='3' class='yith-colorpicker' /></td></tr>";
96
- }
97
- }
98
 
99
- $return .= '</table>';
100
- }
101
 
102
- $return .= '<input type="hidden" name="' . $name . '[labels]" value="" />';
103
- }
104
 
105
- elseif ( 'multicolor' == $type ) {
106
- if ( ! empty( $terms ) ) {
107
- $return = sprintf( '<table class="yith-wcan-multicolor"><tr><th>%s</th><th>%s</th><th>%s</th></tr>', __( 'Term', 'yith-woocommerce-ajax-navigation' ), _x( 'Color 1', 'For multicolor: I.E. white and red T-Shirt', 'yith-woocommerce-ajax-navigation' ), _x( 'Color 2', 'For multicolor: I.E. white and red T-Shirt', 'yith-woocommerce-ajax-navigation' ) );
108
 
109
- foreach ( $terms as $term ) {
110
 
111
- $return .= "<tr>";
112
 
113
- $return .= "<td><label for='{$id}{$term->term_id}'>{$term->name}</label></td>";
114
 
115
- $return .= "<td><input type='text' id='{$id}{$term->term_id}_1' name='{$name}[multicolor][{$term->term_id}][]' value='" . ( isset( $values[$term->term_id][0] ) ? $values[$term->term_id][0] : '' ) . "' size='3' class='yith-colorpicker multicolor' /></td>";
116
- $return .= "<td><input type='text' id='{$id}{$term->term_id}_2' name='{$name}[multicolor][{$term->term_id}][]' value='" . ( isset( $values[$term->term_id][1] ) ? $values[$term->term_id][1] : '' ) . "' size='3' class='yith-colorpicker multicolor' /></td>";
117
 
118
- $return .= '</tr>';
119
- }
120
 
121
- $return .= '</table>';
122
- }
123
 
124
- $return .= '<input type="hidden" name="' . $name . '[labels]" value="" />';
125
- }
126
 
127
- elseif ( 'label' == $type ) {
128
- if ( ! empty( $terms ) ) {
129
- $return = sprintf( '<table><tr><th>%s</th><th>%s</th></tr>', __( 'Term', 'yith-woocommerce-ajax-navigation' ), __( 'Labels', 'yith-woocommerce-ajax-navigation' ) );
130
 
131
- foreach ( $terms as $term ) {
132
- if( $term instanceof WP_Term){
133
- $return .= "<tr><td><label for='{$id}{$term->term_id}'>{$term->name}</label></td><td><input type='text' id='{$id}{$term->term_id}' name='{$name}[labels][{$term->term_id}]' value='" . ( isset( $values[$term->term_id] ) ? $values[$term->term_id] : '' ) . "' size='3' /></td></tr>";
134
- }
135
- }
136
 
137
- $return .= '</table>';
138
- }
139
 
140
- $return .= '<input type="hidden" name="' . $name . '[colors]" value="" />';
141
- }
142
 
143
- if ( $echo ) {
144
- echo $return;
145
- }
146
 
147
- return $return;
 
148
  }
149
 
150
-
151
  /**
152
  * Can the widget be displayed?
153
  *
154
  * @return bool
155
  */
156
- function yith_wcan_can_be_displayed() {
157
- $return = false;
158
-
159
- if (
160
- ( is_active_widget( false, false, 'yith-woo-ajax-navigation', true ) ||
161
- is_active_widget( false, false, 'yith-woo-ajax-navigation-sort-by', true ) ||
162
- is_active_widget( false, false, 'yith-woo-ajax-navigation-stock-on-sale', true ) ||
163
- is_active_widget( false, false, 'yith-woo-ajax-navigation-list-price-filter', true ) ) &&
164
- ( is_shop() || defined( 'SHOP_IS_ON_FRONT' ) || is_product_taxonomy() || is_product_category() )
165
- ) {
166
- $return = true;
167
- }
 
168
 
169
- return apply_filters( 'yith_wcan_can_be_displayed', $return );
 
170
  }
171
 
172
-
173
  if ( ! function_exists( 'yit_curPageURL' ) ) {
174
  /**
175
  * Retrieve the current complete url
@@ -854,3 +856,33 @@ if( ! function_exists( 'yith_wcan_add_rel_nofollow_to_url' ) ){
854
  return $return;
855
  }
856
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  exit;
12
  } // Exit if accessed directly
13
 
 
14
  /**
15
  * Return a dropdown with Woocommerce attributes
16
  */
17
+ if( ! function_exists( 'yith_wcan_dropdown_attributes' ) ){
18
+ function yith_wcan_dropdown_attributes( $selected, $echo = true ) {
19
+ $_woocommerce = function_exists( 'wc' ) ? wc() : null;
20
+ $options = "";
21
+ $attributes = array();
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
+ if ( ! empty( $_woocommerce ) ) {
24
 
25
+ if ( function_exists( 'wc_get_attribute_taxonomies' ) ) {
26
+ $attribute_taxonomies = wc_get_attribute_taxonomies();
 
27
  }
28
  else {
29
+ $attribute_taxonomies = $_woocommerce->get_attribute_taxonomies();
30
+ }
31
+
32
+ if ( empty( $attribute_taxonomies ) ) {
33
+ return array();
34
  }
35
 
36
+ foreach ( $attribute_taxonomies as $attribute ) {
37
+
38
+ /* FIX TO WOOCOMMERCE 2.1 */
39
+ if ( function_exists( 'wc_attribute_taxonomy_name' ) ) {
40
+ $taxonomy = wc_attribute_taxonomy_name( $attribute->attribute_name );
41
+ }
42
+ else {
43
+ $taxonomy = $_woocommerce->attribute_taxonomy_name( $attribute->attribute_name );
44
+ }
45
+
46
+
47
+ if ( taxonomy_exists( $taxonomy ) ) {
48
+ $attributes[] = $attribute->attribute_name;
49
+ }
50
+ }
51
 
52
+ foreach ( $attributes as $attribute ) {
53
+ $options .= "<option name='{$attribute}'" . selected( $attribute, $selected, false ) . ">{$attribute}</option>";
54
  }
55
  }
56
 
57
+ if ( $echo ) {
58
+ echo $options;
59
+ }
60
+ else {
61
+ return $options;
62
+ }
63
  }
 
 
 
 
 
 
 
64
  }
65
 
 
66
  /**
67
  * Print the widgets options already filled
68
  *
74
  *
75
  * @return string
76
  */
77
+ if( ! function_exists( 'yith_wcan_attributes_table' ) ){
78
+ function yith_wcan_attributes_table( $type, $attribute, $id, $name, $values = array(), $echo = true ) {
79
+ $return = '';
80
 
81
+ if( empty( $attribute ) ){
82
+ return $return;
83
+ }
84
 
85
+ $terms = get_terms( array( 'taxonomy' => 'pa_' . $attribute, 'hide_empty' => '0' ) );
86
+ if ( 'list' == $type ) {
87
+ $return = '<input type="hidden" name="' . $name . '[colors]" value="" /><input type="hidden" name="' . $name . '[labels]" value="" />';
88
+ }
89
 
90
+ elseif ( 'color' == $type ) {
91
+ if ( ! empty( $terms ) ) {
92
+ $return = sprintf( '<table><tr><th>%s</th><th>%s</th></tr>', __( 'Term', 'yith-woocommerce-ajax-navigation' ), __( 'Color', 'yith-woocommerce-ajax-navigation' ) );
93
 
94
+ foreach ( $terms as $term ) {
95
+ if( $term instanceof WP_Term ){
96
+ $return .= "<tr><td><label for='{$id}{$term->term_id}'>{$term->name}</label></td><td><input type='text' id='{$id}{$term->term_id}' name='{$name}[colors][{$term->term_id}]' value='" . ( isset( $values[$term->term_id] ) ? $values[$term->term_id] : '' ) . "' size='3' class='yith-colorpicker' /></td></tr>";
97
+ }
98
+ }
99
 
100
+ $return .= '</table>';
101
+ }
102
 
103
+ $return .= '<input type="hidden" name="' . $name . '[labels]" value="" />';
104
+ }
105
 
106
+ elseif ( 'multicolor' == $type ) {
107
+ if ( ! empty( $terms ) ) {
108
+ $return = sprintf( '<table class="yith-wcan-multicolor"><tr><th>%s</th><th>%s</th><th>%s</th></tr>', __( 'Term', 'yith-woocommerce-ajax-navigation' ), _x( 'Color 1', 'For multicolor: I.E. white and red T-Shirt', 'yith-woocommerce-ajax-navigation' ), _x( 'Color 2', 'For multicolor: I.E. white and red T-Shirt', 'yith-woocommerce-ajax-navigation' ) );
109
 
110
+ foreach ( $terms as $term ) {
111
 
112
+ $return .= "<tr>";
113
 
114
+ $return .= "<td><label for='{$id}{$term->term_id}'>{$term->name}</label></td>";
115
 
116
+ $return .= "<td><input type='text' id='{$id}{$term->term_id}_1' name='{$name}[multicolor][{$term->term_id}][]' value='" . ( isset( $values[$term->term_id][0] ) ? $values[$term->term_id][0] : '' ) . "' size='3' class='yith-colorpicker multicolor' /></td>";
117
+ $return .= "<td><input type='text' id='{$id}{$term->term_id}_2' name='{$name}[multicolor][{$term->term_id}][]' value='" . ( isset( $values[$term->term_id][1] ) ? $values[$term->term_id][1] : '' ) . "' size='3' class='yith-colorpicker multicolor' /></td>";
118
 
119
+ $return .= '</tr>';
120
+ }
121
 
122
+ $return .= '</table>';
123
+ }
124
 
125
+ $return .= '<input type="hidden" name="' . $name . '[labels]" value="" />';
126
+ }
127
 
128
+ elseif ( 'label' == $type ) {
129
+ if ( ! empty( $terms ) ) {
130
+ $return = sprintf( '<table><tr><th>%s</th><th>%s</th></tr>', __( 'Term', 'yith-woocommerce-ajax-navigation' ), __( 'Labels', 'yith-woocommerce-ajax-navigation' ) );
131
 
132
+ foreach ( $terms as $term ) {
133
+ if( $term instanceof WP_Term){
134
+ $return .= "<tr><td><label for='{$id}{$term->term_id}'>{$term->name}</label></td><td><input type='text' id='{$id}{$term->term_id}' name='{$name}[labels][{$term->term_id}]' value='" . ( isset( $values[$term->term_id] ) ? $values[$term->term_id] : '' ) . "' size='3' /></td></tr>";
135
+ }
136
+ }
137
 
138
+ $return .= '</table>';
139
+ }
140
 
141
+ $return .= '<input type="hidden" name="' . $name . '[colors]" value="" />';
142
+ }
143
 
144
+ if ( $echo ) {
145
+ echo $return;
146
+ }
147
 
148
+ return $return;
149
+ }
150
  }
151
 
 
152
  /**
153
  * Can the widget be displayed?
154
  *
155
  * @return bool
156
  */
157
+ if( ! function_exists( 'yith_wcan_can_be_displayed' ) ){
158
+ function yith_wcan_can_be_displayed() {
159
+ $return = false;
160
+
161
+ if (
162
+ ( is_active_widget( false, false, 'yith-woo-ajax-navigation', true ) ||
163
+ is_active_widget( false, false, 'yith-woo-ajax-navigation-sort-by', true ) ||
164
+ is_active_widget( false, false, 'yith-woo-ajax-navigation-stock-on-sale', true ) ||
165
+ is_active_widget( false, false, 'yith-woo-ajax-navigation-list-price-filter', true ) ) &&
166
+ ( is_shop() || defined( 'SHOP_IS_ON_FRONT' ) || is_product_taxonomy() || is_product_category() )
167
+ ) {
168
+ $return = true;
169
+ }
170
 
171
+ return apply_filters( 'yith_wcan_can_be_displayed', $return );
172
+ }
173
  }
174
 
 
175
  if ( ! function_exists( 'yit_curPageURL' ) ) {
176
  /**
177
  * Retrieve the current complete url
856
  return $return;
857
  }
858
  }
859
+
860
+ /* Deprecated Filters */
861
+ if( ! function_exists( 'yith_wcan_deprecated_filters' ) ){
862
+ function yith_wcan_deprecated_filter( $deprecated_filters_map ){
863
+ foreach ( $deprecated_filters_map as $deprecated_filter => $options ) {
864
+ $new_filter = $options['use'];
865
+ $params = $options['params'];
866
+ $since = $options['since'];
867
+ add_filter(
868
+ $new_filter,
869
+ function () use ( $deprecated_filter, $since, $new_filter ) {
870
+ $args = func_get_args();
871
+ $r = $args[0];
872
+
873
+ if ( has_filter( $deprecated_filter ) ) {
874
+ error_log( sprintf( 'Deprecated filter: %s since %s. Use %s instead!', $deprecated_filter, $since, $new_filter ) ); //phpcs:ignore
875
+
876
+ $r = call_user_func_array( 'apply_filters', array_merge( array( $deprecated_filter ), $args ) );
877
+ }
878
+
879
+ return $r;
880
+ },
881
+ 10,
882
+ $params
883
+ );
884
+ }
885
+ }
886
+ }
887
+
888
+
init.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: YITH WooCommerce Ajax Product Filter
4
  * Plugin URI: https://wordpress.org/plugins/yith-woocommerce-ajax-navigation/
5
  * Description:<code><strong>YITH WooCommerce AJAX Product Filter</strong></code> allows your users to find the product they are looking for as quickly as possible. Thanks to the plugin you will be able to set up one or more search filters for your WooCommerce products, improve the user experience and give the impression of being in a big and reliable store. <a href="https://yithemes.com/" target="_blank">Get more plugins for your e-commerce shop on <strong>YITH</strong></a>
6
- * Version: 3.11.6
7
  * Author: YITH
8
  * Author URI: https://yithemes.com/
9
  * Text Domain: yith-woocommerce-ajax-navigation
@@ -67,7 +67,7 @@ load_plugin_textdomain( 'yith-woocommerce-ajax-navigation', false, dirname( plug
67
  ! defined( 'YITH_WCAN' ) && define( 'YITH_WCAN', true );
68
  ! defined( 'YITH_WCAN_URL' ) && define( 'YITH_WCAN_URL', plugin_dir_url( __FILE__ ) );
69
  ! defined( 'YITH_WCAN_DIR' ) && define( 'YITH_WCAN_DIR', plugin_dir_path( __FILE__ ) );
70
- ! defined( 'YITH_WCAN_VERSION' ) && define( 'YITH_WCAN_VERSION', '3.11.6' );
71
  ! defined( 'YITH_WCAN_FREE_INIT') && define( 'YITH_WCAN_FREE_INIT', plugin_basename( __FILE__ ) );
72
  ! defined( 'YITH_WCAN_FILE' ) && define( 'YITH_WCAN_FILE', __FILE__ );
73
 
3
  * Plugin Name: YITH WooCommerce Ajax Product Filter
4
  * Plugin URI: https://wordpress.org/plugins/yith-woocommerce-ajax-navigation/
5
  * Description:<code><strong>YITH WooCommerce AJAX Product Filter</strong></code> allows your users to find the product they are looking for as quickly as possible. Thanks to the plugin you will be able to set up one or more search filters for your WooCommerce products, improve the user experience and give the impression of being in a big and reliable store. <a href="https://yithemes.com/" target="_blank">Get more plugins for your e-commerce shop on <strong>YITH</strong></a>
6
+ * Version: 3.11.7
7
  * Author: YITH
8
  * Author URI: https://yithemes.com/
9
  * Text Domain: yith-woocommerce-ajax-navigation
67
  ! defined( 'YITH_WCAN' ) && define( 'YITH_WCAN', true );
68
  ! defined( 'YITH_WCAN_URL' ) && define( 'YITH_WCAN_URL', plugin_dir_url( __FILE__ ) );
69
  ! defined( 'YITH_WCAN_DIR' ) && define( 'YITH_WCAN_DIR', plugin_dir_path( __FILE__ ) );
70
+ ! defined( 'YITH_WCAN_VERSION' ) && define( 'YITH_WCAN_VERSION', '3.11.7' );
71
  ! defined( 'YITH_WCAN_FREE_INIT') && define( 'YITH_WCAN_FREE_INIT', plugin_basename( __FILE__ ) );
72
  ! defined( 'YITH_WCAN_FILE' ) && define( 'YITH_WCAN_FILE', __FILE__ );
73
 
plugin-fw/assets/js/yith-fields.js CHANGED
@@ -203,7 +203,8 @@
203
  } );
204
 
205
  $image_gallery_ids.val( attachment_ids );
206
- } );
 
207
 
208
  image_gallery_frame.open();
209
 
@@ -808,4 +809,4 @@
808
  };
809
  fw_dimensions.init();
810
 
811
- } )( jQuery );
203
  } );
204
 
205
  $image_gallery_ids.val( attachment_ids );
206
+ $image_gallery_ids.trigger( 'change' );
207
+ } );
208
 
209
  image_gallery_frame.open();
210
 
809
  };
810
  fw_dimensions.init();
811
 
812
+ } )( jQuery );
plugin-fw/assets/js/yith-fields.min.js CHANGED
@@ -1 +1 @@
1
- !function(e){e(document).on("yith_fields_init",function(){var t=e(".yith-plugin-fw-datepicker"),i=e(".yith-plugin-fw-colorpicker"),n={imgPreviewHandler:".yith-plugin-fw-upload-img-preview",uploadButtonHandler:".yith-plugin-fw-upload-button",imgUrlHandler:".yith-plugin-fw-upload-img-url",resetButtonHandler:".yith-plugin-fw-upload-button-reset",imgUrl:e(".yith-plugin-fw-upload-img-url")},a=e(".add_media"),l={rootSelector:".yith-plugin-fw-image-gallery",buttonSelector:".yith-plugin-fw-image-gallery .image-gallery-button",sliderWrapper:e(".yith-plugin-fw-image-gallery ul.slides-wrapper")},o=e(".yith-plugin-fw-sidebar-layout"),s=e(".yith-plugin-fw .yith-plugin-fw-slider-container .ui-slider-horizontal"),r=e(".yit-icons-manager-wrapper");e(".yith-plugin-ui td.forminp-checkbox");t.each(function(){var t=e(this).data();t.showAnim=!1,t.beforeShow=function(e,t){t.dpDiv.addClass("yith-plugin-fw-datepicker-div")},t.onClose=function(e,t){t.dpDiv.removeClass("yith-plugin-fw-datepicker-div")},e(this).datepicker(t)}),i.wpColorPicker({palettes:!1,width:200,mode:"hsl",clear:function(){var t=e(this);t.val(t.data("default-color")),t.change()}}),i.each(function(){var t=e(this).data("variations-label"),i=e(this).closest(".yith-plugin-fw-colorpicker-field-wrapper"),n=e(this).closest(".yith-single-colorpicker"),a=i.find(".wp-picker-input-wrap"),l=n.find(".wp-picker-input-wrap");if(a.length&&i.find("a.wp-color-result").attr("title",t),n.length&&n.find("a.wp-color-result").attr("title",t),!a.find(".wp-picker-default-custom").length){var o=e("<span/>").attr({"class":"wp-picker-default-custom"});a.find(".wp-picker-default").wrap(o)}l.find(".wp-picker-default-custom").length||(o=e("<span/>").attr({"class":"wp-picker-default-custom"}),l.find(".wp-picker-default").wrap(o))}),"undefined"!=typeof wp&&"undefined"!=typeof wp.media&&(n.imgUrl.change(function(){var t=e(this).val(),i=new RegExp("(http|ftp|https)://[a-zA-Z0-9@?^=%&amp;:/~+#-_.]*.(gif|jpg|jpeg|png|ico|svg)"),a=e(this).parent().find(n.imgPreviewHandler).first();a.length<1&&(a=e(this).parent().parent().find(n.imgPreviewHandler).first()),i.test(t)?a.html('<img src="'+t+'" style="max-width:100px; max-height:100px;" />'):a.html("")}).trigger("change"),e(document).on("click",n.uploadButtonHandler,function(t){t.preventDefault();var i,a=e(this).attr("id").replace(/-button$/,"").replace(/(\[|\])/g,"\\$1");if(i)i.open();else{var l=[new wp.media.controller.Library({library:wp.media.query(),multiple:!1,title:"Choose Image",priority:20,filterable:"uploaded"})];(i=wp.media.frames.downloadable_file=wp.media({title:"Choose Image",library:{type:""},button:{text:"Choose Image"},multiple:!1,states:l})).on("select",function(){var t=i.state().get("selection").first().toJSON();e("#"+a).val(t.url),e("#"+a+"-yith-attachment-id")&&e("#"+a+"-yith-attachment-id").val(t.id),n.imgUrl.trigger("change")}),i.open()}}),e(document).on("click",n.resetButtonHandler,function(t){var i=e(this),a=i.attr("id").replace(/(\[|\])/g,"\\$1"),l=i.attr("id").replace(/-button-reset$/,"").replace(/(\[|\])/g,"\\$1"),o=e("#"+a).data("default");e("#"+l).val(o),n.imgUrl.trigger("change")}));a.on("click",function(){}),"undefined"!=typeof wp&&"undefined"!=typeof wp.media&&(e(document).on("click",l.buttonSelector,function(t){var i=e(this),n=i.closest(l.rootSelector),a=n.find(".image_gallery_ids"),o=a.val(),s=n.find("ul.slides-wrapper"),r=wp.media.frames.image_gallery=wp.media({title:i.data("choose"),button:{text:i.data("update")},states:[new wp.media.controller.Library({title:i.data("choose"),filterable:"all",multiple:!0})]});r.on("select",function(){r.state().get("selection").map(function(e){(e=e.toJSON()).id&&(o=o?o+","+e.id:e.id,s.append('<li class="image" data-attachment_id="'+e.id+'"><img src="'+e.sizes.thumbnail.url+'"/><ul class="actions"><li><a href="#" class="delete" title="'+i.data("delete")+'">x</a></li></ul></li>'))}),a.val(o)}),r.open()}),l.sliderWrapper.each(function(){var t=e(this);t.sortable({items:"li.image",cursor:"move",scrollSensitivity:40,forcePlaceholderSize:!0,forceHelperSize:!1,helper:"clone",opacity:.65,start:function(e,t){t.item.css("background-color","#f6f6f6")},stop:function(e,t){t.item.removeAttr("style")},update:function(i,n){var a="";t.find("li.image").css("cursor","default").each(function(){var t=e(this).attr("data-attachment_id");a=a+t+","}),t.closest(l.rootSelector).find(".image_gallery_ids").val(a)}})}),l.sliderWrapper.on("click","a.delete",function(t){t.preventDefault();var i=e(this).closest(l.rootSelector),n=i.find("ul.slides-wrapper"),a=i.find(".image_gallery_ids"),o="";e(this).closest("li.image").remove(),n.find("li.image").css("cursor","default").each(function(){var t=e(this).attr("data-attachment_id");o=o+t+","}),a.val(o)})),o.each(function(){e(this).find("img").on("click",function(){var t=e(this).closest(".yith-plugin-fw-sidebar-layout"),i=t.find(".yith-plugin-fw-sidebar-layout-sidebar-left-container"),n=t.find(".yith-plugin-fw-sidebar-layout-sidebar-right-container"),a=e(this).data("type");if(e(this).parent().children(":radio").attr("checked",!1),e(this).prev(":radio").attr("checked",!0),void 0!==a)switch(a){case"left":i.show(),n.hide();break;case"right":n.show(),i.hide();break;case"double":i.show(),n.show();break;default:i.hide(),n.hide()}})}),s.each(function(){var t=e(this).data("val"),i=e(this).data("min"),n=e(this).data("max"),a=e(this).data("step"),l=e(this).data("labels");e(this).slider({value:t,min:i,max:n,range:"min",step:a,create:function(){e(this).find(".ui-slider-handle").text(e(this).slider("value"))},slide:function(t,i){e(this).find("input").val(i.value),e(this).find(".ui-slider-handle").text(i.value),e(this).siblings(".feedback").find("strong").text(i.value+l)}})}),e(function(){e(document).on("yith-plugin-fw-codemirror-init",function(){"undefined"!=typeof wp&&"undefined"!=typeof wp.codeEditor&&e(".codemirror:not(.codemirror--initialized)").each(function(){var t=e(this).data("settings"),i=wp.codeEditor.initialize(e(this),t);e(this).addClass("codemirror--initialized"),e(this).data("codemirrorInstance",i)})}).trigger("yith-plugin-fw-codemirror-init")}),e(document).on("click",".yith-plugin-fw-select-all",function(){e("#"+e(this).data("select-id")).find("option").prop("selected",!0).trigger("change")}),e(document).on("click",".yith-plugin-fw-deselect-all",function(){e("#"+e(this).data("select-id")).find("option").prop("selected",!1).trigger("change")}),r.each(function(){var t=e(this),i=t.find(".yit-icons-manager-icon-preview").first(),n=t.find(".yit-icons-manager-icon-text");t.on("click",".yit-icons-manager-list li",function(a){var l=e(a.target).closest("li"),o=l.data("font"),s=l.data("icon"),r=l.data("key"),d=l.data("name");i.attr("data-font",o),i.attr("data-icon",s),i.attr("data-key",r),i.attr("data-name",d),n.val(o+":"+d),t.find(".yit-icons-manager-list li").removeClass("active"),l.addClass("active")}),t.on("click",".yit-icons-manager-action-set-default",function(){t.find(".yit-icons-manager-list li.default").trigger("click")})}),e(document).on("click",".yith-plugin-fw-select-images__item",function(){var t=e(this),i=t.data("key"),n=t.closest(".yith-plugin-fw-select-images__wrapper"),a=n.find(".yith-plugin-fw-select-images__item"),l=n.find("select").first();l.length&&(l.val(i).trigger("yith_select_images_value_changed"),a.removeClass("yith-plugin-fw-select-images__item--selected"),t.addClass("yith-plugin-fw-select-images__item--selected"))}),e(document.body).trigger("wc-enhanced-select-init"),e(document).find(".ui-sortable .yith-toggle-elements").sortable({cursor:"move",axis:"y",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",stop:function(t,i){var n=jQuery(".ui-sortable-handle"),a=0,l=new Array;for(a=0;a<n.length;a++)l[a]=e(n[a]).data("item_key");l.length>0&&e(this).closest(".toggle-element").saveToggleElement(null,l)}}),e(document.body).trigger("yith-framework-enhanced-select-init")}).trigger("yith_fields_init"),e(document).on("click",".yith-plugin-fw-onoff-container span",function(){var t=e(this).prev("input");t.prop("checked")?t.prop("checked",!1).attr("value","no").removeClass("onoffchecked"):t.prop("checked",!0).attr("value","yes").addClass("onoffchecked"),t.change()}),e.fn.saveToggleElement=function(t,i){var n=e(this),a="yith_plugin_fw_save_toggle_element",l=n.serializeToggleElement(),o=n.find(".yith-toggle_wrapper"),s=o.attr("id"),r=e.urlParam("tab");l.append("security",o.data("nonce")),void 0!==i&&i.length>0&&l.append("yith_toggle_elements_order_keys",i),n.closest(".metaboxes-tab.yith-plugin-ui").length?(a="yith_plugin_fw_save_toggle_element_metabox",post_id=e(this).closest("form#post").find("#post_ID").val(),yit_metaboxes_nonce=e(this).closest("form#post").find("#yit_metaboxes_nonce").val(),metabox_tab=e(this).closest(".tabs-panel").attr("id"),url=yith_framework_fw_fields.ajax_url+"?action="+a+"&post_ID="+post_id+"&yit_metaboxes_nonce="+yit_metaboxes_nonce+"&toggle_id="+s+"&metabox_tab="+metabox_tab):url=yith_framework_fw_fields.admin_url+"?action="+a+"&tab="+r+"&toggle_id="+s,e.ajax({type:"POST",url:url,data:l,contentType:!1,processData:!1,success:function(i){t&&t.removeClass("show"),e(document).trigger("yith_save_toggle_element_done",[i,n])}})},e.fn.serializeToggleElement=function(){var t=e(this),i=new FormData,n=e(t).find(":input").serializeArray();return e.each(n,function(e,t){el_name=t.name,i.append(t.name,t.value)}),i},e.fn.formatToggleTitle=function(){var t=e(this),i=t.find(":input"),n=t.find("span.title").data("title_format"),a=t.find(".subtitle").data("subtitle_format"),l=new RegExp("[^%%]+(?=[%%])","g");if(void 0!==n)var o=n.match(l);if(void 0!==a)var s=a.match(l);e.each(i,function(t,i){void 0!==e(i).attr("id")&&($field_id=e(i).attr("id"),$field_array=$field_id.split("_"),$field_array.pop(),$field_id=$field_array.join("_"),$field_val=e(i).val(),null!=o&&void 0!==o&&-1!==o.indexOf($field_id)&&(n=n.replace("%%"+$field_id+"%%",$field_val)),null!=s&&void 0!==s&&-1!==s.indexOf($field_id)&&(a=a.replace("%%"+$field_id+"%%",$field_val)))}),""!==n&&t.find("span.title").html(n),""!==a&&t.find(".subtitle").html(a),e(document).trigger("yith-toggle-element-item-title",[t])},e.urlParam=function(e){var t=new RegExp("[?&]"+e+"=([^&#]*)").exec(window.location.search);return null!==t&&(t[1]||0)},e(document).on("click",".yith-toggle-title",function(t){var i=e(t.target),n=i.closest(".yith-toggle-row"),a=n.find(".yith-toggle-content");if(i.hasClass("yith-plugin-fw-onoff")||i.hasClass("yith-icon-drag"))return!1;n.is(".yith-toggle-row-opened")?a.slideUp(400):a.slideDown(400),n.toggleClass("yith-toggle-row-opened")}),e(document).on("click",".yith-add-box-button",function(t){t.preventDefault();var i=e(this),n=i.data("box_id"),a=i.data("closed_label"),l=i.data("opened_label"),o=i.closest(".yith-toggle_wrapper").attr("id"),s=wp.template("yith-toggle-element-add-box-content-"+o);""!==n&&(e("#"+n).html(s({index:"box_id"})).slideToggle(),""!==a&&(i.html()===a?i.html(l).removeClass("closed"):i.html(a).addClass("closed")),e(document).trigger("yith_fields_init"),e(document).trigger("yith-add-box-button-toggle",[i]))}),e(document).on("click",".yith-add-box-buttons .yith-save-button",function(t){t.preventDefault();var i=e(this).parents(".yith-add-box"),n=e(this).closest(".yith-toggle_wrapper").attr("id"),a=i.find(".spinner"),l=e(this).parents(".toggle-element"),o=i.find(":input"),s=0,r=e('<input type="hidden">');l.find(".yith-toggle-row").each(function(){var t=parseInt(e(this).data("item_key"));s<=t&&(s=t+1)}),r.val(s),e(document).trigger("yith-toggle-change-counter",[r,i]),s=r.val();var d=wp.template("yith-toggle-element-item-"+n),c=e(d({index:s}));a.addClass("show"),e.each(o,function(t,i){if(void 0!==e(i).attr("id")){var n=e(i).attr("id"),a=e(i).val();n="radio"===e(i).attr("type")?(n=(n=e(i).closest(".yith-plugin-fw-radio").attr("id")).replace("new_","")+"_"+s)+"-"+a:n.replace("new_","")+"_"+s,e(i).is(":checked")&&e(c).find("#"+n).prop("checked",!0),(e(i).hasClass("yith-post-search")||e(i).hasClass("yith-term-search"))&&e(c).find("#"+n).html(e("#"+e(i).attr("id")).html()),e(c).find("#"+n).val(a)}}),e(c).formatToggleTitle();var u=e('<input type="hidden">').val("yes");e(document).trigger("yith-toggle-element-item-before-add",[i,c,u]);setTimeout(function(){if("yes"===u.val()){e(l).find(".yith-toggle-elements").append(c),e(i).find(".yith-plugin-fw-datepicker").datepicker("destroy"),e(i).html(""),e(i).prev(".yith-add-box-button").trigger("click"),l.saveToggleElement();setTimeout(function(){e(l).find(".highlight").removeClass("highlight")},2e3),e(document).trigger("yith_fields_init")}},1e3)}),e(document).on("click",".yith-toggle-row .yith-save-button",function(t){t.preventDefault();var i=e(this).closest(".toggle-element"),n=e(this).closest(".yith-toggle-row"),a=n.find(".spinner");n.formatToggleTitle();var l=e('<input type="hidden">').val("yes");e(document).trigger("yith-toggle-element-item-before-update",[i,n,l]),"yes"===l.val()&&(a.addClass("show"),i.saveToggleElement(a))}),e(document).on("click",".yith-toggle-row .yith-delete-button",function(t){t.preventDefault();var i=e(this).closest(".toggle-element");e(this).closest(".yith-toggle-row").remove(),i.saveToggleElement()}),e(document).on("click",".yith-toggle-onoff",function(t){t.preventDefault(),e(this).closest(".toggle-element").saveToggleElement()}),e(document).on("click",".yith-plugin-fw-radio input[type=radio]",function(){var t=e(this).closest(".yith-plugin-fw-radio"),i=e(this).val();t.val(i).data("value",i).trigger("change")}),e(document.body).on("yith-plugin-fw-init-radio",function(){e(".yith-plugin-fw-radio:not(.yith-plugin-fw-radio--initialized)").each(function(){e(this).val(e(this).data("value")),e(this).addClass("yith-plugin-fw-radio--initialized")})}).trigger("yith-plugin-fw-init-radio"),e(document).on("click",".yith-password-eye",function(){var t=e(this),i=e(this).closest(".yith-password-wrapper").find("input");"password"===i.attr("type")?(i.attr("type","text"),t.addClass("yith-password-eye-closed")):(i.attr("type","password"),t.removeClass("yith-password-eye-closed"))}),e(document).on("select2:open",function(t){e(t.target).closest(".yith-plugin-ui").length&&e(".select2-results").closest(".select2-container").addClass("yith-plugin-fw-select2-container")});var t={selectors:{wrapper:".yith-plugin-fw-dimensions",units:{wrapper:".yith-plugin-fw-dimensions__units",single:".yith-plugin-fw-dimensions__unit",value:".yith-plugin-fw-dimensions__unit__value",selectedClass:"yith-plugin-fw-dimensions__unit--selected"},linked:{button:".yith-plugin-fw-dimensions__linked",value:".yith-plugin-fw-dimensions__linked__value",wrapperActiveClass:"yith-plugin-fw-dimensions--linked-active"},dimensions:{number:".yith-plugin-fw-dimensions__dimension__number"}},init:function(){var i=t;e(document).on("click",i.selectors.units.single,i.unitChange),e(document).on("click",i.selectors.linked.button,i.linkedChange),e(document).on("change keyup",i.selectors.dimensions.number,i.numberChange)},unitChange:function(i){var n=e(this).closest(t.selectors.units.single),a=n.closest(t.selectors.units.wrapper),l=a.find(t.selectors.units.single),o=a.find(t.selectors.units.value).first(),s=n.data("value");l.removeClass(t.selectors.units.selectedClass),n.addClass(t.selectors.units.selectedClass),o.val(s)},linkedChange:function(){var i=e(this).closest(t.selectors.linked.button),n=i.closest(t.selectors.wrapper),a=i.find(t.selectors.linked.value);"yes"===a.val()?(n.removeClass(t.selectors.linked.wrapperActiveClass),a.val("no")):(n.addClass(t.selectors.linked.wrapperActiveClass),a.val("yes"),n.find(t.selectors.dimensions.number).first().trigger("change"))},numberChange:function(i){var n=e(this).closest(t.selectors.dimensions.number),a=n.closest(t.selectors.wrapper);a.hasClass(t.selectors.linked.wrapperActiveClass)&&a.find(t.selectors.dimensions.number).val(n.val())}};t.init()}(jQuery);
1
+ !function(e){e(document).on("yith_fields_init",function(){var t=e(".yith-plugin-fw-datepicker"),i=e(".yith-plugin-fw-colorpicker"),n={imgPreviewHandler:".yith-plugin-fw-upload-img-preview",uploadButtonHandler:".yith-plugin-fw-upload-button",imgUrlHandler:".yith-plugin-fw-upload-img-url",resetButtonHandler:".yith-plugin-fw-upload-button-reset",imgUrl:e(".yith-plugin-fw-upload-img-url")},a=e(".add_media"),l={rootSelector:".yith-plugin-fw-image-gallery",buttonSelector:".yith-plugin-fw-image-gallery .image-gallery-button",sliderWrapper:e(".yith-plugin-fw-image-gallery ul.slides-wrapper")},o=e(".yith-plugin-fw-sidebar-layout"),s=e(".yith-plugin-fw .yith-plugin-fw-slider-container .ui-slider-horizontal"),r=e(".yit-icons-manager-wrapper");e(".yith-plugin-ui td.forminp-checkbox");t.each(function(){var t=e(this).data();t.showAnim=!1,t.beforeShow=function(e,t){t.dpDiv.addClass("yith-plugin-fw-datepicker-div")},t.onClose=function(e,t){t.dpDiv.removeClass("yith-plugin-fw-datepicker-div")},e(this).datepicker(t)}),i.wpColorPicker({palettes:!1,width:200,mode:"hsl",clear:function(){var t=e(this);t.val(t.data("default-color")),t.change()}}),i.each(function(){var t=e(this).data("variations-label"),i=e(this).closest(".yith-plugin-fw-colorpicker-field-wrapper"),n=e(this).closest(".yith-single-colorpicker"),a=i.find(".wp-picker-input-wrap"),l=n.find(".wp-picker-input-wrap");if(a.length&&i.find("a.wp-color-result").attr("title",t),n.length&&n.find("a.wp-color-result").attr("title",t),!a.find(".wp-picker-default-custom").length){var o=e("<span/>").attr({"class":"wp-picker-default-custom"});a.find(".wp-picker-default").wrap(o)}l.find(".wp-picker-default-custom").length||(o=e("<span/>").attr({"class":"wp-picker-default-custom"}),l.find(".wp-picker-default").wrap(o))}),"undefined"!=typeof wp&&"undefined"!=typeof wp.media&&(n.imgUrl.change(function(){var t=e(this).val(),i=new RegExp("(http|ftp|https)://[a-zA-Z0-9@?^=%&amp;:/~+#-_.]*.(gif|jpg|jpeg|png|ico|svg)"),a=e(this).parent().find(n.imgPreviewHandler).first();a.length<1&&(a=e(this).parent().parent().find(n.imgPreviewHandler).first()),i.test(t)?a.html('<img src="'+t+'" style="max-width:100px; max-height:100px;" />'):a.html("")}).trigger("change"),e(document).on("click",n.uploadButtonHandler,function(t){t.preventDefault();var i,a=e(this).attr("id").replace(/-button$/,"").replace(/(\[|\])/g,"\\$1");if(i)i.open();else{var l=[new wp.media.controller.Library({library:wp.media.query(),multiple:!1,title:"Choose Image",priority:20,filterable:"uploaded"})];(i=wp.media.frames.downloadable_file=wp.media({title:"Choose Image",library:{type:""},button:{text:"Choose Image"},multiple:!1,states:l})).on("select",function(){var t=i.state().get("selection").first().toJSON();e("#"+a).val(t.url),e("#"+a+"-yith-attachment-id")&&e("#"+a+"-yith-attachment-id").val(t.id),n.imgUrl.trigger("change")}),i.open()}}),e(document).on("click",n.resetButtonHandler,function(t){var i=e(this),a=i.attr("id").replace(/(\[|\])/g,"\\$1"),l=i.attr("id").replace(/-button-reset$/,"").replace(/(\[|\])/g,"\\$1"),o=e("#"+a).data("default");e("#"+l).val(o),n.imgUrl.trigger("change")}));a.on("click",function(){}),"undefined"!=typeof wp&&"undefined"!=typeof wp.media&&(e(document).on("click",l.buttonSelector,function(t){var i=e(this),n=i.closest(l.rootSelector),a=n.find(".image_gallery_ids"),o=a.val(),s=n.find("ul.slides-wrapper"),r=wp.media.frames.image_gallery=wp.media({title:i.data("choose"),button:{text:i.data("update")},states:[new wp.media.controller.Library({title:i.data("choose"),filterable:"all",multiple:!0})]});r.on("select",function(){r.state().get("selection").map(function(e){(e=e.toJSON()).id&&(o=o?o+","+e.id:e.id,s.append('<li class="image" data-attachment_id="'+e.id+'"><img src="'+e.sizes.thumbnail.url+'"/><ul class="actions"><li><a href="#" class="delete" title="'+i.data("delete")+'">x</a></li></ul></li>'))}),a.val(o),a.trigger("change")}),r.open()}),l.sliderWrapper.each(function(){var t=e(this);t.sortable({items:"li.image",cursor:"move",scrollSensitivity:40,forcePlaceholderSize:!0,forceHelperSize:!1,helper:"clone",opacity:.65,start:function(e,t){t.item.css("background-color","#f6f6f6")},stop:function(e,t){t.item.removeAttr("style")},update:function(i,n){var a="";t.find("li.image").css("cursor","default").each(function(){var t=e(this).attr("data-attachment_id");a=a+t+","}),t.closest(l.rootSelector).find(".image_gallery_ids").val(a)}})}),l.sliderWrapper.on("click","a.delete",function(t){t.preventDefault();var i=e(this).closest(l.rootSelector),n=i.find("ul.slides-wrapper"),a=i.find(".image_gallery_ids"),o="";e(this).closest("li.image").remove(),n.find("li.image").css("cursor","default").each(function(){var t=e(this).attr("data-attachment_id");o=o+t+","}),a.val(o)})),o.each(function(){e(this).find("img").on("click",function(){var t=e(this).closest(".yith-plugin-fw-sidebar-layout"),i=t.find(".yith-plugin-fw-sidebar-layout-sidebar-left-container"),n=t.find(".yith-plugin-fw-sidebar-layout-sidebar-right-container"),a=e(this).data("type");if(e(this).parent().children(":radio").attr("checked",!1),e(this).prev(":radio").attr("checked",!0),void 0!==a)switch(a){case"left":i.show(),n.hide();break;case"right":n.show(),i.hide();break;case"double":i.show(),n.show();break;default:i.hide(),n.hide()}})}),s.each(function(){var t=e(this).data("val"),i=e(this).data("min"),n=e(this).data("max"),a=e(this).data("step"),l=e(this).data("labels");e(this).slider({value:t,min:i,max:n,range:"min",step:a,create:function(){e(this).find(".ui-slider-handle").text(e(this).slider("value"))},slide:function(t,i){e(this).find("input").val(i.value),e(this).find(".ui-slider-handle").text(i.value),e(this).siblings(".feedback").find("strong").text(i.value+l)}})}),e(function(){e(document).on("yith-plugin-fw-codemirror-init",function(){"undefined"!=typeof wp&&"undefined"!=typeof wp.codeEditor&&e(".codemirror:not(.codemirror--initialized)").each(function(){var t=e(this).data("settings"),i=wp.codeEditor.initialize(e(this),t);e(this).addClass("codemirror--initialized"),e(this).data("codemirrorInstance",i)})}).trigger("yith-plugin-fw-codemirror-init")}),e(document).on("click",".yith-plugin-fw-select-all",function(){e("#"+e(this).data("select-id")).find("option").prop("selected",!0).trigger("change")}),e(document).on("click",".yith-plugin-fw-deselect-all",function(){e("#"+e(this).data("select-id")).find("option").prop("selected",!1).trigger("change")}),r.each(function(){var t=e(this),i=t.find(".yit-icons-manager-icon-preview").first(),n=t.find(".yit-icons-manager-icon-text");t.on("click",".yit-icons-manager-list li",function(a){var l=e(a.target).closest("li"),o=l.data("font"),s=l.data("icon"),r=l.data("key"),d=l.data("name");i.attr("data-font",o),i.attr("data-icon",s),i.attr("data-key",r),i.attr("data-name",d),n.val(o+":"+d),t.find(".yit-icons-manager-list li").removeClass("active"),l.addClass("active")}),t.on("click",".yit-icons-manager-action-set-default",function(){t.find(".yit-icons-manager-list li.default").trigger("click")})}),e(document).on("click",".yith-plugin-fw-select-images__item",function(){var t=e(this),i=t.data("key"),n=t.closest(".yith-plugin-fw-select-images__wrapper"),a=n.find(".yith-plugin-fw-select-images__item"),l=n.find("select").first();l.length&&(l.val(i).trigger("yith_select_images_value_changed"),a.removeClass("yith-plugin-fw-select-images__item--selected"),t.addClass("yith-plugin-fw-select-images__item--selected"))}),e(document.body).trigger("wc-enhanced-select-init"),e(document).find(".ui-sortable .yith-toggle-elements").sortable({cursor:"move",axis:"y",scrollSensitivity:40,forcePlaceholderSize:!0,helper:"clone",stop:function(t,i){var n=jQuery(".ui-sortable-handle"),a=0,l=new Array;for(a=0;a<n.length;a++)l[a]=e(n[a]).data("item_key");l.length>0&&e(this).closest(".toggle-element").saveToggleElement(null,l)}}),e(document.body).trigger("yith-framework-enhanced-select-init")}).trigger("yith_fields_init"),e(document).on("click",".yith-plugin-fw-onoff-container span",function(){var t=e(this).prev("input");t.prop("checked")?t.prop("checked",!1).attr("value","no").removeClass("onoffchecked"):t.prop("checked",!0).attr("value","yes").addClass("onoffchecked"),t.change()}),e.fn.saveToggleElement=function(t,i){var n=e(this),a="yith_plugin_fw_save_toggle_element",l=n.serializeToggleElement(),o=n.find(".yith-toggle_wrapper"),s=o.attr("id"),r=e.urlParam("tab");l.append("security",o.data("nonce")),void 0!==i&&i.length>0&&l.append("yith_toggle_elements_order_keys",i),n.closest(".metaboxes-tab.yith-plugin-ui").length?(a="yith_plugin_fw_save_toggle_element_metabox",post_id=e(this).closest("form#post").find("#post_ID").val(),yit_metaboxes_nonce=e(this).closest("form#post").find("#yit_metaboxes_nonce").val(),metabox_tab=e(this).closest(".tabs-panel").attr("id"),url=yith_framework_fw_fields.ajax_url+"?action="+a+"&post_ID="+post_id+"&yit_metaboxes_nonce="+yit_metaboxes_nonce+"&toggle_id="+s+"&metabox_tab="+metabox_tab):url=yith_framework_fw_fields.admin_url+"?action="+a+"&tab="+r+"&toggle_id="+s,e.ajax({type:"POST",url:url,data:l,contentType:!1,processData:!1,success:function(i){t&&t.removeClass("show"),e(document).trigger("yith_save_toggle_element_done",[i,n])}})},e.fn.serializeToggleElement=function(){var t=e(this),i=new FormData,n=e(t).find(":input").serializeArray();return e.each(n,function(e,t){el_name=t.name,i.append(t.name,t.value)}),i},e.fn.formatToggleTitle=function(){var t=e(this),i=t.find(":input"),n=t.find("span.title").data("title_format"),a=t.find(".subtitle").data("subtitle_format"),l=new RegExp("[^%%]+(?=[%%])","g");if(void 0!==n)var o=n.match(l);if(void 0!==a)var s=a.match(l);e.each(i,function(t,i){void 0!==e(i).attr("id")&&($field_id=e(i).attr("id"),$field_array=$field_id.split("_"),$field_array.pop(),$field_id=$field_array.join("_"),$field_val=e(i).val(),null!=o&&void 0!==o&&-1!==o.indexOf($field_id)&&(n=n.replace("%%"+$field_id+"%%",$field_val)),null!=s&&void 0!==s&&-1!==s.indexOf($field_id)&&(a=a.replace("%%"+$field_id+"%%",$field_val)))}),""!==n&&t.find("span.title").html(n),""!==a&&t.find(".subtitle").html(a),e(document).trigger("yith-toggle-element-item-title",[t])},e.urlParam=function(e){var t=new RegExp("[?&]"+e+"=([^&#]*)").exec(window.location.search);return null!==t&&(t[1]||0)},e(document).on("click",".yith-toggle-title",function(t){var i=e(t.target),n=i.closest(".yith-toggle-row"),a=n.find(".yith-toggle-content");if(i.hasClass("yith-plugin-fw-onoff")||i.hasClass("yith-icon-drag"))return!1;n.is(".yith-toggle-row-opened")?a.slideUp(400):a.slideDown(400),n.toggleClass("yith-toggle-row-opened")}),e(document).on("click",".yith-add-box-button",function(t){t.preventDefault();var i=e(this),n=i.data("box_id"),a=i.data("closed_label"),l=i.data("opened_label"),o=i.closest(".yith-toggle_wrapper").attr("id"),s=wp.template("yith-toggle-element-add-box-content-"+o);""!==n&&(e("#"+n).html(s({index:"box_id"})).slideToggle(),""!==a&&(i.html()===a?i.html(l).removeClass("closed"):i.html(a).addClass("closed")),e(document).trigger("yith_fields_init"),e(document).trigger("yith-add-box-button-toggle",[i]))}),e(document).on("click",".yith-add-box-buttons .yith-save-button",function(t){t.preventDefault();var i=e(this).parents(".yith-add-box"),n=e(this).closest(".yith-toggle_wrapper").attr("id"),a=i.find(".spinner"),l=e(this).parents(".toggle-element"),o=i.find(":input"),s=0,r=e('<input type="hidden">');l.find(".yith-toggle-row").each(function(){var t=parseInt(e(this).data("item_key"));s<=t&&(s=t+1)}),r.val(s),e(document).trigger("yith-toggle-change-counter",[r,i]),s=r.val();var d=wp.template("yith-toggle-element-item-"+n),c=e(d({index:s}));a.addClass("show"),e.each(o,function(t,i){if(void 0!==e(i).attr("id")){var n=e(i).attr("id"),a=e(i).val();n="radio"===e(i).attr("type")?(n=(n=e(i).closest(".yith-plugin-fw-radio").attr("id")).replace("new_","")+"_"+s)+"-"+a:n.replace("new_","")+"_"+s,e(i).is(":checked")&&e(c).find("#"+n).prop("checked",!0),(e(i).hasClass("yith-post-search")||e(i).hasClass("yith-term-search"))&&e(c).find("#"+n).html(e("#"+e(i).attr("id")).html()),e(c).find("#"+n).val(a)}}),e(c).formatToggleTitle();var u=e('<input type="hidden">').val("yes");e(document).trigger("yith-toggle-element-item-before-add",[i,c,u]);setTimeout(function(){if("yes"===u.val()){e(l).find(".yith-toggle-elements").append(c),e(i).find(".yith-plugin-fw-datepicker").datepicker("destroy"),e(i).html(""),e(i).prev(".yith-add-box-button").trigger("click"),l.saveToggleElement();setTimeout(function(){e(l).find(".highlight").removeClass("highlight")},2e3),e(document).trigger("yith_fields_init")}},1e3)}),e(document).on("click",".yith-toggle-row .yith-save-button",function(t){t.preventDefault();var i=e(this).closest(".toggle-element"),n=e(this).closest(".yith-toggle-row"),a=n.find(".spinner");n.formatToggleTitle();var l=e('<input type="hidden">').val("yes");e(document).trigger("yith-toggle-element-item-before-update",[i,n,l]),"yes"===l.val()&&(a.addClass("show"),i.saveToggleElement(a))}),e(document).on("click",".yith-toggle-row .yith-delete-button",function(t){t.preventDefault();var i=e(this).closest(".toggle-element");e(this).closest(".yith-toggle-row").remove(),i.saveToggleElement()}),e(document).on("click",".yith-toggle-onoff",function(t){t.preventDefault(),e(this).closest(".toggle-element").saveToggleElement()}),e(document).on("click",".yith-plugin-fw-radio input[type=radio]",function(){var t=e(this).closest(".yith-plugin-fw-radio"),i=e(this).val();t.val(i).data("value",i).trigger("change")}),e(document.body).on("yith-plugin-fw-init-radio",function(){e(".yith-plugin-fw-radio:not(.yith-plugin-fw-radio--initialized)").each(function(){e(this).val(e(this).data("value")),e(this).addClass("yith-plugin-fw-radio--initialized")})}).trigger("yith-plugin-fw-init-radio"),e(document).on("click",".yith-password-eye",function(){var t=e(this),i=e(this).closest(".yith-password-wrapper").find("input");"password"===i.attr("type")?(i.attr("type","text"),t.addClass("yith-password-eye-closed")):(i.attr("type","password"),t.removeClass("yith-password-eye-closed"))}),e(document).on("select2:open",function(t){e(t.target).closest(".yith-plugin-ui").length&&e(".select2-results").closest(".select2-container").addClass("yith-plugin-fw-select2-container")});var t={selectors:{wrapper:".yith-plugin-fw-dimensions",units:{wrapper:".yith-plugin-fw-dimensions__units",single:".yith-plugin-fw-dimensions__unit",value:".yith-plugin-fw-dimensions__unit__value",selectedClass:"yith-plugin-fw-dimensions__unit--selected"},linked:{button:".yith-plugin-fw-dimensions__linked",value:".yith-plugin-fw-dimensions__linked__value",wrapperActiveClass:"yith-plugin-fw-dimensions--linked-active"},dimensions:{number:".yith-plugin-fw-dimensions__dimension__number"}},init:function(){var i=t;e(document).on("click",i.selectors.units.single,i.unitChange),e(document).on("click",i.selectors.linked.button,i.linkedChange),e(document).on("change keyup",i.selectors.dimensions.number,i.numberChange)},unitChange:function(i){var n=e(this).closest(t.selectors.units.single),a=n.closest(t.selectors.units.wrapper),l=a.find(t.selectors.units.single),o=a.find(t.selectors.units.value).first(),s=n.data("value");l.removeClass(t.selectors.units.selectedClass),n.addClass(t.selectors.units.selectedClass),o.val(s)},linkedChange:function(){var i=e(this).closest(t.selectors.linked.button),n=i.closest(t.selectors.wrapper),a=i.find(t.selectors.linked.value);"yes"===a.val()?(n.removeClass(t.selectors.linked.wrapperActiveClass),a.val("no")):(n.addClass(t.selectors.linked.wrapperActiveClass),a.val("yes"),n.find(t.selectors.dimensions.number).first().trigger("change"))},numberChange:function(i){var n=e(this).closest(t.selectors.dimensions.number),a=n.closest(t.selectors.wrapper);a.hasClass(t.selectors.linked.wrapperActiveClass)&&a.find(t.selectors.dimensions.number).val(n.val())}};t.init()}(jQuery);
plugin-fw/includes/class-yit-cpt-unlimited.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /**
3
  * YITH Custom-Post-Type Unlimited Class.
4
- * Manage the custom post types as Portfolio, Contact Forms and similar (called CPTU)
5
  *
6
  * @class YIT_CPT_Unlimited
7
  * @package YITH\PluginFramework\Classes
@@ -19,76 +19,6 @@ if ( ! class_exists( 'YIT_CPT_Unlimited' ) ) {
19
  */
20
  class YIT_CPT_Unlimited {
21
 
22
- /**
23
- * The name of main post type of CPTU.
24
- *
25
- * @var string
26
- */
27
- protected $name = '';
28
-
29
- /**
30
- * The prefix of each post type created by the post of main CPTU
31
- *
32
- * @var string
33
- */
34
- protected $prefix_cpt = '';
35
-
36
- /**
37
- * Labels defined for the main CPTU
38
- *
39
- * @var string
40
- */
41
- protected $labels = '';
42
-
43
- /**
44
- * The configuration arguments of post type
45
- *
46
- * @var string
47
- */
48
- protected $args = '';
49
-
50
- /**
51
- * All post types created by the post of main CPTU
52
- *
53
- * @var array
54
- */
55
- public $post_types = array();
56
-
57
- /**
58
- * Array with all portfolio layouts available for this site
59
- *
60
- * @var array
61
- */
62
- public $layouts = array();
63
-
64
- /**
65
- * The pathname of template folder
66
- *
67
- * @var string
68
- */
69
- protected $template_path = '';
70
-
71
- /**
72
- * The URL of template folder
73
- *
74
- * @var string
75
- */
76
- protected $template_url = '';
77
-
78
- /**
79
- * Unique sequential ID to differentiate same shortcodes in the same page
80
- *
81
- * @var int
82
- */
83
- public $index = 0;
84
-
85
- /**
86
- * Temporary attribute to load automatically the settings for each layout
87
- *
88
- * @var string
89
- */
90
- private $layout = '';
91
-
92
  /**
93
  * YIT_CPT_Unlimited constructor.
94
  *
@@ -96,1810 +26,29 @@ if ( ! class_exists( 'YIT_CPT_Unlimited' ) ) {
96
  */
97
  public function __construct( $args = array() ) {
98
 
99
- $defaults = array(
100
- 'name' => '',
101
- 'post_type_prefix' => '',
102
- 'labels' => array(
103
- 'main_name' => '',
104
- 'singular' => '',
105
- 'plural' => '',
106
- 'menu' => '',
107
- ),
108
- 'manage_layouts' => false,
109
- 'add_multiuploader' => false,
110
- 'sortable' => false,
111
- 'has_single' => false,
112
- 'has_taxonomy' => false,
113
- 'label_item_sing' => '',
114
- 'label_item_plur' => '',
115
- 'shortcode_name' => '',
116
- 'shortcode_icon' => '', // URL or icon name from http://melchoyce.github.io/dashicons/.
117
- 'layout_option' => '_type', // The option ID of layout meta-box.
118
- );
119
- $this->args = wp_parse_args( $args, $defaults );
120
-
121
- // Fix the labels.
122
- if ( empty( $this->args['labels']['main_name'] ) ) {
123
- $this->args['labels']['main_name'] = $this->args['labels']['singular'];
124
- }
125
- if ( empty( $this->args['labels']['menu'] ) ) {
126
- $this->args['labels']['menu'] = $this->args['labels']['singular'];
127
- }
128
-
129
- // Populate.
130
- $this->name = $this->args['name'];
131
- $this->prefix_cpt = $this->args['post_type_prefix'];
132
- $this->labels = $this->args['labels'];
133
-
134
- add_action( 'init', array( $this, 'register_post_type' ) );
135
- add_action( 'init', array( $this, 'register_cptu_post_types' ) );
136
-
137
- add_action( 'save_post', array( $this, 'rewrite_flush' ) );
138
-
139
- // Admin interface.
140
- add_action( 'admin_head', array( $this, 'add_cptu_menu_item' ) );
141
- add_action( 'admin_init', array( $this, 'add_quick_links_metaboxes' ) );
142
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_assets' ) );
143
-
144
- // Meta-boxes.
145
- if ( is_admin() ) {
146
- add_action( 'init', array( $this, 'add_metabox_cptu' ) );
147
- add_action( 'init', array( $this, 'add_metabox_item_fields' ) );
148
- }
149
-
150
- // Multi-uploader.
151
- if ( $this->args['add_multiuploader'] ) {
152
- add_action( 'admin_footer', array( $this, 'add_button_multiuploader' ) );
153
- add_action( 'wp_ajax_yit_cptu_multiuploader', array( $this, 'post_multiuploader' ) );
154
- }
155
-
156
- // Layouts.
157
- if ( $this->args['manage_layouts'] ) {
158
- $this->get_layouts();
159
- }
160
-
161
- // Single layout.
162
- if ( $this->args['has_single'] ) {
163
- add_action( 'yit_loop', array( $this, 'single_template' ) );
164
- add_action( 'wp', array( $this, 'single_template_config' ) );
165
-
166
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
167
- add_action( 'init', array( $this, 'single_template_config' ) );
168
- }
169
- }
170
-
171
- // Archive template.
172
- add_action( 'wp', array( $this, 'archive_template' ) );
173
-
174
- // Enqueue the assets of each layout.
175
- add_action( 'wp_enqueue_scripts', array( $this, 'frontend_assets' ) );
176
-
177
- // Add the shortcode, used to show the frontend.
178
- if ( ! empty( $this->args['shortcode_name'] ) ) {
179
- add_shortcode( $this->args['shortcode_name'], array( &$this, 'add_shortcode' ) );
180
- add_filter( 'yit_shortcode_' . $this->args['shortcode_name'] . '_icon', array( $this, 'shortcode_icon' ) );
181
- add_filter( 'yit-shortcode-plugin-init', array( $this, 'add_shortcode_to_box' ) );
182
- }
183
-
184
- // Add sortable feature.
185
- if ( $this->args['sortable'] ) {
186
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_sortable_assets' ) );
187
- add_action( 'wp_ajax_cpt_sort_posts', array( $this, 'sort_posts' ) );
188
- add_action( 'admin_init', array( $this, 'init_menu_order' ) );
189
- add_filter( 'pre_get_posts', array( $this, 'filter_active' ) );
190
- add_filter( 'pre_get_posts', array( $this, 'pre_get_posts' ) );
191
- add_filter( 'get_next_post_where', array( $this, 'sorted_next_post_where' ) );
192
- add_filter( 'get_previous_post_where', array( $this, 'sorted_prev_post_where' ) );
193
- add_filter( 'get_next_post_sort', array( $this, 'sorted_next_post_sort' ) );
194
- add_filter( 'get_previous_post_sort', array( $this, 'sorted_prev_post_sort' ) );
195
- }
196
-
197
- // Add default columns to post type table list.
198
- add_filter( 'manage_edit-' . $this->name . '_columns', array( $this, 'cptu_define_columns' ) );
199
- add_action( 'manage_' . $this->name . '_posts_custom_column', array( $this, 'cptu_change_columns' ), 10, 2 );
200
-
201
- // Add required post type for WordPress importer.
202
- add_filter( 'wp_import_post_data_raw', array( $this, 'add_importer_required_post_type' ) );
203
- add_filter( 'wp_import_terms', array( $this, 'add_importer_required_taxonomy' ) );
204
- add_action( 'wp_import_set_post_terms', array( $this, 'recount_terms_post' ), 10, 3 );
205
-
206
- }
207
-
208
- /**
209
- * Enqueue the assets for the sortable feature
210
- *
211
- * @return void
212
- * @since 1.0
213
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
214
- */
215
- public function admin_sortable_assets() {
216
- global $post;
217
-
218
- if ( ! isset( $post->post_type ) || ! $this->is_valid( $post->post_type ) ) {
219
- return;
220
- }
221
-
222
- wp_enqueue_script( 'yit-cptu-sortable-posts', YIT_CORE_PLUGIN_URL . '/assets/js/yit-cptu-sortable-posts.js', array( 'jquery', 'jquery-ui-sortable' ), '1.0', true );
223
- }
224
-
225
- /**
226
- * Init menu order
227
- *
228
- * @param array $post_types The post types.
229
- */
230
- public function init_menu_order( $post_types = array() ) {
231
- global $wpdb;
232
-
233
- if ( empty( $post_types ) ) {
234
- $post_types = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT post_type FROM $wpdb->posts WHERE post_type LIKE %s", str_replace( '_', '\_', $this->prefix_cpt ) . '%' ) );
235
- } elseif ( ! is_array( $post_types ) ) {
236
- $post_types = array( $post_types );
237
- }
238
-
239
- foreach ( $post_types as $post_type ) {
240
- $count = $wpdb->get_var(
241
- $wpdb->prepare(
242
- "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = %s AND post_status IN ('publish', 'pending', 'draft', 'private', 'future') AND menu_order = 0",
243
- $post_type
244
- )
245
- );
246
-
247
- if ( empty( $count ) ) {
248
- continue;
249
- }
250
-
251
- $results = $wpdb->get_results(
252
- $wpdb->prepare(
253
- "SELECT ID FROM $wpdb->posts WHERE post_type = %s AND post_status IN ('publish', 'pending', 'draft', 'private', 'future') ORDER BY post_date DESC",
254
- $post_type
255
- )
256
- );
257
-
258
- foreach ( $results as $key => $result ) {
259
- $wpdb->update( $wpdb->posts, array( 'menu_order' => $key + 1 ), array( 'ID' => $result->ID ) );
260
- }
261
- }
262
- }
263
-
264
- /**
265
- * Save the order of posts from sortable feature
266
- *
267
- * @return void
268
- * @since 1.0
269
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
270
- */
271
- public function sort_posts() {
272
- global $wpdb;
273
-
274
- parse_str( $_REQUEST['order'], $data ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput
275
-
276
- if ( is_array( $data ) ) {
277
- $id_arr = array();
278
- foreach ( $data as $key => $values ) {
279
- foreach ( $values as $position => $id ) {
280
- $id_arr[] = $id;
281
- }
282
- }
283
-
284
- $menu_order_arr = array();
285
- foreach ( $id_arr as $key => $id ) {
286
- $results = $wpdb->get_results( $wpdb->prepare( "SELECT menu_order FROM $wpdb->posts WHERE ID = %d", $id ) );
287
- foreach ( $results as $result ) {
288
- $menu_order_arr[] = $result->menu_order;
289
- }
290
- }
291
-
292
- sort( $menu_order_arr );
293
-
294
- foreach ( $data as $key => $values ) {
295
- foreach ( $values as $position => $id ) {
296
- $wpdb->update( $wpdb->posts, array( 'menu_order' => $menu_order_arr[ $position ] ), array( 'ID' => $id ) );
297
- }
298
- }
299
- }
300
-
301
- die();
302
- }
303
-
304
- /**
305
- * Filter Active
306
- *
307
- * @param WC_Query $wp_query The query.
308
- *
309
- * @return mixed
310
- */
311
- public function filter_active( $wp_query ) {
312
- if ( is_admin() && isset( $wp_query->query['suppress_filters'] ) ) {
313
- $wp_query->query['suppress_filters'] = false;
314
- }
315
- if ( is_admin() && isset( $wp_query->query_vars['suppress_filters'] ) ) {
316
- $wp_query->query_vars['suppress_filters'] = false;
317
- }
318
-
319
- return $wp_query;
320
- }
321
-
322
- /**
323
- * Pre get post.
324
- *
325
- * @param WP_Query $wp_query The query.
326
- */
327
- public function pre_get_posts( $wp_query ) {
328
- if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
329
- if ( isset( $wp_query->query['post_type'] ) ) {
330
- $post_types = (array) $wp_query->query['post_type'];
331
- foreach ( $post_types as $post_type ) {
332
- if ( $this->is_valid( $post_type ) ) {
333
- $wp_query->set( 'orderby', 'menu_order' );
334
- $wp_query->set( 'order', 'ASC' );
335
- }
336
- }
337
- }
338
- } else {
339
- $active = false;
340
- if ( isset( $wp_query->query['suppress_filters'] ) || isset( $wp_query->query['post_type'] ) ) {
341
- $post_types = (array) $wp_query->query['post_type'];
342
- foreach ( $post_types as $post_type ) {
343
- if ( $this->is_valid( $post_type ) ) {
344
- $active = true;
345
- }
346
- }
347
- }
348
-
349
- if ( $active ) {
350
- if ( ! isset( $wp_query->query['orderby'] ) || 'post_date' === $wp_query->query['orderby'] ) {
351
- $wp_query->set( 'orderby', 'menu_order' );
352
- }
353
- if ( ! isset( $wp_query->query['order'] ) || 'DESC' === $wp_query->query['order'] ) {
354
- $wp_query->set( 'order', 'ASC' );
355
- }
356
- }
357
- }
358
- }
359
-
360
- /**
361
- * Filters where clause for get next post
362
- *
363
- * @param string $where The 'where'.
364
- *
365
- * @return string
366
- * @since 1.0
367
- * @author Antonio La Rocca <antonio.larocca@yithemes.com>
368
- */
369
- public function sorted_next_post_where( $where ) {
370
- // phpcs:disable WordPress.Security.NonceVerification.Recommended
371
- global $post;
372
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_REQUEST['post_id'] ) ) {
373
- $post = get_post( absint( $_REQUEST['post_id'] ) ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
374
- } else {
375
- $post = get_post(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
376
- }
377
-
378
- if ( ! $post || ! $this->is_valid( $post->post_type ) ) {
379
- return $where;
380
- }
381
-
382
- $result = str_replace( "'" . $post->post_date . "'", $post->menu_order, $where );
383
- $result = str_replace( 'p.post_date', 'p.menu_order', $result );
384
-
385
- return $result;
386
- // phpcs:enable
387
- }
388
-
389
- /**
390
- * Filters where clause for get prev post
391
- *
392
- * @param string $where The 'where'.
393
- *
394
- * @return string
395
- * @since 1.0
396
- * @author Antonio La Rocca <antonio.larocca@yithemes.com>
397
- */
398
- public function sorted_prev_post_where( $where ) {
399
- // phpcs:disable WordPress.Security.NonceVerification.Recommended
400
- global $post;
401
-
402
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_REQUEST['post_id'] ) ) {
403
- $post = get_post( absint( $_REQUEST['post_id'] ) ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
404
- } else {
405
- $post = get_post(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
406
- }
407
-
408
- if ( ! $post || ! $this->is_valid( $post->post_type ) ) {
409
- return $where;
410
- }
411
-
412
- $result = str_replace( "'" . $post->post_date . "'", $post->menu_order, $where );
413
- $result = str_replace( 'p.post_date', 'p.menu_order', $result );
414
-
415
- return $result;
416
- // phpcs:enable
417
- }
418
-
419
- /**
420
- * Filters sort clause for get next post
421
- *
422
- * @param string $sort The 'sort' param.
423
- *
424
- * @return string
425
- * @since 1.0
426
- * @author Antonio La Rocca <antonio.larocca@yithemes.com>
427
- */
428
- public function sorted_next_post_sort( $sort ) {
429
- // phpcs:disable WordPress.Security.NonceVerification.Recommended
430
- global $post;
431
-
432
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_REQUEST['post_id'] ) ) {
433
- $post = get_post( absint( $_REQUEST['post_id'] ) ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
434
- } else {
435
- $post = get_post(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
436
- }
437
-
438
- if ( ! $post || ! $this->is_valid( $post->post_type ) ) {
439
- return $sort;
440
- }
441
-
442
- return str_replace( 'p.post_date', 'p.menu_order', $sort );
443
- // phpcs:enable
444
- }
445
-
446
- /**
447
- * Filters sort clause for get prev post
448
- *
449
- * @param string $sort The 'sort' param.
450
- *
451
- * @return string
452
- * @since 1.0
453
- * @author Antonio La Rocca <antonio.larocca@yithemes.com>
454
- */
455
- public function sorted_prev_post_sort( $sort ) {
456
- // phpcs:disable WordPress.Security.NonceVerification.Recommended
457
- global $post;
458
-
459
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_REQUEST['post_id'] ) ) {
460
- $post = get_post( absint( $_REQUEST['post_id'] ) ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
461
- } else {
462
- $post = get_post(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
463
- }
464
-
465
- if ( ! $post || ! $this->is_valid( $post->post_type ) ) {
466
- return $sort;
467
- }
468
-
469
- return str_replace( 'p.post_date', 'p.menu_order', $sort );
470
- // phpcs:enable
471
- }
472
-
473
- /**
474
- * Register post type
475
- * Register the post type for the creation of portfolios
476
- *
477
- * @return void
478
- * @since 1.0
479
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
480
- */
481
- public function register_post_type() {
482
- $labels = array(
483
- 'name' => ucfirst( $this->labels['main_name'] ),
484
- 'singular_name' => ucfirst( $this->labels['singular'] ),
485
- // translators: %s is the singular name of the post type.
486
- 'add_new' => sprintf( __( 'Add %s', 'yith-plugin-fw' ), ucfirst( $this->labels['singular'] ) ),
487
- // translators: %s is the singular name of the post type.
488
- 'add_new_item' => sprintf( __( 'Add New %s', 'yith-plugin-fw' ), ucfirst( $this->labels['singular'] ) ),
489
- // translators: %s is the singular name of the post type.
490
- 'edit_item' => sprintf( __( 'Edit %s', 'yith-plugin-fw' ), ucfirst( $this->labels['singular'] ) ),
491
- // translators: %s is the singular name of the post type.
492
- 'new_item' => sprintf( __( 'New %s', 'yith-plugin-fw' ), ucfirst( $this->labels['singular'] ) ),
493
- // translators: %s is the plural name of the post type.
494
- 'all_items' => sprintf( __( 'All %s', 'yith-plugin-fw' ), ucfirst( $this->labels['plural'] ) ),
495
- // translators: %s is the singular name of the post type.
496
- 'view_item' => sprintf( __( 'View %s', 'yith-plugin-fw' ), ucfirst( $this->labels['singular'] ) ),
497
- // translators: %s is the plural name of the post type.
498
- 'search_items' => sprintf( __( 'Search %s', 'yith-plugin-fw' ), ucfirst( $this->labels['plural'] ) ),
499
- // translators: %s is the plural name of the post type.
500
- 'not_found' => sprintf( __( 'No %s found', 'yith-plugin-fw' ), ucfirst( $this->labels['plural'] ) ),
501
- // translators: %s is the plural name of the post type.
502
- 'not_found_in_trash' => sprintf( __( 'No %s found in Trash', 'yith-plugin-fw' ), ucfirst( $this->labels['plural'] ) ),
503
- 'parent_item_colon' => '',
504
- 'menu_name' => ucfirst( $this->labels['menu'] ),
505
- );
506
-
507
- $args = array(
508
- 'labels' => apply_filters( 'yit_' . $this->name . '_labels', $labels ),
509
- 'public' => false,
510
- 'publicly_queryable' => false,
511
- 'show_ui' => true,
512
- 'show_in_menu' => true,
513
- 'query_var' => false,
514
- 'capability_type' => 'post',
515
- 'hierarchical' => false,
516
- 'menu_position' => null,
517
- 'supports' => array( 'title' ),
518
- );
519
-
520
- if ( ! empty( $this->args['menu_icon'] ) ) {
521
- $args['menu_icon'] = $this->args['menu_icon'];
522
- }
523
-
524
- register_post_type( $this->name, apply_filters( 'yit_' . $this->name . '_args', $args ) );
525
- }
526
-
527
- /**
528
- * Retrieve the values configured inside the custom post type
529
- *
530
- * @param WP_Post $post The post where get the arguments configured in the cpt.
531
- *
532
- * @return array
533
- * @since 1.0
534
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
535
- */
536
- protected function cpt_args( $post ) {
537
- if ( ! isset( $post->ID ) ) {
538
- return;
539
- }
540
-
541
- $args = apply_filters(
542
- 'yit_cptu_register_post_type_args',
543
- array(
544
- 'layout' => get_post_meta( $post->ID, $this->args['layout_option'], true ),
545
- 'rewrite' => get_post_meta( $post->ID, '_rewrite', true ),
546
- 'label_singular' => ! empty( $this->args['label_item_sing'] ) ? $this->args['label_item_sing'] : get_post_meta( $post->ID, '_label_singular', true ),
547
- 'label_plural' => ! empty( $this->args['label_item_plur'] ) ? $this->args['label_item_plur'] : get_post_meta( $post->ID, '_label_plural', true ),
548
- 'taxonomy' => get_post_meta( $post->ID, '_taxonomy', true ),
549
- 'taxonomy_rewrite' => get_post_meta( $post->ID, '_taxonomy_rewrite', true ),
550
- ),
551
- $this->name,
552
- $post
553
- );
554
-
555
- $title = $post->post_title;
556
-
557
- if ( empty( $args['label_singular'] ) ) {
558
- $args['label_singular'] = $title;
559
- }
560
-
561
- if ( empty( $args['label_plural'] ) ) {
562
- $args['label_plural'] = $title;
563
- }
564
-
565
- return $args;
566
- }
567
-
568
- /**
569
- * Retrieve the post types created for this CPTU
570
- *
571
- * @return array The link changed
572
- * @since 1.0
573
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
574
- */
575
- public function get_post_types() {
576
- if ( ! empty( $this->post_types ) ) {
577
- return $this->post_types;
578
- }
579
-
580
- $args = array(
581
- 'post_type' => $this->name,
582
- 'posts_per_page' => - 1,
583
- 'post_status' => 'publish',
584
- );
585
- $this->post_types = get_posts( $args );
586
-
587
- return $this->post_types;
588
- }
589
-
590
- /**
591
- * Register portfolio post types
592
- * Register the post types for each portfolio created by admin
593
- *
594
- * @return void
595
- * @since 1.0
596
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
597
- */
598
- public function register_cptu_post_types() {
599
- $post_types = $this->get_post_types();
600
- $pts = array();
601
-
602
- foreach ( $post_types as $pt ) {
603
- extract( $this->cpt_args( $pt ) ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
604
- /**
605
- * Fields.
606
- *
607
- * @var string $label_singular The singular label.
608
- * @var string $label_plural The plural label.
609
- * @var string $layout The layout.
610
- */
611
-
612
- $name = $pt->post_name;
613
- $title = $pt->post_title;
614
-
615
- $labels = array(
616
- 'name' => $title,
617
- 'singular_name' => $label_singular,
618
- // translators: $s is the singular name of the post type.
619
- 'add_new' => sprintf( __( 'Add %s', 'yith-plugin-fw' ), $label_singular ),
620
- // translators: $s is the singular name of the post type.
621
- 'add_new_item' => sprintf( __( 'Add New %s', 'yith-plugin-fw' ), $label_singular ),
622
- // translators: $s is the singular name of the post type.
623
- 'edit_item' => sprintf( __( 'Edit %s', 'yith-plugin-fw' ), $label_singular ),
624
- // translators: $s is the singular name of the post type.
625
- 'new_item' => sprintf( __( 'New %s', 'yith-plugin-fw' ), $label_singular ),
626
- // translators: $s is the plural name of the post type.
627
- 'all_items' => sprintf( __( 'All %s', 'yith-plugin-fw' ), $label_plural ),
628
- // translators: $s is the singular name of the post type.
629
- 'view_item' => sprintf( __( 'View %s', 'yith-plugin-fw' ), $label_singular ),
630
- // translators: $s is the plural name of the post type.
631
- 'search_items' => sprintf( __( 'Search %s', 'yith-plugin-fw' ), $label_plural ),
632
- // translators: $s is the plural name of the post type.
633
- 'not_found' => sprintf( __( 'No %s found', 'yith-plugin-fw' ), $label_plural ),
634
- // translators: $s is the plural name of the post type.
635
- 'not_found_in_trash' => sprintf( __( 'No %s found in Trash', 'yith-plugin-fw' ), $label_plural ),
636
- 'parent_item_colon' => '',
637
- 'menu_name' => $title,
638
- );
639
-
640
- $args = array(
641
- 'labels' => apply_filters( 'yit_' . $this->prefix_cpt . $name . '_labels', $labels ),
642
- 'public' => true,
643
- 'publicly_queryable' => true,
644
- 'show_ui' => true,
645
- 'show_in_menu' => false,
646
- 'query_var' => true,
647
- 'capability_type' => 'post',
648
- 'hierarchical' => false,
649
- 'menu_position' => null,
650
- 'supports' => array( 'title', 'editor', 'thumbnail' ),
651
- );
652
-
653
- if ( ! $this->args['has_single'] ) {
654
- $args['public'] = false;
655
- $args['publicly_queryable'] = false;
656
- $args['query_var'] = false;
657
- }
658
-
659
- if ( $this->args['manage_layouts'] && isset( $this->layouts[ $layout ] ) && ! $this->layouts[ $layout ]['support']['description'] ) {
660
- unset( $args['supports'][1] ); // Remove 'editor'.
661
- }
662
-
663
- if ( ! empty( $rewrite ) ) {
664
- $args['rewrite'] = array( 'slug' => $rewrite );
665
- }
666
-
667
- $post_type = yit_avoid_duplicate( str_replace( '-', '_', substr( $this->prefix_cpt . $name, 0, 16 ) ), $post_types );
668
- register_post_type( $post_type, apply_filters( 'yit_' . $this->prefix_cpt . $name . '_args', $args, $pt ) );
669
-
670
- update_post_meta( $pt->ID, '_post_type', $post_type );
671
- $pts[] = $post_type;
672
-
673
- if ( $this->args['has_taxonomy'] && ! empty( $taxonomy ) ) {
674
- $labels = array(
675
- // translators: %s is the singular name of the post type.
676
- 'name' => sprintf( _x( '%s Categories', 'taxonomy general name', 'yith-plugin-fw' ), $label_singular ),
677
- 'singular_name' => _x( 'Category', 'taxonomy singular name', 'yith-plugin-fw' ),
678
- 'search_items' => __( 'Search Categories', 'yith-plugin-fw' ),
679
- 'all_items' => __( 'All Categories', 'yith-plugin-fw' ),
680
- 'parent_item' => __( 'Parent Category', 'yith-plugin-fw' ),
681
- 'parent_item_colon' => __( 'Parent Category:', 'yith-plugin-fw' ),
682
- 'edit_item' => __( 'Edit Category', 'yith-plugin-fw' ),
683
- 'update_item' => __( 'Update Category', 'yith-plugin-fw' ),
684
- 'add_new_item' => __( 'Add New Category', 'yith-plugin-fw' ),
685
- 'new_item_name' => __( 'New Category Name', 'yith-plugin-fw' ),
686
- 'menu_name' => __( 'Category', 'yith-plugin-fw' ),
687
- );
688
-
689
- $args = array(
690
- 'hierarchical' => true,
691
- 'labels' => $labels,
692
- 'show_ui' => true,
693
- 'show_admin_column' => true,
694
- 'query_var' => true,
695
- );
696
-
697
- if ( ! empty( $taxonomy_rewrite ) ) {
698
- $args['rewrite'] = array( 'slug' => $taxonomy_rewrite );
699
- }
700
-
701
- register_taxonomy( substr( $taxonomy, 0, 32 ), $post_type, $args );
702
- }
703
- }
704
-
705
- wp_cache_set( 'yit_cptu_post_types', $post_types );
706
- }
707
-
708
- /**
709
- * Flush Rewrite Rules
710
- * rewrite rules when a cpt unlimited is saved
711
- *
712
- * @param int $post The post ID.
713
- *
714
- * @return void
715
- * @since 1.0
716
- * @author Emanuela Castorina <emanuela.castorina@yithemes.com>
717
- */
718
- public function rewrite_flush( $post ) {
719
- if ( isset( $post ) && $this->is_valid( get_post_type( intval( $post ) ) ) ) {
720
- flush_rewrite_rules();
721
- }
722
- }
723
-
724
- /**
725
- * Add the item for each portfolio under "Portfolios"
726
- *
727
- * @return void
728
- * @since 1.0
729
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
730
- */
731
- public function add_cptu_menu_item() {
732
- // phpcs:disable WordPress.Security.NonceVerification.Recommended,WordPress.WP.GlobalVariablesOverride.Prohibited
733
- global $submenu, $post, $parent_file, $pagenow;
734
-
735
- if ( isset( $post->post_type ) ) {
736
- $post_type = $post->post_type;
737
- } elseif ( isset( $_REQUEST['post_type'] ) ) {
738
- $post_type = sanitize_key( wp_unslash( $_REQUEST['post_type'] ) );
739
- } else {
740
- return;
741
- }
742
-
743
- $item = 'edit.php?post_type=' . $this->name;
744
-
745
- if ( strpos( $post_type, $this->prefix_cpt ) !== false ) {
746
- global $wpdb;
747
- $portfolio = $wpdb->get_row( $wpdb->prepare( "SELECT p.* FROM $wpdb->postmeta AS pm INNER JOIN $wpdb->posts AS p ON p.ID = pm.post_id WHERE pm.meta_key = %s AND pm.meta_value = %s AND p.post_type = %s", '_post_type', $post_type, $this->name ) );
748
-
749
- if ( ! isset( $portfolio->ID ) ) {
750
- return;
751
- }
752
-
753
- $label_singular = ! empty( $this->args['label_item_sing'] ) ? $this->args['label_item_sing'] : get_post_meta( $portfolio->ID, '_label_singular', true );
754
- $label_plural = ! empty( $this->args['label_item_plur'] ) ? $this->args['label_item_plur'] : get_post_meta( $portfolio->ID, '_label_plural', true );
755
-
756
- if ( empty( $label_plural ) ) {
757
- $label_plural = $portfolio->post_title;
758
- }
759
-
760
- if ( empty( $label_singular ) ) {
761
- $label_singular = $portfolio->post_title;
762
- }
763
-
764
- $submenu[ $item ][15] = array( ucfirst( $label_plural ), 'edit_posts', 'edit.php?post_type=' . $post_type );
765
- $submenu[ $item ][20] = array(
766
- sprintf(
767
- // translators: %s is the singular name of the post type.
768
- __( 'Add %s', 'yith-plugin-fw' ),
769
- ucfirst( $label_singular )
770
- ),
771
- 'edit_posts',
772
- 'post-new.php?post_type=' . $post_type,
773
- );
774
-
775
- global $wp_taxonomies;
776
- $taxonomy = get_post_meta( $portfolio->ID, '_taxonomy', true );
777
- if ( isset( $wp_taxonomies[ $taxonomy ] ) ) {
778
- $submenu[ $item ][25] = array( __( 'Categories', 'yith-plugin-fw' ), 'edit_posts', 'edit-tags.php?taxonomy=' . $taxonomy . '&post_type=' . $post_type );
779
- }
780
- }
781
-
782
- // Set the parent item inside the single of each post type.
783
- if ( 'post.php' === $pagenow && isset( $_GET['post'] ) && $this->is_valid( get_post_type( intval( $_GET['post'] ) ) ) ) {
784
- $parent_file = 'edit.php?post_type=' . $this->name;
785
- }
786
-
787
- // phpcs:enable
788
- }
789
-
790
- /**
791
- * Locate folder of CPTU templates, if there isn't a layouts management
792
- *
793
- * @return string
794
- * @since 1.0
795
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
796
- */
797
- public function template_path() {
798
- if ( ! empty( $this->template_path ) ) {
799
- return $this->template_path;
800
- }
801
-
802
- $stylesheet_path_1 = get_stylesheet_directory() . '/theme/templates/' . $this->name . '/';
803
- $stylesheet_path_2 = get_template_directory() . '/theme/templates/' . $this->name . '/';
804
- $template_path_1 = get_stylesheet_directory() . '/' . $this->name . '/';
805
- $template_path_2 = get_template_directory() . '/' . $this->name . '/';
806
- $plugin_path = $this->args['plugin_path'] . '/templates/';
807
-
808
- foreach ( array( 'stylesheet_path_1', 'stylesheet_path_2', 'template_path_1', 'template_path_2', 'plugin_path' ) as $var ) {
809
- $path = ${$var};
810
-
811
- if ( file_exists( $path ) ) {
812
- $this->template_path = $path;
813
- }
814
- }
815
-
816
- return $this->template_path;
817
- }
818
-
819
- /**
820
- * Locate folder of CPTU templates, if there isn't a layouts management
821
- *
822
- * @return string
823
- * @since 1.0
824
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
825
- */
826
- public function template_url() {
827
- if ( ! empty( $this->template_url ) ) {
828
- return $this->template_path;
829
- }
830
-
831
- $this->template_url = str_replace(
832
- array(
833
- get_stylesheet_directory(),
834
- get_template_directory(),
835
- $this->args['plugin_path'],
836
- ),
837
- array(
838
- get_stylesheet_directory_uri(),
839
- get_template_directory_uri(),
840
- $this->args['plugin_url'],
841
- ),
842
- $this->template_path()
843
- );
844
-
845
- return $this->template_url;
846
- }
847
-
848
- /**
849
- * Retrieve all layouts to manage by custom post type added in the site in this order:
850
- * 1. Child theme (if exists)
851
- * 2. Theme
852
- * 3. Plugin
853
- * It also load the config.php file of each layout
854
- *
855
- * @return void
856
- * @since 1.0
857
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
858
- */
859
- public function get_layouts() {
860
- $stylesheet_path_1 = get_stylesheet_directory() . '/theme/templates/' . $this->name . '/';
861
- $stylesheet_path_2 = get_template_directory() . '/theme/templates/' . $this->name . '/';
862
- $template_path_1 = get_stylesheet_directory() . '/' . $this->name . '/';
863
- $template_path_2 = get_template_directory() . '/' . $this->name . '/';
864
- $plugin_path = $this->args['plugin_path'] . '/templates/';
865
-
866
- foreach ( array( 'stylesheet_path_1', 'stylesheet_path_2', 'template_path_1', 'template_path_2', 'plugin_path' ) as $var ) {
867
- $path = ${$var};
868
-
869
- if ( file_exists( $path ) ) {
870
- foreach ( scandir( $path ) as $scan ) {
871
- if ( ! isset( $this->layouts[ $scan ] ) && is_dir( $path . $scan ) && ! in_array( $scan, array( '.', '..', '.svn' ), true ) && '_' !== $scan[0] ) {
872
- $this->layouts[ $scan ] = array(
873
- 'name' => ucfirst( str_replace( '-', ' ', $scan ) ),
874
- 'path' => $path . $scan,
875
- 'url' => str_replace(
876
- array(
877
- get_stylesheet_directory(),
878
- get_template_directory(),
879
- $this->args['plugin_path'],
880
- ),
881
- array(
882
- get_stylesheet_directory_uri(),
883
- get_template_directory_uri(),
884
- $this->args['plugin_url'],
885
- ),
886
- $path . $scan
887
- ),
888
- 'css' => array(),
889
- 'js' => array(),
890
- 'support' => array(
891
- 'description' => true,
892
- ),
893
- 'columns' => array(),
894
- );
895
-
896
- // Set the vars for config.php.
897
- $layout = $scan;
898
- $this->layout = $layout; // temporary attribute to load automatically the configuration inside the config.php, for this layout.
899
-
900
- if ( ! in_array( $scan, array( 'single' ), true ) && file_exists( $path . $scan . '/config.php' ) ) {
901
- include_once $path . $scan . '/config.php';
902
- }
903
- }
904
- }
905
- }
906
- }
907
- }
908
-
909
- /**
910
- * Say if you want to set description for the current layout or not. This method must be used only inside the
911
- * config.php file of layout
912
- *
913
- * @param string $v 'yes' or 'no'.
914
- *
915
- * @return void
916
- * @since 1.0
917
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
918
- */
919
- public function add_description_field( $v ) {
920
- $this->layouts[ $this->layout ]['support']['description'] = 'yes' === $v;
921
- }
922
-
923
- /**
924
- * Add the extra fields for the specific layout type of portfolio
925
- *
926
- * @param array $fields The fields to add.
927
- *
928
- * @return void
929
- * @since 1.0
930
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
931
- */
932
- public function add_layout_fields( $fields = array() ) {
933
- foreach ( $fields as $id => $val ) {
934
- unset( $fields[ $id ] );
935
- $id = $this->layout . '_' . $id;
936
- $fields[ $id ] = $val;
937
- }
938
-
939
- $this->layouts[ $this->layout ]['fields'] = $fields;
940
- }
941
-
942
- /**
943
- * Add fields to add to the metabox of each item of each post type created
944
- *
945
- * @param array $fields The fields to add.
946
- *
947
- * @return void
948
- * @since 1.0
949
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
950
- */
951
- public function add_item_fields( $fields = array() ) {
952
- foreach ( $fields as $id => $val ) {
953
- unset( $fields[ $id ] );
954
- $fields[ $id ] = $val;
955
- }
956
- $this->layouts[ $this->layout ]['item_fields'] = $fields;
957
- }
958
-
959
- /**
960
- * Add columns to the table list
961
- *
962
- * @param array $columns The columns to add in the table list.
963
- *
964
- * @return void
965
- * @since 1.0
966
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
967
- */
968
- public function add_table_columns( $columns ) {
969
- $this->layouts[ $this->layout ]['columns'] = $columns;
970
- }
971
-
972
- /**
973
- * Enqueue the css files of layout
974
- *
975
- * @param string $handle Name of the stylesheet.
976
- * @param string|bool $src Path to the stylesheet from the root directory of WordPress. Example: '/css/mystyle.css'.
977
- * @param array $deps An array of registered style handles this stylesheet depends on. Default empty array.
978
- * @param string|bool $ver String specifying the stylesheet version number, if it has one. This parameter is used
979
- * to ensure that the correct version is sent to the client regardless of caching, and so
980
- * should be included if a version number is available and makes sense for the stylesheet.
981
- * @param string $media Optional. The media for which this stylesheet has been defined.
982
- * Default 'all'. Accepts 'all', 'aural', 'braille', 'handheld', 'projection', 'print',
983
- * 'screen', 'tty', or 'tv'.
984
- *
985
- * @return void
986
- * @since 1.0
987
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
988
- */
989
- public function enqueue_style( $handle, $src = false, $deps = array(), $ver = false, $media = 'all' ) {
990
- $this->layouts[ $this->layout ]['css'][] = compact( 'handle', 'src', 'deps', 'ver', 'media' );
991
- }
992
-
993
- /**
994
- * Enqueue the js files of layout
995
- *
996
- * @param string $handle Name of the script.
997
- * @param string|bool $src Path to the script from the root directory of WordPress. Example: '/js/myscript.js'.
998
- * @param array $deps An array of registered handles this script depends on. Default empty array.
999
- * @param string|bool $ver Optional. String specifying the script version number, if it has one. This parameter
1000
- * is used to ensure that the correct version is sent to the client regardless of caching,
1001
- * and so should be included if a version number is available and makes sense for the script.
1002
- * @param bool $in_footer Optional. Whether to enqueue the script before </head> or before </body>.
1003
- * Default 'false'. Accepts 'false' or 'true'.
1004
- *
1005
- * @return void
1006
- * @since 1.0
1007
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1008
- */
1009
- public function enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) {
1010
- $this->layouts[ $this->layout ]['js'][] = compact( 'handle', 'src', 'deps', 'ver', 'in_footer' );
1011
- }
1012
-
1013
- /**
1014
- * Enqueue the assets for the frontend
1015
- *
1016
- * @return void
1017
- * @since 1.0
1018
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1019
- */
1020
- public function frontend_assets() {
1021
- global $post;
1022
-
1023
- // Not single.
1024
- if ( ! is_single() || ! isset( $post->post_type ) || ! $this->is_valid( $post->post_type ) ) {
1025
- $posts = get_posts(
1026
- array(
1027
- 'post_type' => $this->name,
1028
- 'posts_per_page' => - 1,
1029
- 'post_status' => 'publish',
1030
- 'fields' => 'ids',
1031
- )
1032
- );
1033
-
1034
- $enqueued = array();
1035
-
1036
- foreach ( $posts as $post_id ) {
1037
- $layout = get_post_meta( $post_id, $this->args['layout_option'], true );
1038
-
1039
- if ( in_array( $layout, array( $enqueued ), true ) || ! isset( $this->layouts[ $layout ]['css'] ) ) {
1040
- continue;
1041
- }
1042
-
1043
- foreach ( $this->layouts[ $layout ]['css'] as $asset ) {
1044
- if ( empty( $asset ) ) {
1045
- continue;
1046
- }
1047
- yit_enqueue_style( $asset['handle'], empty( $asset['src'] ) ? false : $this->locate_url( $layout ) . $asset['src'], $asset['deps'], $asset['ver'], $asset['media'] );
1048
- }
1049
-
1050
- $enqueued[] = $layout;
1051
- }
1052
- } else {
1053
- // Load assets of single template.
1054
- $layout = 'single';
1055
-
1056
- if ( ! isset( $this->layouts[ $layout ]['css'] ) ) {
1057
- return;
1058
- }
1059
-
1060
- foreach ( $this->layouts[ $layout ]['css'] as $asset ) {
1061
- if ( empty( $asset ) ) {
1062
- continue;
1063
- }
1064
- yit_enqueue_style( $asset['handle'], $this->locate_url( $layout ) . $asset['src'], $asset['deps'], $asset['ver'], $asset['media'] );
1065
- }
1066
- }
1067
-
1068
  }
1069
 
1070
  /**
1071
- * Register Metaboxes options
1072
- * Add the metabox for the portfolio settings
1073
  *
1074
- * @return void
1075
- * @since 1.0
1076
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1077
- */
1078
- public function add_metabox_cptu() {
1079
-
1080
- // Reorganize layouts.
1081
- if ( $this->args['manage_layouts'] ) {
1082
- $layouts = array();
1083
- foreach ( $this->layouts as $layout_id => $layout ) {
1084
- if ( 'single' === $layout_id ) {
1085
- continue;
1086
- }
1087
- $layouts[ $layout_id ] = $layout['name'];
1088
- }
1089
-
1090
- $layouts = apply_filters( 'yit_cptu_' . $this->name . '_layout_values', $layouts );
1091
- }
1092
-
1093
- $single_layouts = apply_filters( 'yit_cptu_' . $this->name . '_single_layout_values', array() );
1094
-
1095
- $metabox_args = array(
1096
- 'label' => sprintf(
1097
- // translators: %s is the singular name of the post type.
1098
- __( '%s Settings', 'yith-plugin-fw' ),
1099
- $this->labels['singular']
1100
- ),
1101
- 'pages' => $this->name,
1102
- 'context' => 'normal',
1103
- 'priority' => 'default',
1104
- 'tabs' => array(
1105
- 'settings' => array(
1106
- 'label' => __( 'Settings', 'yith-plugin-fw' ),
1107
- 'fields' => apply_filters(
1108
- 'yit_cptu_fields',
1109
- array(
1110
- 'type' => array(
1111
- 'label' => __( 'Type', 'yith-plugin-fw' ),
1112
- 'desc' => sprintf(
1113
- // translators: %s is the singular name of the post type.
1114
- __( 'Layout for this %s', 'yith-plugin-fw' ),
1115
- strtolower( $this->labels['singular'] )
1116
- ),
1117
- 'type' => 'select',
1118
- 'options' => isset( $layouts ) ? $layouts : array(),
1119
- 'std' => '',
1120
- ),
1121
- 'rewrite' => array(
1122
- 'label' => __( 'Rewrite', 'yith-plugin-fw' ),
1123
- 'desc' => __( 'Univocal identification name in the URL for each product (slug from post if empty)', 'yith-plugin-fw' ),
1124
- 'type' => 'text',
1125
- 'std' => '',
1126
- ),
1127
- 'label_singular' => array(
1128
- 'label' => __( 'Label in Singular', 'yith-plugin-fw' ),
1129
- 'desc' => __( 'Set a label in singular (title of portfolio if empty)', 'yith-plugin-fw' ),
1130
- 'type' => 'text',
1131
- 'std' => '',
1132
- ),
1133
- 'label_plural' => array(
1134
- 'label' => __( 'Label in Plural', 'yith-plugin-fw' ),
1135
- 'desc' => __( 'Set a label in plural (title of portfolio if empty)', 'yith-plugin-fw' ),
1136
- 'type' => 'text',
1137
- 'std' => '',
1138
- ),
1139
- 'taxonomy' => array(
1140
- 'label' => __( 'Taxonomy', 'yith-plugin-fw' ),
1141
- 'desc' => __( 'If you want to use categories in the portfolio, set a name for taxonomy. Name should be a slug (must not contain capital letters nor spaces) and must not be more than 32 characters long (database structure restriction).', 'yith-plugin-fw' ),
1142
- 'type' => 'text',
1143
- 'std' => '',
1144
- ),
1145
- 'taxonomy_rewrite' => array(
1146
- 'label' => __( 'Taxonomy Rewrite', 'yith-plugin-fw' ),
1147
- 'desc' => __( 'Set univocal name for each category page URL.', 'yith-plugin-fw' ),
1148
- 'type' => 'text',
1149
- 'std' => '',
1150
- ),
1151
- 'single_layout' => array(
1152
- 'label' => __( 'Single layout', 'yith-plugin-fw' ),
1153
- 'desc' => __( 'Layout for single page of this portfolio', 'yith-plugin-fw' ),
1154
- 'type' => 'select',
1155
- 'options' => $single_layouts,
1156
- 'std' => '',
1157
- ),
1158
- )
1159
- ),
1160
- ),
1161
- ),
1162
-
1163
- );
1164
-
1165
- if ( ! $this->args['has_single'] ) {
1166
- unset( $metabox_args['tabs']['settings']['fields']['rewrite'] );
1167
- }
1168
-
1169
- if ( ! $this->args['has_taxonomy'] ) {
1170
- unset( $metabox_args['tabs']['settings']['fields']['taxonomy'] );
1171
- unset( $metabox_args['tabs']['settings']['fields']['taxonomy_rewrite'] );
1172
- }
1173
-
1174
- if ( ! empty( $this->args['label_item_sing'] ) ) {
1175
- unset( $metabox_args['tabs']['settings']['fields']['label_singular'] );
1176
- }
1177
-
1178
- if ( ! empty( $this->args['label_item_plur'] ) ) {
1179
- unset( $metabox_args['tabs']['settings']['fields']['label_plural'] );
1180
- }
1181
-
1182
- if ( $this->args['manage_layouts'] ) {
1183
-
1184
- if ( count( $layouts ) < 1 ) {
1185
- unset( $metabox_args['tabs']['settings']['fields']['type'] );
1186
- }
1187
-
1188
- // Layouts options.
1189
- foreach ( $this->layouts as $layout => $args ) {
1190
- if ( ! isset( $args['fields'] ) ) {
1191
- continue;
1192
- }
1193
-
1194
- // Section title.
1195
- $metabox_args['tabs']['settings']['fields'][ $layout . '_title' ] = array(
1196
- 'desc' => $args['name'] . ' ' . __( 'layout settings', 'yith-plugin-fw' ),
1197
- 'type' => 'title',
1198
- 'deps' => array(
1199
- 'ids' => '_type',
1200
- 'values' => $layout,
1201
- ),
1202
- );
1203
-
1204
- // Options.
1205
- foreach ( $args['fields'] as $field_id => $field ) {
1206
- $metabox_args['tabs']['settings']['fields'][ $field_id ] = $field;
1207
- $metabox_args['tabs']['settings']['fields'][ $field_id ]['deps'] = array(
1208
- 'ids' => '_type',
1209
- 'values' => $layout,
1210
- );
1211
- }
1212
- }
1213
- } else {
1214
- unset( $metabox_args['tabs']['settings']['fields']['type'] );
1215
- }
1216
-
1217
- if ( count( $single_layouts ) < 1 ) {
1218
- unset( $metabox_args['tabs']['settings']['fields']['single_layout'] );
1219
- }
1220
-
1221
- // Undo if tab empty.
1222
- if ( empty( $metabox_args['tabs']['settings']['fields'] ) ) {
1223
- return;
1224
- }
1225
-
1226
- $metabox = YIT_Metabox( $this->name . '_cptu_settings' );
1227
- $metabox->init( $metabox_args );
1228
- }
1229
-
1230
- /**
1231
- * Register Metaboxes options
1232
- * Add the metabox for the portfolio settings
1233
- *
1234
- * @return void
1235
- * @since 1.0
1236
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1237
- */
1238
- public function add_metabox_item_fields() {
1239
- // phpcs:disable WordPress.Security.NonceVerification.Recommended,WordPress.WP.GlobalVariablesOverride.Prohibited
1240
- global $pagenow, $post_type;
1241
-
1242
- // Get the actual post type, to add the metabox only if necessary.
1243
- if ( 'post.php' === $pagenow && isset( $_REQUEST['post'] ) ) {
1244
- $post_type = get_post_type( intval( $_REQUEST['post'] ) );
1245
- } elseif ( 'post.php' === $pagenow && isset( $_REQUEST['post_ID'] ) ) {
1246
- $post_type = get_post_type( intval( $_REQUEST['post_ID'] ) );
1247
- } elseif ( 'post-new.php' === $pagenow && isset( $_REQUEST['post_type'] ) ) {
1248
- $post_type = sanitize_key( wp_unslash( $_REQUEST['post_type'] ) );
1249
- } else {
1250
- return;
1251
- }
1252
-
1253
- $layout = get_post_meta( $this->get_id_by_name( $post_type ), $this->args['layout_option'], true );
1254
-
1255
- if ( empty( $this->layouts[ $layout ]['item_fields'] ) ) {
1256
- return;
1257
- }
1258
-
1259
- $metabox_args = array(
1260
- 'label' => __( 'Settings', 'yith-plugin-fw' ),
1261
- 'pages' => $post_type,
1262
- 'context' => 'normal',
1263
- 'priority' => 'default',
1264
- 'tabs' => array(
1265
- 'settings' => array(
1266
- 'label' => __( 'Settings', 'yith-plugin-fw' ),
1267
- 'fields' => $this->layouts[ $layout ]['item_fields'],
1268
- ),
1269
- ),
1270
- );
1271
-
1272
- $metabox = YIT_Metabox( $post_type . '_item_fields' );
1273
- $metabox->init( $metabox_args );
1274
-
1275
- // phpcs:enable
1276
- }
1277
-
1278
- /**
1279
- * Add quick links inside the editing page of CPTU and Custom Post Types
1280
- *
1281
- * @return void
1282
- * @since 1.0
1283
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1284
- */
1285
- public function add_quick_links_metaboxes() {
1286
- add_meta_box( $this->name . '_quick_links', __( 'Quick links', 'yith-plugin-fw' ), array( $this, 'quick_links_cptu_inner' ), $this->name, 'side', 'high' );
1287
-
1288
- $args = array(
1289
- 'post_type' => $this->name,
1290
- 'posts_per_page' => - 1,
1291
- 'post_status' => 'publish',
1292
- );
1293
- $post_types = get_posts( $args );
1294
-
1295
- foreach ( $post_types as $post ) {
1296
- $post_type = get_post_meta( $post->ID, '_post_type', true );
1297
- add_meta_box( $post->post_type . '_quick_links', __( 'Quick links', 'yith-plugin-fw' ), array( $this, 'quick_links_cpt_inner' ), $post_type, 'side', 'high' );
1298
- }
1299
- }
1300
-
1301
- /**
1302
- * Link to: "View Items", inside the CPTU
1303
- *
1304
- * @param WP_Post $post The post.
1305
- *
1306
- * @return void
1307
- * @since 1.0
1308
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1309
- */
1310
- public function quick_links_cptu_inner( $post ) {
1311
- extract( $this->cpt_args( $post ) ); //phpcs:ignore WordPress.PHP.DontExtract.extract_extract
1312
- /**
1313
- * Extracted fields.
1314
- *
1315
- * @var string $label_plural The plural label.
1316
- */
1317
- ?>
1318
- <a href="<?php echo esc_url( admin_url( 'edit.php?post_type=' . get_post_meta( $post->ID, '_post_type', true ) ) ); ?>">
1319
- <?php
1320
- echo esc_html(
1321
- sprintf(
1322
- // translators: %s is the plural label of the post type.
1323
- __( 'View %s', 'yith-plugin-fw' ),
1324
- $label_plural
1325
- )
1326
- );
1327
- ?>
1328
- </a>
1329
- <?php
1330
- }
1331
-
1332
- /**
1333
- * Link to: "Edit %s", inside the CPTU
1334
- *
1335
- * @param WP_Post $post The Post.
1336
- *
1337
- * @return void
1338
- * @since 1.0
1339
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1340
- */
1341
- public function quick_links_cpt_inner( $post ) {
1342
- $post = get_post( $this->get_id_by_name( $post->post_type ) );
1343
- $url = admin_url( "post.php?post={$post->ID}&action=edit" );
1344
- ?>
1345
- <a href="<?php echo esc_url( $url ); ?>">
1346
- <?php
1347
- echo esc_html(
1348
- sprintf(
1349
- // translators: %s is the post title.
1350
- __( 'Edit %s', 'yith-plugin-fw' ),
1351
- $post->post_title
1352
- )
1353
- );
1354
- ?>
1355
- </a>
1356
- <?php
1357
- }
1358
-
1359
- /**
1360
- * Define the columns to use in the list table of main sliders post type
1361
- *
1362
- * @param array $columns The columns used in the list table.
1363
- *
1364
- * @return array
1365
- * @since 1.0
1366
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1367
- */
1368
- public function cptu_define_columns( $columns ) {
1369
- unset( $columns['date'] );
1370
-
1371
- $columns['actions'] = '';
1372
-
1373
- return $columns;
1374
- }
1375
-
1376
- /**
1377
- * Change the content of each column of the table list
1378
- *
1379
- * @param string $column The current column.
1380
- * @param int $post_id The current post ID.
1381
- *
1382
- * @return void
1383
- * @since 1.0
1384
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1385
- */
1386
- public function cptu_change_columns( $column, $post_id ) {
1387
- $post = get_post( $post_id );
1388
- extract( $this->cpt_args( $post ) ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
1389
- /**
1390
- * Extracted fields.
1391
- *
1392
- * @var string $label_plural The plural label.
1393
- */
1394
-
1395
- switch ( $column ) {
1396
- case 'actions':
1397
- $edit_url = admin_url( "post.php?post={$post_id}&action=edit" );
1398
- $view_url = admin_url( 'edit.php?post_type=' . get_post_meta( $post_id, '_post_type', true ) );
1399
- $edit_label = sprintf(
1400
- // translators: %s is the singular name of the post type.
1401
- __( 'Edit %s', 'yith-plugin-fw' ),
1402
- ucfirst( $this->labels['singular'] )
1403
- );
1404
- $view_label = sprintf(
1405
- // translators: %s is the plural name of the post type.
1406
- __( 'View %s', 'yith-plugin-fw' ),
1407
- $label_plural
1408
- );
1409
- echo '<a href="' . esc_url( $edit_url ) . '" class="button-secondary">' . esc_html( $edit_label ) . '</a> ';
1410
- echo '<a href="' . esc_url( $view_url ) . '" class="button-secondary">' . esc_html( $view_label ) . '</a> ';
1411
- break;
1412
- }
1413
- }
1414
-
1415
- /**
1416
- * Retrieve the path of layout specified in parameter
1417
- *
1418
- * @param string $layout The layout.
1419
- * @param string $file The file to find.
1420
- *
1421
- * @return bool|string
1422
- * @since 1.0
1423
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1424
- */
1425
- public function locate_file( $layout, $file = '' ) {
1426
- if ( ! $this->args['manage_layouts'] ) {
1427
- return $this->template_path() . '/' . ( ! empty( $file ) ? $file . '.php' : '' );
1428
- }
1429
-
1430
- if ( ! isset( $this->layouts[ $layout ] ) ) {
1431
- $layout = 'default';
1432
- }
1433
-
1434
- return $this->layouts[ $layout ]['path'] . '/' . ( ! empty( $file ) ? $file . '.php' : '' );
1435
- }
1436
-
1437
- /**
1438
- * Retrieve the URL of layout specified in parameter
1439
- *
1440
- * @param string $layout The layout.
1441
- * @param string $file The file to find.
1442
- *
1443
- * @return bool|string
1444
- * @since 1.0
1445
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1446
- */
1447
- public function locate_url( $layout, $file = '' ) {
1448
- if ( ! $this->args['manage_layouts'] ) {
1449
- return $this->template_url();
1450
-
1451
- }
1452
-
1453
- if ( ! isset( $this->layouts[ $layout ] ) ) {
1454
- $layout = 'default';
1455
- }
1456
-
1457
- return $this->layouts[ $layout ]['url'] . '/' . ( ! empty( $file ) ? $file . '.php' : '' );
1458
- }
1459
-
1460
- /**
1461
- * Retrieve the post ID relative to the post of post type
1462
- *
1463
- * @param string $name the name.
1464
- *
1465
- * @return mixed
1466
- * @since 1.0
1467
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1468
- */
1469
- protected function get_id_by_name( $name ) {
1470
- global $wpdb;
1471
-
1472
- return $wpdb->get_var( $wpdb->prepare( "SELECT pm.post_id FROM $wpdb->postmeta AS pm INNER JOIN $wpdb->posts AS p ON p.ID = pm.post_id WHERE pm.meta_key = %s AND pm.meta_value = %s AND p.post_type = %s", '_post_type', $name, $this->name ) );
1473
- }
1474
-
1475
- /**
1476
- * Retrieve the post_type of portfolio by portfolio name
1477
- *
1478
- * @param string $name the name.
1479
- *
1480
- * @return mixed
1481
- * @since 1.0
1482
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1483
- */
1484
- protected function get_post_type_by_name( $name ) {
1485
- global $wpdb;
1486
-
1487
- return $wpdb->get_var( $wpdb->prepare( "SELECT pm.meta_value FROM $wpdb->postmeta AS pm INNER JOIN $wpdb->posts AS p ON p.ID = pm.post_id WHERE pm.meta_key = %s AND p.post_name = %s AND p.post_type = %s", '_post_type', $name, $this->name ) );
1488
- }
1489
-
1490
- /**
1491
- * The shortcode used to show the frontend
1492
- *
1493
- * @param array $atts Attributes.
1494
- * @param string|null $content The content.
1495
- *
1496
- * @return string|null
1497
- * @since 1.0
1498
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1499
- */
1500
- public function add_shortcode( $atts, $content = null ) {
1501
- $atts = wp_parse_args(
1502
- $atts,
1503
- array(
1504
- 'name' => null,
1505
- 'cat' => array(),
1506
- 'posts_per_page' => false,
1507
- 'style' => null,
1508
- )
1509
- );
1510
-
1511
- // Don't show the slider if 'name' is empty or is 'none'.
1512
- if ( empty( $atts['name'] ) || 'none' === $atts['name'] ) {
1513
- return null;
1514
- }
1515
-
1516
- // Compatibility fix: remove prefix if exists in portfolio object.
1517
- if ( function_exists( 'YIT_Portfolio' ) && method_exists( YIT_Portfolio(), 'is' ) && YIT_Portfolio()->is( $atts['name'] ) ) {
1518
- $atts['name'] = str_replace( YIT_Portfolio()->post_type_prefix, '', $atts['name'] );
1519
- }
1520
-
1521
- // Pass vars to template.
1522
- $atts['post_type'] = $this->get_post_type_by_name( $atts['name'] );
1523
- $atts['layout'] = $this->args['manage_layouts'] ? get_post_meta( $this->get_id_by_name( $atts['post_type'] ), $this->args['layout_option'], true ) : '';
1524
- extract( apply_filters( 'yit_cptu_frontend_vars', $atts, $this->name ) ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
1525
-
1526
- /**
1527
- * Extracted fields.
1528
- *
1529
- * @var string $layout The layout.
1530
- */
1531
-
1532
- // Add the javascript assets.
1533
- if ( $this->args['manage_layouts'] && isset( $this->layouts[ $layout ]['js'] ) && ! empty( $this->layouts[ $layout ]['js'] ) ) {
1534
- foreach ( $this->layouts[ $layout ]['js'] as $asset ) {
1535
- if ( empty( $asset ) ) {
1536
- continue;
1537
- }
1538
-
1539
- if ( empty( $asset['src'] ) ) {
1540
- wp_enqueue_script( $asset['handle'] );
1541
- continue;
1542
- }
1543
-
1544
- yit_enqueue_script( $asset['handle'], $this->locate_url( $layout ) . $asset['src'], $asset['deps'], $asset['ver'], $asset['in_footer'] );
1545
- }
1546
- }
1547
-
1548
- // Unique sequential index to differentiate more cpt in the same page.
1549
- ++ $this->index;
1550
-
1551
- ob_start();
1552
- include $this->locate_file( $layout, 'markup' );
1553
-
1554
- return ob_get_clean();
1555
- }
1556
-
1557
- /**
1558
- * Shortcode icon
1559
- * Return the shortcode icone to display on shortcode panel
1560
- *
1561
- * @param string $icon_url Icone url found by yit_shortcode plugin.
1562
- *
1563
- * @return string
1564
- * @since 1.0.0
1565
- * @author Antonino Scarfi' <antonio.scarfi@yithemes.it>
1566
- */
1567
- public function shortcode_icon( $icon_url ) {
1568
- return ! empty( $this->args['shortcode_icon'] ) ? $this->args['shortcode_icon'] : $icon_url;
1569
- }
1570
-
1571
- /**
1572
- * Return an array with cptu options to shortcode panel
1573
- * All definition settings to add cptu shortcode to Yit Shortcode Panel
1574
- *
1575
- * @param array $shortcodes Shortcodes.
1576
- *
1577
- * @return array
1578
- * @since 1.0
1579
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1580
- */
1581
- public function add_shortcode_to_box( $shortcodes ) {
1582
- $post_types = array();
1583
-
1584
- foreach ( $this->get_post_types() as $post ) {
1585
- $post_types[ $post->post_name ] = $post->post_title;
1586
- }
1587
-
1588
- $args = array(
1589
- $this->args['shortcode_name'] => array(
1590
- 'title' => $this->labels['singular'],
1591
- 'description' => sprintf(
1592
- // translators: %s is the name of the post type.
1593
- __( 'Show frontend of the %s', 'yith-plugin-fw' ),
1594
- $this->labels['main_name']
1595
- ),
1596
- 'tab' => 'cpt',
1597
- 'create' => false,
1598
- 'has_content' => false,
1599
- 'in_visual_composer' => true,
1600
- 'attributes' => array(
1601
- 'name' => array(
1602
- 'title' => __( 'Name', 'yith-plugin-fw' ),
1603
- 'type' => 'select',
1604
- 'options' => $post_types,
1605
- 'std' => '',
1606
- ),
1607
- ),
1608
- ),
1609
- );
1610
-
1611
- return array_merge( $shortcodes, $args );
1612
- }
1613
-
1614
- /**
1615
- * Check the post type passed in parameter, if is generated by this CPTU
1616
- *
1617
- * @param string $post_type The post type to check.
1618
  *
1619
  * @return bool
1620
- * @since 1.0
1621
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1622
- */
1623
- protected function is_valid( $post_type ) {
1624
- return (bool) ( strpos( $post_type, $this->args['post_type_prefix'] ) !== false );
1625
- }
1626
-
1627
- /**
1628
- * Add as a valid post type all cptu when importing dummy data
1629
- *
1630
- * @param array $post The post object.
1631
- *
1632
- * @return array
1633
- * @since 1.0
1634
- * @author Antonio La Rocca <antonio.larocca@yithemes.com>
1635
- */
1636
- public function add_importer_required_post_type( $post ) {
1637
- // phpcs:disable WordPress.WP.GlobalVariablesOverride.Prohibited
1638
- global $wp_post_types, $wp_taxonomies;
1639
-
1640
- if ( strpos( $post['post_type'], $this->prefix_cpt ) === false ) {
1641
- return $post;
1642
- }
1643
-
1644
- if ( ! isset( $wp_post_types[ $post['post_type'] ] ) ) {
1645
- $wp_post_types[ $post['post_type'] ] = array( 'name' => '' );
1646
- }
1647
-
1648
- if ( ! empty( $post['terms'] ) ) {
1649
- foreach ( $post['terms'] as $term ) {
1650
- if ( ! isset( $wp_taxonomies[ $term['domain'] ] ) ) {
1651
- $wp_taxonomies[ $term['domain'] ] = array( 'name' => '' );
1652
- }
1653
- }
1654
- }
1655
-
1656
- return $post;
1657
- // phpcs:enable
1658
- }
1659
-
1660
- /**
1661
- * Add taxonomy when importing dummy data
1662
- *
1663
- * @param array $terms Array of terms.
1664
- *
1665
- * @return array
1666
- * @since 1.0
1667
- * @author Antonio La Rocca <antonio.larocca@yithemes.com>
1668
- */
1669
- public function add_importer_required_taxonomy( $terms ) {
1670
- // phpcs:disable WordPress.WP.GlobalVariablesOverride.Prohibited
1671
- global $wp_taxonomies;
1672
-
1673
- if ( ! empty( $terms ) ) {
1674
- foreach ( $terms as $term ) {
1675
- if ( isset( $term['domain'] ) && ! isset( $wp_taxonomies[ $term['domain'] ] ) ) {
1676
- $wp_taxonomies[ $term['domain'] ] = array( 'name' => '' );
1677
- }
1678
- }
1679
- }
1680
-
1681
- return $terms;
1682
- // phpcs:enable
1683
- }
1684
-
1685
- /**
1686
- * Force terms recount for imported taxonomy
1687
- *
1688
- * @param array $tt_ids Terms ids.
1689
- * @param array $ids Post ids.
1690
- * @param string $tax Taxonomy name.
1691
- *
1692
- * @return void
1693
- * @since 1.0
1694
- * @author Antonio La Rocca <antonio.larocca@yithemes.com>
1695
  */
1696
- public function recount_terms_post( $tt_ids, $ids, $tax ) {
1697
- wp_update_term_count( $tt_ids, $tax );
1698
  }
1699
 
1700
- // ### ASSETS ###
1701
-
1702
  /**
1703
- * Enqueue the assets for the admin
1704
  *
1705
- * @return void
1706
- * @since 1.0
1707
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1708
- */
1709
- public function admin_assets() {
1710
- $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
1711
- wp_enqueue_media();
1712
- wp_enqueue_script( 'yit-cptu', YIT_CORE_PLUGIN_URL . '/assets/js/yit-cpt-unlimited' . $suffix . '.js', array( 'jquery' ), '1.0.0', true );
1713
- }
1714
-
1715
- /**
1716
- * Add the button to the top of the list table page of CPTU
1717
  *
1718
- * @return void
1719
- * @since 1.0
1720
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1721
- */
1722
- public function add_button_multiuploader() {
1723
- global $pagenow, $post_type, $wpdb;
1724
-
1725
- if ( 'edit.php' !== $pagenow ) {
1726
- return;
1727
- }
1728
-
1729
- $cptu = $wpdb->get_var( $wpdb->prepare( "SELECT p.post_type FROM $wpdb->postmeta AS pm INNER JOIN $wpdb->posts AS p ON p.ID = pm.post_id WHERE pm.meta_key = %s AND pm.meta_value = %s", '_post_type', $post_type ) );
1730
-
1731
- $post = get_post( $this->get_id_by_name( $post_type ) );
1732
- if ( empty( $post ) ) {
1733
- return;
1734
- }
1735
- extract( $this->cpt_args( $post ) ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
1736
-
1737
- /**
1738
- * Extracted fields.
1739
- *
1740
- * @var string $label_plural The plural label.
1741
- */
1742
-
1743
- if ( $cptu !== $this->name || ! $this->is_valid( $post_type ) ) {
1744
- return;
1745
- }
1746
-
1747
- $uploader_title = sprintf(
1748
- // translators: %s is the plural name of the post type.
1749
- __( 'Add %s from images', 'yith-plugin-fw' ),
1750
- $label_plural
1751
- );
1752
-
1753
- $uploader_button_text = sprintf(
1754
- // translators: %s is the plural name of the post type.
1755
- __( 'Add %s', 'yith-plugin-fw' ),
1756
- $label_plural
1757
- );
1758
- ?>
1759
- <script>
1760
- ( function ( $ ) {
1761
- "use strict";
1762
-
1763
- var button = $( '<a />', {
1764
- href : '#',
1765
- class : 'multi-uploader add-new-h2',
1766
- 'data-uploader_title' : '<?php esc_html( $uploader_title ); ?>',
1767
- 'data-uploader_button_text': '<?php esc_html( $uploader_button_text ); ?>',
1768
- 'data-nonce' : '<?php echo esc_html( wp_create_nonce( 'cpt-unlimited-multiuploader' ) ); ?>'
1769
- } ).text( '<?php esc_html_e( 'Upload multiple files', 'yith-plugin-fw' ); ?>' );
1770
-
1771
- var spinner = $( '<span />', {
1772
- class: 'spinner',
1773
- style: 'float: none;'
1774
- } );
1775
-
1776
- button.appendTo( '.wrap h2, .wrap h1' ).after( spinner );
1777
-
1778
- } )( jQuery );
1779
- </script>
1780
- <?php
1781
- }
1782
-
1783
- /**
1784
- * Add more posts by multiupload
1785
- *
1786
- * @return void
1787
- * @since 1.0
1788
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1789
- */
1790
- public function post_multiuploader() {
1791
- check_ajax_referer( 'cpt-unlimited-multiuploader' );
1792
-
1793
- if ( ! isset( $_REQUEST['images'] ) || ! isset( $_REQUEST['post_type'] ) && $this->is_valid( sanitize_key( wp_unslash( $_REQUEST['post_type'] ) ) ) ) {
1794
- return;
1795
- }
1796
-
1797
- foreach ( $_REQUEST['images'] as $the ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
1798
- // Create post object.
1799
- $arg = array(
1800
- 'post_title' => $the['title'],
1801
- 'post_type' => sanitize_key( wp_unslash( $_REQUEST['post_type'] ) ),
1802
- );
1803
- $post_id = wp_insert_post( $arg );
1804
- set_post_thumbnail( $post_id, $the['id'] );
1805
- }
1806
-
1807
- die();
1808
- }
1809
-
1810
-
1811
- // ###### SINGLE TEMPLATE ######
1812
-
1813
- /**
1814
- * Load the single template file
1815
- *
1816
- * @return void
1817
- * @since 1.0
1818
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1819
- */
1820
- public function single_template() {
1821
- global $post, $wpdb;
1822
-
1823
- if ( ( ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && ! is_single() ) || ! isset( $post->post_type ) || ! $this->is_valid( $post->post_type ) ) {
1824
- return;
1825
- }
1826
-
1827
- // Add the javascript assets.
1828
- if ( $this->args['manage_layouts'] ) {
1829
- foreach ( $this->layouts['single']['js'] as $asset ) {
1830
- yit_enqueue_script( $asset['handle'], $this->locate_url( 'single' ) . $asset['src'], $asset['deps'], $asset['ver'], $asset['in_footer'] );
1831
- }
1832
- }
1833
-
1834
- $post_name = $wpdb->get_var( $wpdb->prepare( "SELECT p.post_name FROM $wpdb->postmeta AS pm INNER JOIN $wpdb->posts AS p ON p.ID = pm.post_id WHERE pm.meta_key = %s AND pm.meta_value = %s AND p.post_type = %s", '_post_type', $post->post_type, $this->name ) );
1835
- extract( apply_filters( 'yit_cptu_frontend_vars', array( 'name' => $post_name ), $this->name ) ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
1836
-
1837
- include $this->locate_file( 'single', 'markup' );
1838
- }
1839
-
1840
- /**
1841
- * Load a file for the configuration of single template page of portfolio
1842
- *
1843
- * @return void
1844
- * @since 1.0
1845
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1846
- */
1847
- public function single_template_config() {
1848
- // phpcs:disable WordPress.Security.NonceVerification.Recommended,WordPress.WP.GlobalVariablesOverride.Prohibited
1849
- global $post, $wpdb;
1850
-
1851
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_REQUEST['post_id'] ) ) {
1852
- $post = get_post( absint( $_REQUEST['post_id'] ) );
1853
- }
1854
-
1855
- if ( ( ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && ! is_single() ) || ! isset( $post->post_type ) || ! $this->is_valid( $post->post_type ) ) {
1856
- return;
1857
- }
1858
-
1859
- $this->layout = 'single';
1860
- $path = $this->locate_file( 'single', 'config' );
1861
-
1862
- if ( file_exists( $path ) ) {
1863
- $post_name = $wpdb->get_var( $wpdb->prepare( "SELECT p.post_name FROM $wpdb->postmeta AS pm INNER JOIN $wpdb->posts AS p ON p.ID = pm.post_id WHERE pm.meta_key = %s AND pm.meta_value = %s AND p.post_type = %s", '_post_type', $post->post_type, $this->name ) );
1864
- extract( apply_filters( 'yit_cptu_frontend_vars', array( 'name' => $post_name ), $this->name ) ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
1865
-
1866
- include $path;
1867
- }
1868
- // phpcs:enable
1869
- }
1870
-
1871
- // ########################## ARCHIVE TEMPLATE ###############################
1872
-
1873
- /**
1874
- * Load the template for archive page
1875
- *
1876
- * @return void
1877
- * @since 1.0
1878
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1879
- */
1880
- public function archive_template() {
1881
- global $wp_query;
1882
-
1883
- // Check if we are in archive template.
1884
- if ( ! ( ! is_admin() && is_archive() && isset( $wp_query->post ) && $this->is_valid( $wp_query->post->post_type ) ) ) {
1885
- return;
1886
- }
1887
-
1888
- // Remove the action from loop of theme.
1889
- remove_action( 'yit_content_loop', 'yit_content_loop', 10 );
1890
- add_action( 'yit_content_loop', array( $this, 'archive_template_loop' ), 10 );
1891
- }
1892
-
1893
- /**
1894
- * Load loop for the archive template
1895
- *
1896
- * @return void
1897
- * @since 1.0
1898
- * @author Antonino Scarfi' <antonino.scarfi@yithemes.com>
1899
  */
1900
- public function archive_template_loop() {
1901
- global $wp_query;
1902
- echo $this->add_shortcode( array( 'name' => $wp_query->post->post_type ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1903
  }
1904
  }
1905
  }
1
  <?php
2
  /**
3
  * YITH Custom-Post-Type Unlimited Class.
4
+ * Deprecated! Kept only to prevent fatal errors if someone is using it.
5
  *
6
  * @class YIT_CPT_Unlimited
7
  * @package YITH\PluginFramework\Classes
19
  */
20
  class YIT_CPT_Unlimited {
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  /**
23
  * YIT_CPT_Unlimited constructor.
24
  *
26
  */
27
  public function __construct( $args = array() ) {
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  }
30
 
31
  /**
32
+ * Avoid issues when calling a non-defined method
 
33
  *
34
+ * @param string $name Name of the missing method.
35
+ * @param array $arguments Arguments.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  *
37
  * @return bool
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  */
39
+ public function __call( $name, $arguments ) {
40
+ return false;
41
  }
42
 
 
 
43
  /**
44
+ * Avoid issues when calling a non-defined attribute
45
  *
46
+ * @param string $key Name of the missing attribute.
 
 
 
 
 
 
 
 
 
 
 
47
  *
48
+ * @return bool
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  */
50
+ public function __get( $key ) {
51
+ return false;
 
52
  }
53
  }
54
  }
plugin-fw/init.php CHANGED
@@ -1,13 +1,13 @@
1
  <?php
2
  /**
3
  * Framework Name: YIT Plugin Framework
4
- * Version: 3.5.1
5
  * Author: YITH
6
  * Text Domain: yith-plugin-fw
7
  * Domain Path: /languages/
8
  *
9
  * @author YITH
10
- * @version 3.5.1
11
  * @package YITH\PluginFramework
12
  */
13
 
1
  <?php
2
  /**
3
  * Framework Name: YIT Plugin Framework
4
+ * Version: 3.5.3
5
  * Author: YITH
6
  * Text Domain: yith-plugin-fw
7
  * Domain Path: /languages/
8
  *
9
  * @author YITH
10
+ * @version 3.5.3
11
  * @package YITH\PluginFramework
12
  */
13
 
plugin-fw/languages/yith-plugin-fw-el.mo CHANGED
Binary file
plugin-fw/languages/yith-plugin-fw-el.po CHANGED
@@ -4,7 +4,7 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: YITH Framework\n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
- "POT-Creation-Date: 2020-12-28 12:30:11+00:00\n"
8
  "PO-Revision-Date: 2020-09-25 09:16:07+0000\n"
9
  "Language: el_GR\n"
10
  "MIME-Version: 1.0\n"
@@ -37,229 +37,6 @@ msgstr "Επιλογή Χρώματος"
37
  msgid "Color value"
38
  msgstr "Αξία χρώματος"
39
 
40
- #. translators: %s is the singular name of the post type.
41
- #. translators: $s is the singular name of the post type.
42
- #. translators: %s is the singular name of the post type.
43
- #. translators: %s is the plural name of the post type.
44
- #: includes/class-yit-cpt-unlimited.php:486
45
- #: includes/class-yit-cpt-unlimited.php:619
46
- #: includes/class-yit-cpt-unlimited.php:768
47
- #: includes/class-yit-cpt-unlimited.php:1755
48
- msgid "Add %s"
49
- msgstr "Προσθήκη %s"
50
-
51
- #. translators: %s is the singular name of the post type.
52
- #. translators: $s is the singular name of the post type.
53
- #: includes/class-yit-cpt-unlimited.php:488
54
- #: includes/class-yit-cpt-unlimited.php:621
55
- msgid "Add New %s"
56
- msgstr "Προσθήκη Νέου %s"
57
-
58
- #. translators: %s is the singular name of the post type.
59
- #. translators: $s is the singular name of the post type.
60
- #. translators: %s is the post title.
61
- #. translators: %s is the singular name of the post type.
62
- #: includes/class-yit-cpt-unlimited.php:490
63
- #: includes/class-yit-cpt-unlimited.php:623
64
- #: includes/class-yit-cpt-unlimited.php:1350
65
- #: includes/class-yit-cpt-unlimited.php:1401
66
- msgid "Edit %s"
67
- msgstr "Επεξεργασία %s"
68
-
69
- #. translators: %s is the singular name of the post type.
70
- #. translators: $s is the singular name of the post type.
71
- #: includes/class-yit-cpt-unlimited.php:492
72
- #: includes/class-yit-cpt-unlimited.php:625
73
- msgid "New %s"
74
- msgstr "Νέο %s"
75
-
76
- #. translators: %s is the plural name of the post type.
77
- #. translators: $s is the plural name of the post type.
78
- #: includes/class-yit-cpt-unlimited.php:494
79
- #: includes/class-yit-cpt-unlimited.php:627
80
- msgid "All %s"
81
- msgstr "Όλα %s"
82
-
83
- #. translators: %s is the singular name of the post type.
84
- #. translators: $s is the singular name of the post type.
85
- #. translators: %s is the plural label of the post type.
86
- #. translators: %s is the plural name of the post type.
87
- #: includes/class-yit-cpt-unlimited.php:496
88
- #: includes/class-yit-cpt-unlimited.php:629
89
- #: includes/class-yit-cpt-unlimited.php:1323
90
- #: includes/class-yit-cpt-unlimited.php:1406
91
- msgid "View %s"
92
- msgstr "Προβολή %s"
93
-
94
- #. translators: %s is the plural name of the post type.
95
- #. translators: $s is the plural name of the post type.
96
- #: includes/class-yit-cpt-unlimited.php:498
97
- #: includes/class-yit-cpt-unlimited.php:631
98
- msgid "Search %s"
99
- msgstr "Αναζήτηση %s"
100
-
101
- #. translators: %s is the plural name of the post type.
102
- #. translators: $s is the plural name of the post type.
103
- #: includes/class-yit-cpt-unlimited.php:500
104
- #: includes/class-yit-cpt-unlimited.php:633
105
- msgid "No %s found"
106
- msgstr "Δεν βρέθηκε %s"
107
-
108
- #. translators: %s is the plural name of the post type.
109
- #. translators: $s is the plural name of the post type.
110
- #: includes/class-yit-cpt-unlimited.php:502
111
- #: includes/class-yit-cpt-unlimited.php:635
112
- msgid "No %s found in Trash"
113
- msgstr "Δεν βρέθηκε %s στον Κάδο Ανακύκλωσης"
114
-
115
- #: includes/class-yit-cpt-unlimited.php:678 templates/fields/ajax-terms.php:41
116
- msgid "Search Categories"
117
- msgstr "Αναζήτηση Κατηγοριών"
118
-
119
- #: includes/class-yit-cpt-unlimited.php:679
120
- msgid "All Categories"
121
- msgstr "Όλες οι Κατηγορίες"
122
-
123
- #: includes/class-yit-cpt-unlimited.php:680
124
- msgid "Parent Category"
125
- msgstr "Γονική Κατηγορία"
126
-
127
- #: includes/class-yit-cpt-unlimited.php:681
128
- msgid "Parent Category:"
129
- msgstr "Γονική Κατηγορία:"
130
-
131
- #: includes/class-yit-cpt-unlimited.php:682
132
- msgid "Edit Category"
133
- msgstr "Επεξεργασία Kατηγορίας"
134
-
135
- #: includes/class-yit-cpt-unlimited.php:683
136
- msgid "Update Category"
137
- msgstr "Ενημέρωση Κατηγορίας"
138
-
139
- #: includes/class-yit-cpt-unlimited.php:684
140
- msgid "Add New Category"
141
- msgstr "Προσθήκη Νέας Κατηγορίας"
142
-
143
- #: includes/class-yit-cpt-unlimited.php:685
144
- msgid "New Category Name"
145
- msgstr "Όνομα Νέας Κατηγορίας"
146
-
147
- #: includes/class-yit-cpt-unlimited.php:686
148
- msgid "Category"
149
- msgstr "Κατηγορία"
150
-
151
- #: includes/class-yit-cpt-unlimited.php:778
152
- msgid "Categories"
153
- msgstr "Κατηγορίες"
154
-
155
- #. translators: %s is the singular name of the post type.
156
- #: includes/class-yit-cpt-unlimited.php:1098
157
- msgid "%s Settings"
158
- msgstr "Ρυθμίσεις %s"
159
-
160
- #: includes/class-yit-cpt-unlimited.php:1106
161
- #: includes/class-yit-cpt-unlimited.php:1260
162
- #: includes/class-yit-cpt-unlimited.php:1266
163
- #: includes/class-yit-plugin-panel.php:84
164
- msgid "Settings"
165
- msgstr "Ρυθμίσεις"
166
-
167
- #: includes/class-yit-cpt-unlimited.php:1111
168
- msgid "Type"
169
- msgstr "Τύπος"
170
-
171
- #. translators: %s is the singular name of the post type.
172
- #: includes/class-yit-cpt-unlimited.php:1114
173
- msgid "Layout for this %s"
174
- msgstr "Διάταξη για %s"
175
-
176
- #: includes/class-yit-cpt-unlimited.php:1122
177
- msgid "Rewrite"
178
- msgstr "Επανεγγραφή"
179
-
180
- #: includes/class-yit-cpt-unlimited.php:1123
181
- msgid ""
182
- "Univocal identification name in the URL for each product (slug from post if "
183
- "empty)"
184
- msgstr ""
185
- "Μονοσήμαντο όνομα ταυτοποίησης URL για κάθε προϊόν (slug από άρθρο αν είναι "
186
- "κενό)"
187
-
188
- #: includes/class-yit-cpt-unlimited.php:1128
189
- msgid "Label in Singular"
190
- msgstr "Επιγραφή σε Ενικό"
191
-
192
- #: includes/class-yit-cpt-unlimited.php:1129
193
- msgid "Set a label in singular (title of portfolio if empty)"
194
- msgstr "Ορίστε μια επιγραφή στον ενικό (τίτλος πορτφόλιο αν είναι κενό)"
195
-
196
- #: includes/class-yit-cpt-unlimited.php:1134
197
- msgid "Label in Plural"
198
- msgstr "Επιγραφή σε Πληθυντικό"
199
-
200
- #: includes/class-yit-cpt-unlimited.php:1135
201
- msgid "Set a label in plural (title of portfolio if empty)"
202
- msgstr "Ορίστε μια επιγραφή στον πληθυντικό (τίτλος πορτφόλιο αν είναι κενό)"
203
-
204
- #: includes/class-yit-cpt-unlimited.php:1140
205
- msgid "Taxonomy"
206
- msgstr "Ταξινομία"
207
-
208
- #: includes/class-yit-cpt-unlimited.php:1141
209
- msgid ""
210
- "If you want to use categories in the portfolio, set a name for taxonomy. "
211
- "Name should be a slug (must not contain capital letters nor spaces) and must "
212
- "not be more than 32 characters long (database structure restriction)."
213
- msgstr ""
214
- "Αν θέλετε να χρησιμοποιήσετε κατηγορίες στο πορτφόλιο, ορίστε ένα όνομα για "
215
- "την ταξινομία. Το όνομα πρέπει να είναι slug (δεν πρέπει να περιλαμβάνει "
216
- "κεφαλαία γράμματα ή κενά) και δεν πρέπει να είναι μεγαλύτερο από 32 "
217
- "χαρακτήρες (περιορισμός δομής βάσης δεδομένων)."
218
-
219
- #: includes/class-yit-cpt-unlimited.php:1146
220
- msgid "Taxonomy Rewrite"
221
- msgstr "Επανεγγραφή Ταξινομίας"
222
-
223
- #: includes/class-yit-cpt-unlimited.php:1147
224
- msgid "Set univocal name for each category page URL."
225
- msgstr "Ορίστε μονοσήμαντο όνομα για κάθε URL σελίδας κατηγορίας."
226
-
227
- #: includes/class-yit-cpt-unlimited.php:1152
228
- msgid "Single layout"
229
- msgstr "Μονή διάταξη"
230
-
231
- #: includes/class-yit-cpt-unlimited.php:1153
232
- msgid "Layout for single page of this portfolio"
233
- msgstr "Διάταξη μονής σελίδας του πορτφόλιο"
234
-
235
- #: includes/class-yit-cpt-unlimited.php:1196
236
- msgid "layout settings"
237
- msgstr "ρυθμίσεις διάταξης"
238
-
239
- #: includes/class-yit-cpt-unlimited.php:1286
240
- #: includes/class-yit-cpt-unlimited.php:1297
241
- msgid "Quick links"
242
- msgstr "Γρήγορα λινκ"
243
-
244
- #. translators: %s is the name of the post type.
245
- #: includes/class-yit-cpt-unlimited.php:1593
246
- msgid "Show frontend of the %s"
247
- msgstr "Προβολή εμφάνισης του %s"
248
-
249
- #: includes/class-yit-cpt-unlimited.php:1602 templates/fields/customtabs.php:34
250
- #: templates/fields/customtabs.php:76
251
- msgid "Name"
252
- msgstr "Όνομα"
253
-
254
- #. translators: %s is the plural name of the post type.
255
- #: includes/class-yit-cpt-unlimited.php:1749
256
- msgid "Add %s from images"
257
- msgstr "Προσθήκη %s από εικόνες"
258
-
259
- #: includes/class-yit-cpt-unlimited.php:1769
260
- msgid "Upload multiple files"
261
- msgstr "Ανέβασμα πολλαπλών αρχείων"
262
-
263
  #: includes/class-yit-plugin-panel-woocommerce.php:419
264
  msgid "The changes you have made will be lost if you leave this page."
265
  msgstr ""
@@ -269,6 +46,10 @@ msgstr ""
269
  msgid "Plugin Settings"
270
  msgstr "Ρυθμίσεις Προσθέτου"
271
 
 
 
 
 
272
  #: includes/class-yit-plugin-panel.php:450
273
  #: includes/class-yit-plugin-panel.php:453
274
  msgid "How to install premium version"
@@ -612,6 +393,10 @@ msgstr "Αναζήτηση Άρθρου"
612
  msgid "Search Product"
613
  msgstr "Αναζήτηση Προϊόντος"
614
 
 
 
 
 
615
  #: templates/fields/customtabs.php:17
616
  msgid "Close all"
617
  msgstr "Απενεργοποίηση όλων"
@@ -624,6 +409,10 @@ msgstr "Ανάπτυξη όλων"
624
  msgid "Remove"
625
  msgstr "Αφαίρεση"
626
 
 
 
 
 
627
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
628
  msgid "Value"
629
  msgstr "Τιμή"
@@ -803,17 +592,6 @@ msgstr "Άδεια χρήσης προϊόντος"
803
  msgid "YITH"
804
  msgstr "YITH"
805
 
806
- #. translators: %s is the singular name of the post type.
807
- #: includes/class-yit-cpt-unlimited.php:676
808
- msgctxt "taxonomy general name"
809
- msgid "%s Categories"
810
- msgstr "Κατηγορίες %s"
811
-
812
- #: includes/class-yit-cpt-unlimited.php:677
813
- msgctxt "taxonomy singular name"
814
- msgid "Category"
815
- msgstr "Κατηγορία"
816
-
817
  #: includes/class-yith-dashboard.php:96
818
  msgctxt "Plugin FW"
819
  msgid "View Changelog"
@@ -938,6 +716,14 @@ msgctxt "Action links"
938
  msgid "Settings"
939
  msgstr "Ρυθμίσεις"
940
 
 
 
 
 
 
 
 
 
941
  #~ msgid "Show full PHPInfo"
942
  #~ msgstr "Πλήρης εμφάνιση PHPInfo"
943
 
@@ -958,3 +744,129 @@ msgstr "Ρυθμίσεις"
958
 
959
  #~ msgid "and"
960
  #~ msgstr "και"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  msgstr ""
5
  "Project-Id-Version: YITH Framework\n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
+ "POT-Creation-Date: 2021-01-21 07:36:24+00:00\n"
8
  "PO-Revision-Date: 2020-09-25 09:16:07+0000\n"
9
  "Language: el_GR\n"
10
  "MIME-Version: 1.0\n"
37
  msgid "Color value"
38
  msgstr "Αξία χρώματος"
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  #: includes/class-yit-plugin-panel-woocommerce.php:419
41
  msgid "The changes you have made will be lost if you leave this page."
42
  msgstr ""
46
  msgid "Plugin Settings"
47
  msgstr "Ρυθμίσεις Προσθέτου"
48
 
49
+ #: includes/class-yit-plugin-panel.php:84
50
+ msgid "Settings"
51
+ msgstr "Ρυθμίσεις"
52
+
53
  #: includes/class-yit-plugin-panel.php:450
54
  #: includes/class-yit-plugin-panel.php:453
55
  msgid "How to install premium version"
393
  msgid "Search Product"
394
  msgstr "Αναζήτηση Προϊόντος"
395
 
396
+ #: templates/fields/ajax-terms.php:41
397
+ msgid "Search Categories"
398
+ msgstr "Αναζήτηση Κατηγοριών"
399
+
400
  #: templates/fields/customtabs.php:17
401
  msgid "Close all"
402
  msgstr "Απενεργοποίηση όλων"
409
  msgid "Remove"
410
  msgstr "Αφαίρεση"
411
 
412
+ #: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
413
+ msgid "Name"
414
+ msgstr "Όνομα"
415
+
416
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
417
  msgid "Value"
418
  msgstr "Τιμή"
592
  msgid "YITH"
593
  msgstr "YITH"
594
 
 
 
 
 
 
 
 
 
 
 
 
595
  #: includes/class-yith-dashboard.php:96
596
  msgctxt "Plugin FW"
597
  msgid "View Changelog"
716
  msgid "Settings"
717
  msgstr "Ρυθμίσεις"
718
 
719
+ #~ msgctxt "taxonomy singular name"
720
+ #~ msgid "Category"
721
+ #~ msgstr "Κατηγορία"
722
+
723
+ #~ msgctxt "taxonomy general name"
724
+ #~ msgid "%s Categories"
725
+ #~ msgstr "Κατηγορίες %s"
726
+
727
  #~ msgid "Show full PHPInfo"
728
  #~ msgstr "Πλήρης εμφάνιση PHPInfo"
729
 
744
 
745
  #~ msgid "and"
746
  #~ msgstr "και"
747
+
748
+ #~ msgid "Upload multiple files"
749
+ #~ msgstr "Ανέβασμα πολλαπλών αρχείων"
750
+
751
+ #~ msgid "Add %s from images"
752
+ #~ msgstr "Προσθήκη %s από εικόνες"
753
+
754
+ #~ msgid "Show frontend of the %s"
755
+ #~ msgstr "Προβολή εμφάνισης του %s"
756
+
757
+ #~ msgid "Quick links"
758
+ #~ msgstr "Γρήγορα λινκ"
759
+
760
+ #~ msgid "layout settings"
761
+ #~ msgstr "ρυθμίσεις διάταξης"
762
+
763
+ #~ msgid "Layout for single page of this portfolio"
764
+ #~ msgstr "Διάταξη μονής σελίδας του πορτφόλιο"
765
+
766
+ #~ msgid "Single layout"
767
+ #~ msgstr "Μονή διάταξη"
768
+
769
+ #~ msgid "Set univocal name for each category page URL."
770
+ #~ msgstr "Ορίστε μονοσήμαντο όνομα για κάθε URL σελίδας κατηγορίας."
771
+
772
+ #~ msgid "Taxonomy Rewrite"
773
+ #~ msgstr "Επανεγγραφή Ταξινομίας"
774
+
775
+ #~ msgid ""
776
+ #~ "If you want to use categories in the portfolio, set a name for taxonomy. "
777
+ #~ "Name should be a slug (must not contain capital letters nor spaces) and "
778
+ #~ "must not be more than 32 characters long (database structure restriction)."
779
+ #~ msgstr ""
780
+ #~ "Αν θέλετε να χρησιμοποιήσετε κατηγορίες στο πορτφόλιο, ορίστε ένα όνομα "
781
+ #~ "για την ταξινομία. Το όνομα πρέπει να είναι slug (δεν πρέπει να "
782
+ #~ "περιλαμβάνει κεφαλαία γράμματα ή κενά) και δεν πρέπει να είναι μεγαλύτερο "
783
+ #~ "από 32 χαρακτήρες (περιορισμός δομής βάσης δεδομένων)."
784
+
785
+ #~ msgid "Taxonomy"
786
+ #~ msgstr "Ταξινομία"
787
+
788
+ #~ msgid "Set a label in plural (title of portfolio if empty)"
789
+ #~ msgstr ""
790
+ #~ "Ορίστε μια επιγραφή στον πληθυντικό (τίτλος πορτφόλιο αν είναι κενό)"
791
+
792
+ #~ msgid "Label in Plural"
793
+ #~ msgstr "Επιγραφή σε Πληθυντικό"
794
+
795
+ #~ msgid "Set a label in singular (title of portfolio if empty)"
796
+ #~ msgstr "Ορίστε μια επιγραφή στον ενικό (τίτλος πορτφόλιο αν είναι κενό)"
797
+
798
+ #~ msgid "Label in Singular"
799
+ #~ msgstr "Επιγραφή σε Ενικό"
800
+
801
+ #~ msgid ""
802
+ #~ "Univocal identification name in the URL for each product (slug from post "
803
+ #~ "if empty)"
804
+ #~ msgstr ""
805
+ #~ "Μονοσήμαντο όνομα ταυτοποίησης URL για κάθε προϊόν (slug από άρθρο αν "
806
+ #~ "είναι κενό)"
807
+
808
+ #~ msgid "Rewrite"
809
+ #~ msgstr "Επανεγγραφή"
810
+
811
+ #~ msgid "Layout for this %s"
812
+ #~ msgstr "Διάταξη για %s"
813
+
814
+ #~ msgid "Type"
815
+ #~ msgstr "Τύπος"
816
+
817
+ #~ msgid "%s Settings"
818
+ #~ msgstr "Ρυθμίσεις %s"
819
+
820
+ #~ msgid "Categories"
821
+ #~ msgstr "Κατηγορίες"
822
+
823
+ #~ msgid "Category"
824
+ #~ msgstr "Κατηγορία"
825
+
826
+ #~ msgid "New Category Name"
827
+ #~ msgstr "Όνομα Νέας Κατηγορίας"
828
+
829
+ #~ msgid "Add New Category"
830
+ #~ msgstr "Προσθήκη Νέας Κατηγορίας"
831
+
832
+ #~ msgid "Update Category"
833
+ #~ msgstr "Ενημέρωση Κατηγορίας"
834
+
835
+ #~ msgid "Edit Category"
836
+ #~ msgstr "Επεξεργασία Kατηγορίας"
837
+
838
+ #~ msgid "Parent Category:"
839
+ #~ msgstr "Γονική Κατηγορία:"
840
+
841
+ #~ msgid "Parent Category"
842
+ #~ msgstr "Γονική Κατηγορία"
843
+
844
+ #~ msgid "All Categories"
845
+ #~ msgstr "Όλες οι Κατηγορίες"
846
+
847
+ #~ msgid "No %s found in Trash"
848
+ #~ msgstr "Δεν βρέθηκε %s στον Κάδο Ανακύκλωσης"
849
+
850
+ #~ msgid "No %s found"
851
+ #~ msgstr "Δεν βρέθηκε %s"
852
+
853
+ #~ msgid "Search %s"
854
+ #~ msgstr "Αναζήτηση %s"
855
+
856
+ #~ msgid "View %s"
857
+ #~ msgstr "Προβολή %s"
858
+
859
+ #~ msgid "All %s"
860
+ #~ msgstr "Όλα %s"
861
+
862
+ #~ msgid "New %s"
863
+ #~ msgstr "Νέο %s"
864
+
865
+ #~ msgid "Edit %s"
866
+ #~ msgstr "Επεξεργασία %s"
867
+
868
+ #~ msgid "Add New %s"
869
+ #~ msgstr "Προσθήκη Νέου %s"
870
+
871
+ #~ msgid "Add %s"
872
+ #~ msgstr "Προσθήκη %s"
plugin-fw/languages/yith-plugin-fw-es_ES.mo CHANGED
Binary file
plugin-fw/languages/yith-plugin-fw-es_ES.po CHANGED
@@ -4,8 +4,8 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: YITH Framework\n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
- "POT-Creation-Date: 2020-12-28 12:30:11+00:00\n"
8
- "PO-Revision-Date: 2020-09-25 17:04:18+0000\n"
9
  "Language: es\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -37,229 +37,6 @@ msgstr "Seleccionar color"
37
  msgid "Color value"
38
  msgstr "Valor del color"
39
 
40
- #. translators: %s is the singular name of the post type.
41
- #. translators: $s is the singular name of the post type.
42
- #. translators: %s is the singular name of the post type.
43
- #. translators: %s is the plural name of the post type.
44
- #: includes/class-yit-cpt-unlimited.php:486
45
- #: includes/class-yit-cpt-unlimited.php:619
46
- #: includes/class-yit-cpt-unlimited.php:768
47
- #: includes/class-yit-cpt-unlimited.php:1755
48
- msgid "Add %s"
49
- msgstr "Añadir %s"
50
-
51
- #. translators: %s is the singular name of the post type.
52
- #. translators: $s is the singular name of the post type.
53
- #: includes/class-yit-cpt-unlimited.php:488
54
- #: includes/class-yit-cpt-unlimited.php:621
55
- msgid "Add New %s"
56
- msgstr "Añadir nueva %s"
57
-
58
- #. translators: %s is the singular name of the post type.
59
- #. translators: $s is the singular name of the post type.
60
- #. translators: %s is the post title.
61
- #. translators: %s is the singular name of the post type.
62
- #: includes/class-yit-cpt-unlimited.php:490
63
- #: includes/class-yit-cpt-unlimited.php:623
64
- #: includes/class-yit-cpt-unlimited.php:1350
65
- #: includes/class-yit-cpt-unlimited.php:1401
66
- msgid "Edit %s"
67
- msgstr "Editar %s"
68
-
69
- #. translators: %s is the singular name of the post type.
70
- #. translators: $s is the singular name of the post type.
71
- #: includes/class-yit-cpt-unlimited.php:492
72
- #: includes/class-yit-cpt-unlimited.php:625
73
- msgid "New %s"
74
- msgstr "Nuevo %s"
75
-
76
- #. translators: %s is the plural name of the post type.
77
- #. translators: $s is the plural name of the post type.
78
- #: includes/class-yit-cpt-unlimited.php:494
79
- #: includes/class-yit-cpt-unlimited.php:627
80
- msgid "All %s"
81
- msgstr "Todas %s"
82
-
83
- #. translators: %s is the singular name of the post type.
84
- #. translators: $s is the singular name of the post type.
85
- #. translators: %s is the plural label of the post type.
86
- #. translators: %s is the plural name of the post type.
87
- #: includes/class-yit-cpt-unlimited.php:496
88
- #: includes/class-yit-cpt-unlimited.php:629
89
- #: includes/class-yit-cpt-unlimited.php:1323
90
- #: includes/class-yit-cpt-unlimited.php:1406
91
- msgid "View %s"
92
- msgstr "Ver %s"
93
-
94
- #. translators: %s is the plural name of the post type.
95
- #. translators: $s is the plural name of the post type.
96
- #: includes/class-yit-cpt-unlimited.php:498
97
- #: includes/class-yit-cpt-unlimited.php:631
98
- msgid "Search %s"
99
- msgstr "Buscar %s"
100
-
101
- #. translators: %s is the plural name of the post type.
102
- #. translators: $s is the plural name of the post type.
103
- #: includes/class-yit-cpt-unlimited.php:500
104
- #: includes/class-yit-cpt-unlimited.php:633
105
- msgid "No %s found"
106
- msgstr "No se han encontrado %s"
107
-
108
- #. translators: %s is the plural name of the post type.
109
- #. translators: $s is the plural name of the post type.
110
- #: includes/class-yit-cpt-unlimited.php:502
111
- #: includes/class-yit-cpt-unlimited.php:635
112
- msgid "No %s found in Trash"
113
- msgstr "No se han encontrado %s en la Papelera"
114
-
115
- #: includes/class-yit-cpt-unlimited.php:678 templates/fields/ajax-terms.php:41
116
- msgid "Search Categories"
117
- msgstr "Buscar categorías"
118
-
119
- #: includes/class-yit-cpt-unlimited.php:679
120
- msgid "All Categories"
121
- msgstr "Todas las categorías"
122
-
123
- #: includes/class-yit-cpt-unlimited.php:680
124
- msgid "Parent Category"
125
- msgstr "Categoría superior"
126
-
127
- #: includes/class-yit-cpt-unlimited.php:681
128
- msgid "Parent Category:"
129
- msgstr "Categoría superior:"
130
-
131
- #: includes/class-yit-cpt-unlimited.php:682
132
- msgid "Edit Category"
133
- msgstr "Editar categoría"
134
-
135
- #: includes/class-yit-cpt-unlimited.php:683
136
- msgid "Update Category"
137
- msgstr "Actualizar categoría"
138
-
139
- #: includes/class-yit-cpt-unlimited.php:684
140
- msgid "Add New Category"
141
- msgstr "Añadir nueva categoría"
142
-
143
- #: includes/class-yit-cpt-unlimited.php:685
144
- msgid "New Category Name"
145
- msgstr "Nuevo nombre de categoría"
146
-
147
- #: includes/class-yit-cpt-unlimited.php:686
148
- msgid "Category"
149
- msgstr "Categoría"
150
-
151
- #: includes/class-yit-cpt-unlimited.php:778
152
- msgid "Categories"
153
- msgstr "Categorías"
154
-
155
- #. translators: %s is the singular name of the post type.
156
- #: includes/class-yit-cpt-unlimited.php:1098
157
- msgid "%s Settings"
158
- msgstr "Ajustes de %s"
159
-
160
- #: includes/class-yit-cpt-unlimited.php:1106
161
- #: includes/class-yit-cpt-unlimited.php:1260
162
- #: includes/class-yit-cpt-unlimited.php:1266
163
- #: includes/class-yit-plugin-panel.php:84
164
- msgid "Settings"
165
- msgstr "Ajustes"
166
-
167
- #: includes/class-yit-cpt-unlimited.php:1111
168
- msgid "Type"
169
- msgstr "Tipo"
170
-
171
- #. translators: %s is the singular name of the post type.
172
- #: includes/class-yit-cpt-unlimited.php:1114
173
- msgid "Layout for this %s"
174
- msgstr "Diseño para este %s"
175
-
176
- #: includes/class-yit-cpt-unlimited.php:1122
177
- msgid "Rewrite"
178
- msgstr "Rescribir"
179
-
180
- #: includes/class-yit-cpt-unlimited.php:1123
181
- msgid ""
182
- "Univocal identification name in the URL for each product (slug from post if "
183
- "empty)"
184
- msgstr ""
185
- "Nombre de identificación unívoco en la URL para cada producto (slug de la "
186
- "entrada si está vacío)"
187
-
188
- #: includes/class-yit-cpt-unlimited.php:1128
189
- msgid "Label in Singular"
190
- msgstr "Etiqueta en Singular"
191
-
192
- #: includes/class-yit-cpt-unlimited.php:1129
193
- msgid "Set a label in singular (title of portfolio if empty)"
194
- msgstr "Establece una etiqueta en singular (título del porfolio si está vacío)"
195
-
196
- #: includes/class-yit-cpt-unlimited.php:1134
197
- msgid "Label in Plural"
198
- msgstr "Etiqueta en Plural"
199
-
200
- #: includes/class-yit-cpt-unlimited.php:1135
201
- msgid "Set a label in plural (title of portfolio if empty)"
202
- msgstr "Establece una etiqueta en plural (título del porfolio si está vacío)"
203
-
204
- #: includes/class-yit-cpt-unlimited.php:1140
205
- msgid "Taxonomy"
206
- msgstr "Taxonomía"
207
-
208
- #: includes/class-yit-cpt-unlimited.php:1141
209
- msgid ""
210
- "If you want to use categories in the portfolio, set a name for taxonomy. "
211
- "Name should be a slug (must not contain capital letters nor spaces) and must "
212
- "not be more than 32 characters long (database structure restriction)."
213
- msgstr ""
214
- "Si quieres usar categorías en este porfolio, establece un nombre para la "
215
- "taxonomía. EL nombre debe ser un slug (no debe contener mayúsculas ni "
216
- "espacios) y no debe tener más de 32 caracteres de longitud (restricción de "
217
- "estructura de la base de datos)."
218
-
219
- #: includes/class-yit-cpt-unlimited.php:1146
220
- msgid "Taxonomy Rewrite"
221
- msgstr "Rescribir taxonomía"
222
-
223
- #: includes/class-yit-cpt-unlimited.php:1147
224
- msgid "Set univocal name for each category page URL."
225
- msgstr "Establece un nombre unívoco para cada URL de página de categoría"
226
-
227
- #: includes/class-yit-cpt-unlimited.php:1152
228
- msgid "Single layout"
229
- msgstr "Diseño individual"
230
-
231
- #: includes/class-yit-cpt-unlimited.php:1153
232
- msgid "Layout for single page of this portfolio"
233
- msgstr "Diseño para página individual de este porfolio"
234
-
235
- #: includes/class-yit-cpt-unlimited.php:1196
236
- msgid "layout settings"
237
- msgstr "ajustes de diseño"
238
-
239
- #: includes/class-yit-cpt-unlimited.php:1286
240
- #: includes/class-yit-cpt-unlimited.php:1297
241
- msgid "Quick links"
242
- msgstr "Enlaces rápidos"
243
-
244
- #. translators: %s is the name of the post type.
245
- #: includes/class-yit-cpt-unlimited.php:1593
246
- msgid "Show frontend of the %s"
247
- msgstr "Mostrar frontend de %s"
248
-
249
- #: includes/class-yit-cpt-unlimited.php:1602 templates/fields/customtabs.php:34
250
- #: templates/fields/customtabs.php:76
251
- msgid "Name"
252
- msgstr "Nombre"
253
-
254
- #. translators: %s is the plural name of the post type.
255
- #: includes/class-yit-cpt-unlimited.php:1749
256
- msgid "Add %s from images"
257
- msgstr "Añadir %s desde imágenes"
258
-
259
- #: includes/class-yit-cpt-unlimited.php:1769
260
- msgid "Upload multiple files"
261
- msgstr "Subir múltiples archivos"
262
-
263
  #: includes/class-yit-plugin-panel-woocommerce.php:419
264
  msgid "The changes you have made will be lost if you leave this page."
265
  msgstr "Los cambios que has hecho se perderán si abandonas esta página."
@@ -268,10 +45,14 @@ msgstr "Los cambios que has hecho se perderán si abandonas esta página."
268
  msgid "Plugin Settings"
269
  msgstr "Ajustes del plugin"
270
 
 
 
 
 
271
  #: includes/class-yit-plugin-panel.php:450
272
  #: includes/class-yit-plugin-panel.php:453
273
  msgid "How to install premium version"
274
- msgstr "Cómo instalara la versión premium"
275
 
276
  #: includes/class-yit-plugin-panel.php:619
277
  #: includes/class-yit-plugin-subpanel.php:132
@@ -345,7 +126,7 @@ msgstr "Clasificación realizada con éxito"
345
 
346
  #: includes/class-yit-plugin-panel.php:1343
347
  msgid "We need your support"
348
- msgstr "Necesitamos tu ayuda"
349
 
350
  #: includes/class-yit-plugin-panel.php:1344
351
  msgid "to keep updating and improving the plugin. Please,"
@@ -353,7 +134,7 @@ msgstr "para que podamos seguir actualizando y mejorando el plugin. Por favor,"
353
 
354
  #: includes/class-yit-plugin-panel.php:1346
355
  msgid "help us by leaving a five-star rating"
356
- msgstr "ayúdanos dejando una valoración de cinco estrellas"
357
 
358
  #: includes/class-yit-plugin-panel.php:1347
359
  msgid ":) Thanks!"
@@ -551,7 +332,7 @@ msgstr "Eliminar %1$s desde el archivo %2$s "
551
 
552
  #: includes/class-yith-system-status.php:573
553
  msgid "Contact your hosting company in order to enable it."
554
- msgstr "Ponte en contacto con tu empresa de hosting para activarlo."
555
 
556
  #. translators: %1$s opening link tag, %2$s closing link tag
557
  #: includes/class-yith-system-status.php:577
@@ -560,8 +341,7 @@ msgid ""
560
  "Read more %1$shere%2$s or contact your hosting company in order to increase "
561
  "it."
562
  msgstr ""
563
- "Lee más %1$saquí%2$s o ponte en contacto con tu empresa de hosting para "
564
- "incrementarlo."
565
 
566
  #. translators: %s recommended memory amount
567
  #: includes/class-yith-system-status.php:597
@@ -609,6 +389,10 @@ msgstr "Buscar entradas"
609
  msgid "Search Product"
610
  msgstr "Buscar producto"
611
 
 
 
 
 
612
  #: templates/fields/customtabs.php:17
613
  msgid "Close all"
614
  msgstr "Cerrar todo"
@@ -621,6 +405,10 @@ msgstr "Expandir todo"
621
  msgid "Remove"
622
  msgstr "Eliminar"
623
 
 
 
 
 
624
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
625
  msgid "Value"
626
  msgstr "Valor"
@@ -800,17 +588,6 @@ msgstr "Licencia"
800
  msgid "YITH"
801
  msgstr "YITH"
802
 
803
- #. translators: %s is the singular name of the post type.
804
- #: includes/class-yit-cpt-unlimited.php:676
805
- msgctxt "taxonomy general name"
806
- msgid "%s Categories"
807
- msgstr "Categorías %s"
808
-
809
- #: includes/class-yit-cpt-unlimited.php:677
810
- msgctxt "taxonomy singular name"
811
- msgid "Category"
812
- msgstr "Categoría"
813
-
814
  #: includes/class-yith-dashboard.php:96
815
  msgctxt "Plugin FW"
816
  msgid "View Changelog"
@@ -933,6 +710,14 @@ msgctxt "Action links"
933
  msgid "Settings"
934
  msgstr "Ajustes"
935
 
 
 
 
 
 
 
 
 
936
  #~ msgid "Show full PHPInfo"
937
  #~ msgstr "Mostrar PHPInfo completa"
938
 
@@ -953,3 +738,130 @@ msgstr "Ajustes"
953
 
954
  #~ msgid "and"
955
  #~ msgstr "y"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  msgstr ""
5
  "Project-Id-Version: YITH Framework\n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
+ "POT-Creation-Date: 2021-01-21 07:36:24+00:00\n"
8
+ "PO-Revision-Date: 2021-01-19 14:22:57+0000\n"
9
  "Language: es\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
37
  msgid "Color value"
38
  msgstr "Valor del color"
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  #: includes/class-yit-plugin-panel-woocommerce.php:419
41
  msgid "The changes you have made will be lost if you leave this page."
42
  msgstr "Los cambios que has hecho se perderán si abandonas esta página."
45
  msgid "Plugin Settings"
46
  msgstr "Ajustes del plugin"
47
 
48
+ #: includes/class-yit-plugin-panel.php:84
49
+ msgid "Settings"
50
+ msgstr "Ajustes"
51
+
52
  #: includes/class-yit-plugin-panel.php:450
53
  #: includes/class-yit-plugin-panel.php:453
54
  msgid "How to install premium version"
55
+ msgstr "Cómo instalar la versión premium"
56
 
57
  #: includes/class-yit-plugin-panel.php:619
58
  #: includes/class-yit-plugin-subpanel.php:132
126
 
127
  #: includes/class-yit-plugin-panel.php:1343
128
  msgid "We need your support"
129
+ msgstr "Necesitamos tu apoyo"
130
 
131
  #: includes/class-yit-plugin-panel.php:1344
132
  msgid "to keep updating and improving the plugin. Please,"
134
 
135
  #: includes/class-yit-plugin-panel.php:1346
136
  msgid "help us by leaving a five-star rating"
137
+ msgstr "ayúdanos con una valoración de cinco estrellas"
138
 
139
  #: includes/class-yit-plugin-panel.php:1347
140
  msgid ":) Thanks!"
332
 
333
  #: includes/class-yith-system-status.php:573
334
  msgid "Contact your hosting company in order to enable it."
335
+ msgstr "Contacta con tu empresa de hosting para activarlo."
336
 
337
  #. translators: %1$s opening link tag, %2$s closing link tag
338
  #: includes/class-yith-system-status.php:577
341
  "Read more %1$shere%2$s or contact your hosting company in order to increase "
342
  "it."
343
  msgstr ""
344
+ "Lee más %1$saquí%2$s o contacta a tu empresa de hosting para incrementarlo."
 
345
 
346
  #. translators: %s recommended memory amount
347
  #: includes/class-yith-system-status.php:597
389
  msgid "Search Product"
390
  msgstr "Buscar producto"
391
 
392
+ #: templates/fields/ajax-terms.php:41
393
+ msgid "Search Categories"
394
+ msgstr "Buscar categorías"
395
+
396
  #: templates/fields/customtabs.php:17
397
  msgid "Close all"
398
  msgstr "Cerrar todo"
405
  msgid "Remove"
406
  msgstr "Eliminar"
407
 
408
+ #: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
409
+ msgid "Name"
410
+ msgstr "Nombre"
411
+
412
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
413
  msgid "Value"
414
  msgstr "Valor"
588
  msgid "YITH"
589
  msgstr "YITH"
590
 
 
 
 
 
 
 
 
 
 
 
 
591
  #: includes/class-yith-dashboard.php:96
592
  msgctxt "Plugin FW"
593
  msgid "View Changelog"
710
  msgid "Settings"
711
  msgstr "Ajustes"
712
 
713
+ #~ msgctxt "taxonomy singular name"
714
+ #~ msgid "Category"
715
+ #~ msgstr "Categoría"
716
+
717
+ #~ msgctxt "taxonomy general name"
718
+ #~ msgid "%s Categories"
719
+ #~ msgstr "Categorías %s"
720
+
721
  #~ msgid "Show full PHPInfo"
722
  #~ msgstr "Mostrar PHPInfo completa"
723
 
738
 
739
  #~ msgid "and"
740
  #~ msgstr "y"
741
+
742
+ #~ msgid "Upload multiple files"
743
+ #~ msgstr "Subir varios archivos"
744
+
745
+ #~ msgid "Add %s from images"
746
+ #~ msgstr "Añadir %s desde imágenes"
747
+
748
+ #~ msgid "Show frontend of the %s"
749
+ #~ msgstr "Mostrar frontend de %s"
750
+
751
+ #~ msgid "Quick links"
752
+ #~ msgstr "Enlaces rápidos"
753
+
754
+ #~ msgid "layout settings"
755
+ #~ msgstr "ajustes de diseño"
756
+
757
+ #~ msgid "Layout for single page of this portfolio"
758
+ #~ msgstr "Diseño para página individual de este porfolio"
759
+
760
+ #~ msgid "Single layout"
761
+ #~ msgstr "Diseño individual"
762
+
763
+ #~ msgid "Set univocal name for each category page URL."
764
+ #~ msgstr "Establece un nombre para cada URL de página de categoría"
765
+
766
+ #~ msgid "Taxonomy Rewrite"
767
+ #~ msgstr "Rescribir taxonomía"
768
+
769
+ #~ msgid ""
770
+ #~ "If you want to use categories in the portfolio, set a name for taxonomy. "
771
+ #~ "Name should be a slug (must not contain capital letters nor spaces) and "
772
+ #~ "must not be more than 32 characters long (database structure restriction)."
773
+ #~ msgstr ""
774
+ #~ "Si quieres usar categorías en este porfolio, establece un nombre para la "
775
+ #~ "taxonomía. El nombre debe ser un slug (no debe contener mayúsculas ni "
776
+ #~ "espacios) y no debe tener más de 32 caracteres de longitud (restricción "
777
+ #~ "de estructura de la base de datos)."
778
+
779
+ #~ msgid "Taxonomy"
780
+ #~ msgstr "Taxonomía"
781
+
782
+ #~ msgid "Set a label in plural (title of portfolio if empty)"
783
+ #~ msgstr ""
784
+ #~ "Establece una etiqueta en plural (título del porfolio si está vacío)"
785
+
786
+ #~ msgid "Label in Plural"
787
+ #~ msgstr "Etiqueta en Plural"
788
+
789
+ #~ msgid "Set a label in singular (title of portfolio if empty)"
790
+ #~ msgstr ""
791
+ #~ "Establece una etiqueta en singular (título del porfolio si está vacío)"
792
+
793
+ #~ msgid "Label in Singular"
794
+ #~ msgstr "Etiqueta en Singular"
795
+
796
+ #~ msgid ""
797
+ #~ "Univocal identification name in the URL for each product (slug from post "
798
+ #~ "if empty)"
799
+ #~ msgstr ""
800
+ #~ "Nombre de identificación unívoco en la URL para cada producto (slug de la "
801
+ #~ "entrada si está vacío)"
802
+
803
+ #~ msgid "Rewrite"
804
+ #~ msgstr "Rescribir"
805
+
806
+ #~ msgid "Layout for this %s"
807
+ #~ msgstr "Diseño para este %s"
808
+
809
+ #~ msgid "Type"
810
+ #~ msgstr "Tipo"
811
+
812
+ #~ msgid "%s Settings"
813
+ #~ msgstr "Ajustes de %s"
814
+
815
+ #~ msgid "Categories"
816
+ #~ msgstr "Categorías"
817
+
818
+ #~ msgid "Category"
819
+ #~ msgstr "Categoría"
820
+
821
+ #~ msgid "New Category Name"
822
+ #~ msgstr "Nuevo nombre de categoría"
823
+
824
+ #~ msgid "Add New Category"
825
+ #~ msgstr "Añadir nueva categoría"
826
+
827
+ #~ msgid "Update Category"
828
+ #~ msgstr "Actualizar categoría"
829
+
830
+ #~ msgid "Edit Category"
831
+ #~ msgstr "Editar categoría"
832
+
833
+ #~ msgid "Parent Category:"
834
+ #~ msgstr "Categoría superior:"
835
+
836
+ #~ msgid "Parent Category"
837
+ #~ msgstr "Categoría superior"
838
+
839
+ #~ msgid "All Categories"
840
+ #~ msgstr "Todas las categorías"
841
+
842
+ #~ msgid "No %s found in Trash"
843
+ #~ msgstr "No se han encontrado %s en la Papelera"
844
+
845
+ #~ msgid "No %s found"
846
+ #~ msgstr "No se han encontrado %s"
847
+
848
+ #~ msgid "Search %s"
849
+ #~ msgstr "Buscar %s"
850
+
851
+ #~ msgid "View %s"
852
+ #~ msgstr "Ver %s"
853
+
854
+ #~ msgid "All %s"
855
+ #~ msgstr "Todas %s"
856
+
857
+ #~ msgid "New %s"
858
+ #~ msgstr "Nuevo %s"
859
+
860
+ #~ msgid "Edit %s"
861
+ #~ msgstr "Editar %s"
862
+
863
+ #~ msgid "Add New %s"
864
+ #~ msgstr "Añadir nueva %s"
865
+
866
+ #~ msgid "Add %s"
867
+ #~ msgstr "Añadir %s"
plugin-fw/languages/yith-plugin-fw-it_IT.mo CHANGED
Binary file
plugin-fw/languages/yith-plugin-fw-it_IT.po CHANGED
@@ -4,7 +4,7 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: YITH Framework\n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
- "POT-Creation-Date: 2020-12-28 12:30:11+00:00\n"
8
  "PO-Revision-Date: 2020-09-24 14:56:37+0000\n"
9
  "Language: it\n"
10
  "MIME-Version: 1.0\n"
@@ -37,229 +37,6 @@ msgstr "Seleziona il colore"
37
  msgid "Color value"
38
  msgstr "Valore del colore"
39
 
40
- #. translators: %s is the singular name of the post type.
41
- #. translators: $s is the singular name of the post type.
42
- #. translators: %s is the singular name of the post type.
43
- #. translators: %s is the plural name of the post type.
44
- #: includes/class-yit-cpt-unlimited.php:486
45
- #: includes/class-yit-cpt-unlimited.php:619
46
- #: includes/class-yit-cpt-unlimited.php:768
47
- #: includes/class-yit-cpt-unlimited.php:1755
48
- msgid "Add %s"
49
- msgstr "Aggiungi %s"
50
-
51
- #. translators: %s is the singular name of the post type.
52
- #. translators: $s is the singular name of the post type.
53
- #: includes/class-yit-cpt-unlimited.php:488
54
- #: includes/class-yit-cpt-unlimited.php:621
55
- msgid "Add New %s"
56
- msgstr "Aggiungi nuovo %s"
57
-
58
- #. translators: %s is the singular name of the post type.
59
- #. translators: $s is the singular name of the post type.
60
- #. translators: %s is the post title.
61
- #. translators: %s is the singular name of the post type.
62
- #: includes/class-yit-cpt-unlimited.php:490
63
- #: includes/class-yit-cpt-unlimited.php:623
64
- #: includes/class-yit-cpt-unlimited.php:1350
65
- #: includes/class-yit-cpt-unlimited.php:1401
66
- msgid "Edit %s"
67
- msgstr "Modifica %s"
68
-
69
- #. translators: %s is the singular name of the post type.
70
- #. translators: $s is the singular name of the post type.
71
- #: includes/class-yit-cpt-unlimited.php:492
72
- #: includes/class-yit-cpt-unlimited.php:625
73
- msgid "New %s"
74
- msgstr "Nuovo %s"
75
-
76
- #. translators: %s is the plural name of the post type.
77
- #. translators: $s is the plural name of the post type.
78
- #: includes/class-yit-cpt-unlimited.php:494
79
- #: includes/class-yit-cpt-unlimited.php:627
80
- msgid "All %s"
81
- msgstr "Tutti %s"
82
-
83
- #. translators: %s is the singular name of the post type.
84
- #. translators: $s is the singular name of the post type.
85
- #. translators: %s is the plural label of the post type.
86
- #. translators: %s is the plural name of the post type.
87
- #: includes/class-yit-cpt-unlimited.php:496
88
- #: includes/class-yit-cpt-unlimited.php:629
89
- #: includes/class-yit-cpt-unlimited.php:1323
90
- #: includes/class-yit-cpt-unlimited.php:1406
91
- msgid "View %s"
92
- msgstr "Visualizza %s"
93
-
94
- #. translators: %s is the plural name of the post type.
95
- #. translators: $s is the plural name of the post type.
96
- #: includes/class-yit-cpt-unlimited.php:498
97
- #: includes/class-yit-cpt-unlimited.php:631
98
- msgid "Search %s"
99
- msgstr "Cerca %s"
100
-
101
- #. translators: %s is the plural name of the post type.
102
- #. translators: $s is the plural name of the post type.
103
- #: includes/class-yit-cpt-unlimited.php:500
104
- #: includes/class-yit-cpt-unlimited.php:633
105
- msgid "No %s found"
106
- msgstr "Nessun %s trovato"
107
-
108
- #. translators: %s is the plural name of the post type.
109
- #. translators: $s is the plural name of the post type.
110
- #: includes/class-yit-cpt-unlimited.php:502
111
- #: includes/class-yit-cpt-unlimited.php:635
112
- msgid "No %s found in Trash"
113
- msgstr "Nessun %s trovato nel cestino"
114
-
115
- #: includes/class-yit-cpt-unlimited.php:678 templates/fields/ajax-terms.php:41
116
- msgid "Search Categories"
117
- msgstr "Cerca categorie"
118
-
119
- #: includes/class-yit-cpt-unlimited.php:679
120
- msgid "All Categories"
121
- msgstr "Tutte le categorie"
122
-
123
- #: includes/class-yit-cpt-unlimited.php:680
124
- msgid "Parent Category"
125
- msgstr "Categoria genitore"
126
-
127
- #: includes/class-yit-cpt-unlimited.php:681
128
- msgid "Parent Category:"
129
- msgstr "Categoria genitore:"
130
-
131
- #: includes/class-yit-cpt-unlimited.php:682
132
- msgid "Edit Category"
133
- msgstr "Modifica categoria"
134
-
135
- #: includes/class-yit-cpt-unlimited.php:683
136
- msgid "Update Category"
137
- msgstr "Aggiorna categoria"
138
-
139
- #: includes/class-yit-cpt-unlimited.php:684
140
- msgid "Add New Category"
141
- msgstr "Aggiungi nuova categoria"
142
-
143
- #: includes/class-yit-cpt-unlimited.php:685
144
- msgid "New Category Name"
145
- msgstr "Nuovo nome categoria"
146
-
147
- #: includes/class-yit-cpt-unlimited.php:686
148
- msgid "Category"
149
- msgstr "Categoria"
150
-
151
- #: includes/class-yit-cpt-unlimited.php:778
152
- msgid "Categories"
153
- msgstr "Categorie"
154
-
155
- #. translators: %s is the singular name of the post type.
156
- #: includes/class-yit-cpt-unlimited.php:1098
157
- msgid "%s Settings"
158
- msgstr "Impostazioni %s"
159
-
160
- #: includes/class-yit-cpt-unlimited.php:1106
161
- #: includes/class-yit-cpt-unlimited.php:1260
162
- #: includes/class-yit-cpt-unlimited.php:1266
163
- #: includes/class-yit-plugin-panel.php:84
164
- msgid "Settings"
165
- msgstr "Impostazioni"
166
-
167
- #: includes/class-yit-cpt-unlimited.php:1111
168
- msgid "Type"
169
- msgstr "Tipologia"
170
-
171
- #. translators: %s is the singular name of the post type.
172
- #: includes/class-yit-cpt-unlimited.php:1114
173
- msgid "Layout for this %s"
174
- msgstr "Layout per questo %s"
175
-
176
- #: includes/class-yit-cpt-unlimited.php:1122
177
- msgid "Rewrite"
178
- msgstr "Riscrivi"
179
-
180
- #: includes/class-yit-cpt-unlimited.php:1123
181
- msgid ""
182
- "Univocal identification name in the URL for each product (slug from post if "
183
- "empty)"
184
- msgstr ""
185
- "Nome identificativo univoco nell'URL per singolo prodotto (usa slug dal post "
186
- "se vuoto)"
187
-
188
- #: includes/class-yit-cpt-unlimited.php:1128
189
- msgid "Label in Singular"
190
- msgstr "Etichetta singolare"
191
-
192
- #: includes/class-yit-cpt-unlimited.php:1129
193
- msgid "Set a label in singular (title of portfolio if empty)"
194
- msgstr "Imposta un'etichetta singolare (titolo del portfolio se vuoto)"
195
-
196
- #: includes/class-yit-cpt-unlimited.php:1134
197
- msgid "Label in Plural"
198
- msgstr "Etichetta plurale"
199
-
200
- #: includes/class-yit-cpt-unlimited.php:1135
201
- msgid "Set a label in plural (title of portfolio if empty)"
202
- msgstr "Imposta un'etichetta plurale (titolo del portfolio se vuoto)"
203
-
204
- #: includes/class-yit-cpt-unlimited.php:1140
205
- msgid "Taxonomy"
206
- msgstr "Tassonomia"
207
-
208
- #: includes/class-yit-cpt-unlimited.php:1141
209
- msgid ""
210
- "If you want to use categories in the portfolio, set a name for taxonomy. "
211
- "Name should be a slug (must not contain capital letters nor spaces) and must "
212
- "not be more than 32 characters long (database structure restriction)."
213
- msgstr ""
214
- "Se vuoi aggiungere delle categorie nel portfolio, imposta un nome per la "
215
- "tassonomia. Il nome dovrà essere in forma di slug (non deve contenere "
216
- "caratteri maiuscoli né spazi) e non più lungo di 32 caratteri (restrizione "
217
- "di database)."
218
-
219
- #: includes/class-yit-cpt-unlimited.php:1146
220
- msgid "Taxonomy Rewrite"
221
- msgstr "Riscrivi tassonomia"
222
-
223
- #: includes/class-yit-cpt-unlimited.php:1147
224
- msgid "Set univocal name for each category page URL."
225
- msgstr "Imposta un nome univoco per l'URL della pagina di ciascuna categoria."
226
-
227
- #: includes/class-yit-cpt-unlimited.php:1152
228
- msgid "Single layout"
229
- msgstr "Layout singolo"
230
-
231
- #: includes/class-yit-cpt-unlimited.php:1153
232
- msgid "Layout for single page of this portfolio"
233
- msgstr "Layout per pagina singola per questo portfolio"
234
-
235
- #: includes/class-yit-cpt-unlimited.php:1196
236
- msgid "layout settings"
237
- msgstr "impostazioni di layout"
238
-
239
- #: includes/class-yit-cpt-unlimited.php:1286
240
- #: includes/class-yit-cpt-unlimited.php:1297
241
- msgid "Quick links"
242
- msgstr "Link rapidi"
243
-
244
- #. translators: %s is the name of the post type.
245
- #: includes/class-yit-cpt-unlimited.php:1593
246
- msgid "Show frontend of the %s"
247
- msgstr "Mostra front end di %s"
248
-
249
- #: includes/class-yit-cpt-unlimited.php:1602 templates/fields/customtabs.php:34
250
- #: templates/fields/customtabs.php:76
251
- msgid "Name"
252
- msgstr "Nome"
253
-
254
- #. translators: %s is the plural name of the post type.
255
- #: includes/class-yit-cpt-unlimited.php:1749
256
- msgid "Add %s from images"
257
- msgstr "Aggiungi %s dalla immagini"
258
-
259
- #: includes/class-yit-cpt-unlimited.php:1769
260
- msgid "Upload multiple files"
261
- msgstr "Carica file multipli"
262
-
263
  #: includes/class-yit-plugin-panel-woocommerce.php:419
264
  msgid "The changes you have made will be lost if you leave this page."
265
  msgstr "Perderai tutti i cambiamenti effettuati se lasci questa pagina."
@@ -268,6 +45,10 @@ msgstr "Perderai tutti i cambiamenti effettuati se lasci questa pagina."
268
  msgid "Plugin Settings"
269
  msgstr "Impostazioni plugin"
270
 
 
 
 
 
271
  #: includes/class-yit-plugin-panel.php:450
272
  #: includes/class-yit-plugin-panel.php:453
273
  msgid "How to install premium version"
@@ -607,6 +388,10 @@ msgstr "Cerca articoli"
607
  msgid "Search Product"
608
  msgstr "Cerca un prodotto"
609
 
 
 
 
 
610
  #: templates/fields/customtabs.php:17
611
  msgid "Close all"
612
  msgstr "Chiudi tutti"
@@ -619,6 +404,10 @@ msgstr "Espandi tutti"
619
  msgid "Remove"
620
  msgstr "Rimuovi"
621
 
 
 
 
 
622
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
623
  msgid "Value"
624
  msgstr "Valore"
@@ -798,17 +587,6 @@ msgstr "Chiave di licenza"
798
  msgid "YITH"
799
  msgstr "YITH"
800
 
801
- #. translators: %s is the singular name of the post type.
802
- #: includes/class-yit-cpt-unlimited.php:676
803
- msgctxt "taxonomy general name"
804
- msgid "%s Categories"
805
- msgstr "%s Categorie"
806
-
807
- #: includes/class-yit-cpt-unlimited.php:677
808
- msgctxt "taxonomy singular name"
809
- msgid "Category"
810
- msgstr "Categoria"
811
-
812
  #: includes/class-yith-dashboard.php:96
813
  msgctxt "Plugin FW"
814
  msgid "View Changelog"
@@ -932,6 +710,14 @@ msgctxt "Action links"
932
  msgid "Settings"
933
  msgstr "Impostazioni"
934
 
 
 
 
 
 
 
 
 
935
  #~ msgid "Show full PHPInfo"
936
  #~ msgstr "Mostra tutto il contenuto di PHPInfo"
937
 
@@ -952,3 +738,129 @@ msgstr "Impostazioni"
952
 
953
  #~ msgid "and"
954
  #~ msgstr "e"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  msgstr ""
5
  "Project-Id-Version: YITH Framework\n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
+ "POT-Creation-Date: 2021-01-21 07:36:24+00:00\n"
8
  "PO-Revision-Date: 2020-09-24 14:56:37+0000\n"
9
  "Language: it\n"
10
  "MIME-Version: 1.0\n"
37
  msgid "Color value"
38
  msgstr "Valore del colore"
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  #: includes/class-yit-plugin-panel-woocommerce.php:419
41
  msgid "The changes you have made will be lost if you leave this page."
42
  msgstr "Perderai tutti i cambiamenti effettuati se lasci questa pagina."
45
  msgid "Plugin Settings"
46
  msgstr "Impostazioni plugin"
47
 
48
+ #: includes/class-yit-plugin-panel.php:84
49
+ msgid "Settings"
50
+ msgstr "Impostazioni"
51
+
52
  #: includes/class-yit-plugin-panel.php:450
53
  #: includes/class-yit-plugin-panel.php:453
54
  msgid "How to install premium version"
388
  msgid "Search Product"
389
  msgstr "Cerca un prodotto"
390
 
391
+ #: templates/fields/ajax-terms.php:41
392
+ msgid "Search Categories"
393
+ msgstr "Cerca categorie"
394
+
395
  #: templates/fields/customtabs.php:17
396
  msgid "Close all"
397
  msgstr "Chiudi tutti"
404
  msgid "Remove"
405
  msgstr "Rimuovi"
406
 
407
+ #: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
408
+ msgid "Name"
409
+ msgstr "Nome"
410
+
411
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
412
  msgid "Value"
413
  msgstr "Valore"
587
  msgid "YITH"
588
  msgstr "YITH"
589
 
 
 
 
 
 
 
 
 
 
 
 
590
  #: includes/class-yith-dashboard.php:96
591
  msgctxt "Plugin FW"
592
  msgid "View Changelog"
710
  msgid "Settings"
711
  msgstr "Impostazioni"
712
 
713
+ #~ msgctxt "taxonomy singular name"
714
+ #~ msgid "Category"
715
+ #~ msgstr "Categoria"
716
+
717
+ #~ msgctxt "taxonomy general name"
718
+ #~ msgid "%s Categories"
719
+ #~ msgstr "%s Categorie"
720
+
721
  #~ msgid "Show full PHPInfo"
722
  #~ msgstr "Mostra tutto il contenuto di PHPInfo"
723
 
738
 
739
  #~ msgid "and"
740
  #~ msgstr "e"
741
+
742
+ #~ msgid "Upload multiple files"
743
+ #~ msgstr "Carica file multipli"
744
+
745
+ #~ msgid "Add %s from images"
746
+ #~ msgstr "Aggiungi %s dalla immagini"
747
+
748
+ #~ msgid "Show frontend of the %s"
749
+ #~ msgstr "Mostra front end di %s"
750
+
751
+ #~ msgid "Quick links"
752
+ #~ msgstr "Link rapidi"
753
+
754
+ #~ msgid "layout settings"
755
+ #~ msgstr "impostazioni di layout"
756
+
757
+ #~ msgid "Layout for single page of this portfolio"
758
+ #~ msgstr "Layout per pagina singola per questo portfolio"
759
+
760
+ #~ msgid "Single layout"
761
+ #~ msgstr "Layout singolo"
762
+
763
+ #~ msgid "Set univocal name for each category page URL."
764
+ #~ msgstr ""
765
+ #~ "Imposta un nome univoco per l'URL della pagina di ciascuna categoria."
766
+
767
+ #~ msgid "Taxonomy Rewrite"
768
+ #~ msgstr "Riscrivi tassonomia"
769
+
770
+ #~ msgid ""
771
+ #~ "If you want to use categories in the portfolio, set a name for taxonomy. "
772
+ #~ "Name should be a slug (must not contain capital letters nor spaces) and "
773
+ #~ "must not be more than 32 characters long (database structure restriction)."
774
+ #~ msgstr ""
775
+ #~ "Se vuoi aggiungere delle categorie nel portfolio, imposta un nome per la "
776
+ #~ "tassonomia. Il nome dovrà essere in forma di slug (non deve contenere "
777
+ #~ "caratteri maiuscoli né spazi) e non più lungo di 32 caratteri "
778
+ #~ "(restrizione di database)."
779
+
780
+ #~ msgid "Taxonomy"
781
+ #~ msgstr "Tassonomia"
782
+
783
+ #~ msgid "Set a label in plural (title of portfolio if empty)"
784
+ #~ msgstr "Imposta un'etichetta plurale (titolo del portfolio se vuoto)"
785
+
786
+ #~ msgid "Label in Plural"
787
+ #~ msgstr "Etichetta plurale"
788
+
789
+ #~ msgid "Set a label in singular (title of portfolio if empty)"
790
+ #~ msgstr "Imposta un'etichetta singolare (titolo del portfolio se vuoto)"
791
+
792
+ #~ msgid "Label in Singular"
793
+ #~ msgstr "Etichetta singolare"
794
+
795
+ #~ msgid ""
796
+ #~ "Univocal identification name in the URL for each product (slug from post "
797
+ #~ "if empty)"
798
+ #~ msgstr ""
799
+ #~ "Nome identificativo univoco nell'URL per singolo prodotto (usa slug dal "
800
+ #~ "post se vuoto)"
801
+
802
+ #~ msgid "Rewrite"
803
+ #~ msgstr "Riscrivi"
804
+
805
+ #~ msgid "Layout for this %s"
806
+ #~ msgstr "Layout per questo %s"
807
+
808
+ #~ msgid "Type"
809
+ #~ msgstr "Tipologia"
810
+
811
+ #~ msgid "%s Settings"
812
+ #~ msgstr "Impostazioni %s"
813
+
814
+ #~ msgid "Categories"
815
+ #~ msgstr "Categorie"
816
+
817
+ #~ msgid "Category"
818
+ #~ msgstr "Categoria"
819
+
820
+ #~ msgid "New Category Name"
821
+ #~ msgstr "Nuovo nome categoria"
822
+
823
+ #~ msgid "Add New Category"
824
+ #~ msgstr "Aggiungi nuova categoria"
825
+
826
+ #~ msgid "Update Category"
827
+ #~ msgstr "Aggiorna categoria"
828
+
829
+ #~ msgid "Edit Category"
830
+ #~ msgstr "Modifica categoria"
831
+
832
+ #~ msgid "Parent Category:"
833
+ #~ msgstr "Categoria genitore:"
834
+
835
+ #~ msgid "Parent Category"
836
+ #~ msgstr "Categoria genitore"
837
+
838
+ #~ msgid "All Categories"
839
+ #~ msgstr "Tutte le categorie"
840
+
841
+ #~ msgid "No %s found in Trash"
842
+ #~ msgstr "Nessun %s trovato nel cestino"
843
+
844
+ #~ msgid "No %s found"
845
+ #~ msgstr "Nessun %s trovato"
846
+
847
+ #~ msgid "Search %s"
848
+ #~ msgstr "Cerca %s"
849
+
850
+ #~ msgid "View %s"
851
+ #~ msgstr "Visualizza %s"
852
+
853
+ #~ msgid "All %s"
854
+ #~ msgstr "Tutti %s"
855
+
856
+ #~ msgid "New %s"
857
+ #~ msgstr "Nuovo %s"
858
+
859
+ #~ msgid "Edit %s"
860
+ #~ msgstr "Modifica %s"
861
+
862
+ #~ msgid "Add New %s"
863
+ #~ msgstr "Aggiungi nuovo %s"
864
+
865
+ #~ msgid "Add %s"
866
+ #~ msgstr "Aggiungi %s"
plugin-fw/languages/yith-plugin-fw-nl_NL.mo CHANGED
Binary file
plugin-fw/languages/yith-plugin-fw-nl_NL.po CHANGED
@@ -4,7 +4,7 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: YITH Framework\n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
- "POT-Creation-Date: 2020-12-28 12:30:11+00:00\n"
8
  "PO-Revision-Date: 2020-09-24 14:36:33+0000\n"
9
  "Language: nl\n"
10
  "MIME-Version: 1.0\n"
@@ -37,229 +37,6 @@ msgstr "Kleur selecteren"
37
  msgid "Color value"
38
  msgstr "Kleurwaarde"
39
 
40
- #. translators: %s is the singular name of the post type.
41
- #. translators: $s is the singular name of the post type.
42
- #. translators: %s is the singular name of the post type.
43
- #. translators: %s is the plural name of the post type.
44
- #: includes/class-yit-cpt-unlimited.php:486
45
- #: includes/class-yit-cpt-unlimited.php:619
46
- #: includes/class-yit-cpt-unlimited.php:768
47
- #: includes/class-yit-cpt-unlimited.php:1755
48
- msgid "Add %s"
49
- msgstr "%s toevoegen"
50
-
51
- #. translators: %s is the singular name of the post type.
52
- #. translators: $s is the singular name of the post type.
53
- #: includes/class-yit-cpt-unlimited.php:488
54
- #: includes/class-yit-cpt-unlimited.php:621
55
- msgid "Add New %s"
56
- msgstr "Nieuwe %s toevoegen"
57
-
58
- #. translators: %s is the singular name of the post type.
59
- #. translators: $s is the singular name of the post type.
60
- #. translators: %s is the post title.
61
- #. translators: %s is the singular name of the post type.
62
- #: includes/class-yit-cpt-unlimited.php:490
63
- #: includes/class-yit-cpt-unlimited.php:623
64
- #: includes/class-yit-cpt-unlimited.php:1350
65
- #: includes/class-yit-cpt-unlimited.php:1401
66
- msgid "Edit %s"
67
- msgstr "Bewerk %s"
68
-
69
- #. translators: %s is the singular name of the post type.
70
- #. translators: $s is the singular name of the post type.
71
- #: includes/class-yit-cpt-unlimited.php:492
72
- #: includes/class-yit-cpt-unlimited.php:625
73
- msgid "New %s"
74
- msgstr "Nieuw %s"
75
-
76
- #. translators: %s is the plural name of the post type.
77
- #. translators: $s is the plural name of the post type.
78
- #: includes/class-yit-cpt-unlimited.php:494
79
- #: includes/class-yit-cpt-unlimited.php:627
80
- msgid "All %s"
81
- msgstr "Alle %s"
82
-
83
- #. translators: %s is the singular name of the post type.
84
- #. translators: $s is the singular name of the post type.
85
- #. translators: %s is the plural label of the post type.
86
- #. translators: %s is the plural name of the post type.
87
- #: includes/class-yit-cpt-unlimited.php:496
88
- #: includes/class-yit-cpt-unlimited.php:629
89
- #: includes/class-yit-cpt-unlimited.php:1323
90
- #: includes/class-yit-cpt-unlimited.php:1406
91
- msgid "View %s"
92
- msgstr "Bekijk %s"
93
-
94
- #. translators: %s is the plural name of the post type.
95
- #. translators: $s is the plural name of the post type.
96
- #: includes/class-yit-cpt-unlimited.php:498
97
- #: includes/class-yit-cpt-unlimited.php:631
98
- msgid "Search %s"
99
- msgstr "Zoeken %s"
100
-
101
- #. translators: %s is the plural name of the post type.
102
- #. translators: $s is the plural name of the post type.
103
- #: includes/class-yit-cpt-unlimited.php:500
104
- #: includes/class-yit-cpt-unlimited.php:633
105
- msgid "No %s found"
106
- msgstr "Geen %s gevonden"
107
-
108
- #. translators: %s is the plural name of the post type.
109
- #. translators: $s is the plural name of the post type.
110
- #: includes/class-yit-cpt-unlimited.php:502
111
- #: includes/class-yit-cpt-unlimited.php:635
112
- msgid "No %s found in Trash"
113
- msgstr "No %s gevonden in de prullenbak"
114
-
115
- #: includes/class-yit-cpt-unlimited.php:678 templates/fields/ajax-terms.php:41
116
- msgid "Search Categories"
117
- msgstr "Zoek categorieën"
118
-
119
- #: includes/class-yit-cpt-unlimited.php:679
120
- msgid "All Categories"
121
- msgstr "Alle categorieën"
122
-
123
- #: includes/class-yit-cpt-unlimited.php:680
124
- msgid "Parent Category"
125
- msgstr "Hoofdcategorie"
126
-
127
- #: includes/class-yit-cpt-unlimited.php:681
128
- msgid "Parent Category:"
129
- msgstr "Hoofdcategorie:"
130
-
131
- #: includes/class-yit-cpt-unlimited.php:682
132
- msgid "Edit Category"
133
- msgstr "Categorie aanpassen"
134
-
135
- #: includes/class-yit-cpt-unlimited.php:683
136
- msgid "Update Category"
137
- msgstr "Update categorie"
138
-
139
- #: includes/class-yit-cpt-unlimited.php:684
140
- msgid "Add New Category"
141
- msgstr "Categorie toevoegen"
142
-
143
- #: includes/class-yit-cpt-unlimited.php:685
144
- msgid "New Category Name"
145
- msgstr "Nieuwe categorie naam"
146
-
147
- #: includes/class-yit-cpt-unlimited.php:686
148
- msgid "Category"
149
- msgstr "Categorie"
150
-
151
- #: includes/class-yit-cpt-unlimited.php:778
152
- msgid "Categories"
153
- msgstr "Categorieën"
154
-
155
- #. translators: %s is the singular name of the post type.
156
- #: includes/class-yit-cpt-unlimited.php:1098
157
- msgid "%s Settings"
158
- msgstr "%s instellingen"
159
-
160
- #: includes/class-yit-cpt-unlimited.php:1106
161
- #: includes/class-yit-cpt-unlimited.php:1260
162
- #: includes/class-yit-cpt-unlimited.php:1266
163
- #: includes/class-yit-plugin-panel.php:84
164
- msgid "Settings"
165
- msgstr "Instellingen"
166
-
167
- #: includes/class-yit-cpt-unlimited.php:1111
168
- msgid "Type"
169
- msgstr "Type"
170
-
171
- #. translators: %s is the singular name of the post type.
172
- #: includes/class-yit-cpt-unlimited.php:1114
173
- msgid "Layout for this %s"
174
- msgstr "De lay-out hiervoor %s"
175
-
176
- #: includes/class-yit-cpt-unlimited.php:1122
177
- msgid "Rewrite"
178
- msgstr "Herschrijf"
179
-
180
- #: includes/class-yit-cpt-unlimited.php:1123
181
- msgid ""
182
- "Univocal identification name in the URL for each product (slug from post if "
183
- "empty)"
184
- msgstr ""
185
- "Unieke identificatie naam in de URL voor ieder product (slug van post indien "
186
- "leeg)"
187
-
188
- #: includes/class-yit-cpt-unlimited.php:1128
189
- msgid "Label in Singular"
190
- msgstr "Label in enkelvoud"
191
-
192
- #: includes/class-yit-cpt-unlimited.php:1129
193
- msgid "Set a label in singular (title of portfolio if empty)"
194
- msgstr "Zet een label op enkelvoud (titel van portfolio indien leeg)"
195
-
196
- #: includes/class-yit-cpt-unlimited.php:1134
197
- msgid "Label in Plural"
198
- msgstr "Label in meervoud"
199
-
200
- #: includes/class-yit-cpt-unlimited.php:1135
201
- msgid "Set a label in plural (title of portfolio if empty)"
202
- msgstr "Zet een label op meervoud (titel van portfolio indien leeg)"
203
-
204
- #: includes/class-yit-cpt-unlimited.php:1140
205
- msgid "Taxonomy"
206
- msgstr "Taxonomie"
207
-
208
- #: includes/class-yit-cpt-unlimited.php:1141
209
- msgid ""
210
- "If you want to use categories in the portfolio, set a name for taxonomy. "
211
- "Name should be a slug (must not contain capital letters nor spaces) and must "
212
- "not be more than 32 characters long (database structure restriction)."
213
- msgstr ""
214
- "Wil je categorieën gebruiken in de portfolio, stel dan een naam voor "
215
- "taxonomie. Naam moet een ’slug’ zijn (mag geen hoofdletters of spaties "
216
- "bevatten) en mag niet meer zijn dan 32 tekens lang (database structuur "
217
- "beperking)."
218
-
219
- #: includes/class-yit-cpt-unlimited.php:1146
220
- msgid "Taxonomy Rewrite"
221
- msgstr "Herschrijf taxonomie"
222
-
223
- #: includes/class-yit-cpt-unlimited.php:1147
224
- msgid "Set univocal name for each category page URL."
225
- msgstr "Stel een unieke naam in voor elke categorie pagina URL."
226
-
227
- #: includes/class-yit-cpt-unlimited.php:1152
228
- msgid "Single layout"
229
- msgstr "Single lay-out"
230
-
231
- #: includes/class-yit-cpt-unlimited.php:1153
232
- msgid "Layout for single page of this portfolio"
233
- msgstr "Lay-out voor single pagina van dit portfolio"
234
-
235
- #: includes/class-yit-cpt-unlimited.php:1196
236
- msgid "layout settings"
237
- msgstr "lay-out instellingen"
238
-
239
- #: includes/class-yit-cpt-unlimited.php:1286
240
- #: includes/class-yit-cpt-unlimited.php:1297
241
- msgid "Quick links"
242
- msgstr "Snelle links"
243
-
244
- #. translators: %s is the name of the post type.
245
- #: includes/class-yit-cpt-unlimited.php:1593
246
- msgid "Show frontend of the %s"
247
- msgstr "Toon frontend van de %s"
248
-
249
- #: includes/class-yit-cpt-unlimited.php:1602 templates/fields/customtabs.php:34
250
- #: templates/fields/customtabs.php:76
251
- msgid "Name"
252
- msgstr "Name"
253
-
254
- #. translators: %s is the plural name of the post type.
255
- #: includes/class-yit-cpt-unlimited.php:1749
256
- msgid "Add %s from images"
257
- msgstr "Voeg %s toe van afbeeldingen"
258
-
259
- #: includes/class-yit-cpt-unlimited.php:1769
260
- msgid "Upload multiple files"
261
- msgstr "Upload meerdere bestanden"
262
-
263
  #: includes/class-yit-plugin-panel-woocommerce.php:419
264
  msgid "The changes you have made will be lost if you leave this page."
265
  msgstr "Als je deze pagina verlaat zullen alle wijzigingen verloren gaan."
@@ -268,6 +45,10 @@ msgstr "Als je deze pagina verlaat zullen alle wijzigingen verloren gaan."
268
  msgid "Plugin Settings"
269
  msgstr "Plugin instellingen"
270
 
 
 
 
 
271
  #: includes/class-yit-plugin-panel.php:450
272
  #: includes/class-yit-plugin-panel.php:453
273
  msgid "How to install premium version"
@@ -605,6 +386,10 @@ msgstr "Posts zoeken"
605
  msgid "Search Product"
606
  msgstr "Zoek Product"
607
 
 
 
 
 
608
  #: templates/fields/customtabs.php:17
609
  msgid "Close all"
610
  msgstr "Sluit allen"
@@ -617,6 +402,10 @@ msgstr "Open allen"
617
  msgid "Remove"
618
  msgstr "Verwijderen"
619
 
 
 
 
 
620
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
621
  msgid "Value"
622
  msgstr "Waarde"
@@ -796,17 +585,6 @@ msgstr "Licentie"
796
  msgid "YITH"
797
  msgstr "YITH"
798
 
799
- #. translators: %s is the singular name of the post type.
800
- #: includes/class-yit-cpt-unlimited.php:676
801
- msgctxt "taxonomy general name"
802
- msgid "%s Categories"
803
- msgstr "%s Categorieën"
804
-
805
- #: includes/class-yit-cpt-unlimited.php:677
806
- msgctxt "taxonomy singular name"
807
- msgid "Category"
808
- msgstr "Categorie"
809
-
810
  #: includes/class-yith-dashboard.php:96
811
  msgctxt "Plugin FW"
812
  msgid "View Changelog"
@@ -929,6 +707,14 @@ msgctxt "Action links"
929
  msgid "Settings"
930
  msgstr "Instellingen"
931
 
 
 
 
 
 
 
 
 
932
  #~ msgid "Show full PHPInfo"
933
  #~ msgstr "Toon volledige PHPInfo"
934
 
@@ -949,3 +735,128 @@ msgstr "Instellingen"
949
 
950
  #~ msgid "and"
951
  #~ msgstr "en"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  msgstr ""
5
  "Project-Id-Version: YITH Framework\n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
+ "POT-Creation-Date: 2021-01-21 07:36:24+00:00\n"
8
  "PO-Revision-Date: 2020-09-24 14:36:33+0000\n"
9
  "Language: nl\n"
10
  "MIME-Version: 1.0\n"
37
  msgid "Color value"
38
  msgstr "Kleurwaarde"
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  #: includes/class-yit-plugin-panel-woocommerce.php:419
41
  msgid "The changes you have made will be lost if you leave this page."
42
  msgstr "Als je deze pagina verlaat zullen alle wijzigingen verloren gaan."
45
  msgid "Plugin Settings"
46
  msgstr "Plugin instellingen"
47
 
48
+ #: includes/class-yit-plugin-panel.php:84
49
+ msgid "Settings"
50
+ msgstr "Instellingen"
51
+
52
  #: includes/class-yit-plugin-panel.php:450
53
  #: includes/class-yit-plugin-panel.php:453
54
  msgid "How to install premium version"
386
  msgid "Search Product"
387
  msgstr "Zoek Product"
388
 
389
+ #: templates/fields/ajax-terms.php:41
390
+ msgid "Search Categories"
391
+ msgstr "Zoek categorieën"
392
+
393
  #: templates/fields/customtabs.php:17
394
  msgid "Close all"
395
  msgstr "Sluit allen"
402
  msgid "Remove"
403
  msgstr "Verwijderen"
404
 
405
+ #: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
406
+ msgid "Name"
407
+ msgstr "Name"
408
+
409
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
410
  msgid "Value"
411
  msgstr "Waarde"
585
  msgid "YITH"
586
  msgstr "YITH"
587
 
 
 
 
 
 
 
 
 
 
 
 
588
  #: includes/class-yith-dashboard.php:96
589
  msgctxt "Plugin FW"
590
  msgid "View Changelog"
707
  msgid "Settings"
708
  msgstr "Instellingen"
709
 
710
+ #~ msgctxt "taxonomy singular name"
711
+ #~ msgid "Category"
712
+ #~ msgstr "Categorie"
713
+
714
+ #~ msgctxt "taxonomy general name"
715
+ #~ msgid "%s Categories"
716
+ #~ msgstr "%s Categorieën"
717
+
718
  #~ msgid "Show full PHPInfo"
719
  #~ msgstr "Toon volledige PHPInfo"
720
 
735
 
736
  #~ msgid "and"
737
  #~ msgstr "en"
738
+
739
+ #~ msgid "Upload multiple files"
740
+ #~ msgstr "Upload meerdere bestanden"
741
+
742
+ #~ msgid "Add %s from images"
743
+ #~ msgstr "Voeg %s toe van afbeeldingen"
744
+
745
+ #~ msgid "Show frontend of the %s"
746
+ #~ msgstr "Toon frontend van de %s"
747
+
748
+ #~ msgid "Quick links"
749
+ #~ msgstr "Snelle links"
750
+
751
+ #~ msgid "layout settings"
752
+ #~ msgstr "lay-out instellingen"
753
+
754
+ #~ msgid "Layout for single page of this portfolio"
755
+ #~ msgstr "Lay-out voor single pagina van dit portfolio"
756
+
757
+ #~ msgid "Single layout"
758
+ #~ msgstr "Single lay-out"
759
+
760
+ #~ msgid "Set univocal name for each category page URL."
761
+ #~ msgstr "Stel een unieke naam in voor elke categorie pagina URL."
762
+
763
+ #~ msgid "Taxonomy Rewrite"
764
+ #~ msgstr "Herschrijf taxonomie"
765
+
766
+ #~ msgid ""
767
+ #~ "If you want to use categories in the portfolio, set a name for taxonomy. "
768
+ #~ "Name should be a slug (must not contain capital letters nor spaces) and "
769
+ #~ "must not be more than 32 characters long (database structure restriction)."
770
+ #~ msgstr ""
771
+ #~ "Wil je categorieën gebruiken in de portfolio, stel dan een naam voor "
772
+ #~ "taxonomie. Naam moet een ’slug’ zijn (mag geen hoofdletters of spaties "
773
+ #~ "bevatten) en mag niet meer zijn dan 32 tekens lang (database structuur "
774
+ #~ "beperking)."
775
+
776
+ #~ msgid "Taxonomy"
777
+ #~ msgstr "Taxonomie"
778
+
779
+ #~ msgid "Set a label in plural (title of portfolio if empty)"
780
+ #~ msgstr "Zet een label op meervoud (titel van portfolio indien leeg)"
781
+
782
+ #~ msgid "Label in Plural"
783
+ #~ msgstr "Label in meervoud"
784
+
785
+ #~ msgid "Set a label in singular (title of portfolio if empty)"
786
+ #~ msgstr "Zet een label op enkelvoud (titel van portfolio indien leeg)"
787
+
788
+ #~ msgid "Label in Singular"
789
+ #~ msgstr "Label in enkelvoud"
790
+
791
+ #~ msgid ""
792
+ #~ "Univocal identification name in the URL for each product (slug from post "
793
+ #~ "if empty)"
794
+ #~ msgstr ""
795
+ #~ "Unieke identificatie naam in de URL voor ieder product (slug van post "
796
+ #~ "indien leeg)"
797
+
798
+ #~ msgid "Rewrite"
799
+ #~ msgstr "Herschrijf"
800
+
801
+ #~ msgid "Layout for this %s"
802
+ #~ msgstr "De lay-out hiervoor %s"
803
+
804
+ #~ msgid "Type"
805
+ #~ msgstr "Type"
806
+
807
+ #~ msgid "%s Settings"
808
+ #~ msgstr "%s instellingen"
809
+
810
+ #~ msgid "Categories"
811
+ #~ msgstr "Categorieën"
812
+
813
+ #~ msgid "Category"
814
+ #~ msgstr "Categorie"
815
+
816
+ #~ msgid "New Category Name"
817
+ #~ msgstr "Nieuwe categorie naam"
818
+
819
+ #~ msgid "Add New Category"
820
+ #~ msgstr "Categorie toevoegen"
821
+
822
+ #~ msgid "Update Category"
823
+ #~ msgstr "Update categorie"
824
+
825
+ #~ msgid "Edit Category"
826
+ #~ msgstr "Categorie aanpassen"
827
+
828
+ #~ msgid "Parent Category:"
829
+ #~ msgstr "Hoofdcategorie:"
830
+
831
+ #~ msgid "Parent Category"
832
+ #~ msgstr "Hoofdcategorie"
833
+
834
+ #~ msgid "All Categories"
835
+ #~ msgstr "Alle categorieën"
836
+
837
+ #~ msgid "No %s found in Trash"
838
+ #~ msgstr "No %s gevonden in de prullenbak"
839
+
840
+ #~ msgid "No %s found"
841
+ #~ msgstr "Geen %s gevonden"
842
+
843
+ #~ msgid "Search %s"
844
+ #~ msgstr "Zoeken %s"
845
+
846
+ #~ msgid "View %s"
847
+ #~ msgstr "Bekijk %s"
848
+
849
+ #~ msgid "All %s"
850
+ #~ msgstr "Alle %s"
851
+
852
+ #~ msgid "New %s"
853
+ #~ msgstr "Nieuw %s"
854
+
855
+ #~ msgid "Edit %s"
856
+ #~ msgstr "Bewerk %s"
857
+
858
+ #~ msgid "Add New %s"
859
+ #~ msgstr "Nieuwe %s toevoegen"
860
+
861
+ #~ msgid "Add %s"
862
+ #~ msgstr "%s toevoegen"
plugin-fw/languages/yith-plugin-fw.pot CHANGED
@@ -1,14 +1,14 @@
1
- # Copyright (C) 2020
2
  # This file is distributed under the same license as the package.
3
  msgid ""
4
  msgstr ""
5
  "Project-Id-Version: \n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
- "POT-Creation-Date: 2020-12-28 12:30:11+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2020-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: YITH <info@yithemes.com>\n"
14
  "Language: en\n"
@@ -48,223 +48,6 @@ msgstr ""
48
  msgid "Color value"
49
  msgstr ""
50
 
51
- #: includes/class-yit-cpt-unlimited.php:486
52
- #: includes/class-yit-cpt-unlimited.php:619
53
- #: includes/class-yit-cpt-unlimited.php:768
54
- #: includes/class-yit-cpt-unlimited.php:1755
55
- #. translators: %s is the singular name of the post type.
56
- #. translators: $s is the singular name of the post type.
57
- #. translators: %s is the singular name of the post type.
58
- #. translators: %s is the plural name of the post type.
59
- msgid "Add %s"
60
- msgstr ""
61
-
62
- #: includes/class-yit-cpt-unlimited.php:488
63
- #: includes/class-yit-cpt-unlimited.php:621
64
- #. translators: %s is the singular name of the post type.
65
- #. translators: $s is the singular name of the post type.
66
- msgid "Add New %s"
67
- msgstr ""
68
-
69
- #: includes/class-yit-cpt-unlimited.php:490
70
- #: includes/class-yit-cpt-unlimited.php:623
71
- #: includes/class-yit-cpt-unlimited.php:1350
72
- #: includes/class-yit-cpt-unlimited.php:1401
73
- #. translators: %s is the singular name of the post type.
74
- #. translators: $s is the singular name of the post type.
75
- #. translators: %s is the post title.
76
- #. translators: %s is the singular name of the post type.
77
- msgid "Edit %s"
78
- msgstr ""
79
-
80
- #: includes/class-yit-cpt-unlimited.php:492
81
- #: includes/class-yit-cpt-unlimited.php:625
82
- #. translators: %s is the singular name of the post type.
83
- #. translators: $s is the singular name of the post type.
84
- msgid "New %s"
85
- msgstr ""
86
-
87
- #: includes/class-yit-cpt-unlimited.php:494
88
- #: includes/class-yit-cpt-unlimited.php:627
89
- #. translators: %s is the plural name of the post type.
90
- #. translators: $s is the plural name of the post type.
91
- msgid "All %s"
92
- msgstr ""
93
-
94
- #: includes/class-yit-cpt-unlimited.php:496
95
- #: includes/class-yit-cpt-unlimited.php:629
96
- #: includes/class-yit-cpt-unlimited.php:1323
97
- #: includes/class-yit-cpt-unlimited.php:1406
98
- #. translators: %s is the singular name of the post type.
99
- #. translators: $s is the singular name of the post type.
100
- #. translators: %s is the plural label of the post type.
101
- #. translators: %s is the plural name of the post type.
102
- msgid "View %s"
103
- msgstr ""
104
-
105
- #: includes/class-yit-cpt-unlimited.php:498
106
- #: includes/class-yit-cpt-unlimited.php:631
107
- #. translators: %s is the plural name of the post type.
108
- #. translators: $s is the plural name of the post type.
109
- msgid "Search %s"
110
- msgstr ""
111
-
112
- #: includes/class-yit-cpt-unlimited.php:500
113
- #: includes/class-yit-cpt-unlimited.php:633
114
- #. translators: %s is the plural name of the post type.
115
- #. translators: $s is the plural name of the post type.
116
- msgid "No %s found"
117
- msgstr ""
118
-
119
- #: includes/class-yit-cpt-unlimited.php:502
120
- #: includes/class-yit-cpt-unlimited.php:635
121
- #. translators: %s is the plural name of the post type.
122
- #. translators: $s is the plural name of the post type.
123
- msgid "No %s found in Trash"
124
- msgstr ""
125
-
126
- #: includes/class-yit-cpt-unlimited.php:678 templates/fields/ajax-terms.php:41
127
- msgid "Search Categories"
128
- msgstr ""
129
-
130
- #: includes/class-yit-cpt-unlimited.php:679
131
- msgid "All Categories"
132
- msgstr ""
133
-
134
- #: includes/class-yit-cpt-unlimited.php:680
135
- msgid "Parent Category"
136
- msgstr ""
137
-
138
- #: includes/class-yit-cpt-unlimited.php:681
139
- msgid "Parent Category:"
140
- msgstr ""
141
-
142
- #: includes/class-yit-cpt-unlimited.php:682
143
- msgid "Edit Category"
144
- msgstr ""
145
-
146
- #: includes/class-yit-cpt-unlimited.php:683
147
- msgid "Update Category"
148
- msgstr ""
149
-
150
- #: includes/class-yit-cpt-unlimited.php:684
151
- msgid "Add New Category"
152
- msgstr ""
153
-
154
- #: includes/class-yit-cpt-unlimited.php:685
155
- msgid "New Category Name"
156
- msgstr ""
157
-
158
- #: includes/class-yit-cpt-unlimited.php:686
159
- msgid "Category"
160
- msgstr ""
161
-
162
- #: includes/class-yit-cpt-unlimited.php:778
163
- msgid "Categories"
164
- msgstr ""
165
-
166
- #: includes/class-yit-cpt-unlimited.php:1098
167
- #. translators: %s is the singular name of the post type.
168
- msgid "%s Settings"
169
- msgstr ""
170
-
171
- #: includes/class-yit-cpt-unlimited.php:1106
172
- #: includes/class-yit-cpt-unlimited.php:1260
173
- #: includes/class-yit-cpt-unlimited.php:1266
174
- #: includes/class-yit-plugin-panel.php:84
175
- msgid "Settings"
176
- msgstr ""
177
-
178
- #: includes/class-yit-cpt-unlimited.php:1111
179
- msgid "Type"
180
- msgstr ""
181
-
182
- #: includes/class-yit-cpt-unlimited.php:1114
183
- #. translators: %s is the singular name of the post type.
184
- msgid "Layout for this %s"
185
- msgstr ""
186
-
187
- #: includes/class-yit-cpt-unlimited.php:1122
188
- msgid "Rewrite"
189
- msgstr ""
190
-
191
- #: includes/class-yit-cpt-unlimited.php:1123
192
- msgid ""
193
- "Univocal identification name in the URL for each product (slug from post if "
194
- "empty)"
195
- msgstr ""
196
-
197
- #: includes/class-yit-cpt-unlimited.php:1128
198
- msgid "Label in Singular"
199
- msgstr ""
200
-
201
- #: includes/class-yit-cpt-unlimited.php:1129
202
- msgid "Set a label in singular (title of portfolio if empty)"
203
- msgstr ""
204
-
205
- #: includes/class-yit-cpt-unlimited.php:1134
206
- msgid "Label in Plural"
207
- msgstr ""
208
-
209
- #: includes/class-yit-cpt-unlimited.php:1135
210
- msgid "Set a label in plural (title of portfolio if empty)"
211
- msgstr ""
212
-
213
- #: includes/class-yit-cpt-unlimited.php:1140
214
- msgid "Taxonomy"
215
- msgstr ""
216
-
217
- #: includes/class-yit-cpt-unlimited.php:1141
218
- msgid ""
219
- "If you want to use categories in the portfolio, set a name for taxonomy. "
220
- "Name should be a slug (must not contain capital letters nor spaces) and "
221
- "must not be more than 32 characters long (database structure restriction)."
222
- msgstr ""
223
-
224
- #: includes/class-yit-cpt-unlimited.php:1146
225
- msgid "Taxonomy Rewrite"
226
- msgstr ""
227
-
228
- #: includes/class-yit-cpt-unlimited.php:1147
229
- msgid "Set univocal name for each category page URL."
230
- msgstr ""
231
-
232
- #: includes/class-yit-cpt-unlimited.php:1152
233
- msgid "Single layout"
234
- msgstr ""
235
-
236
- #: includes/class-yit-cpt-unlimited.php:1153
237
- msgid "Layout for single page of this portfolio"
238
- msgstr ""
239
-
240
- #: includes/class-yit-cpt-unlimited.php:1196
241
- msgid "layout settings"
242
- msgstr ""
243
-
244
- #: includes/class-yit-cpt-unlimited.php:1286
245
- #: includes/class-yit-cpt-unlimited.php:1297
246
- msgid "Quick links"
247
- msgstr ""
248
-
249
- #: includes/class-yit-cpt-unlimited.php:1593
250
- #. translators: %s is the name of the post type.
251
- msgid "Show frontend of the %s"
252
- msgstr ""
253
-
254
- #: includes/class-yit-cpt-unlimited.php:1602 templates/fields/customtabs.php:34
255
- #: templates/fields/customtabs.php:76
256
- msgid "Name"
257
- msgstr ""
258
-
259
- #: includes/class-yit-cpt-unlimited.php:1749
260
- #. translators: %s is the plural name of the post type.
261
- msgid "Add %s from images"
262
- msgstr ""
263
-
264
- #: includes/class-yit-cpt-unlimited.php:1769
265
- msgid "Upload multiple files"
266
- msgstr ""
267
-
268
  #: includes/class-yit-plugin-panel-woocommerce.php:419
269
  msgid "The changes you have made will be lost if you leave this page."
270
  msgstr ""
@@ -273,6 +56,10 @@ msgstr ""
273
  msgid "Plugin Settings"
274
  msgstr ""
275
 
 
 
 
 
276
  #: includes/class-yit-plugin-panel.php:450
277
  #: includes/class-yit-plugin-panel.php:453
278
  msgid "How to install premium version"
@@ -580,6 +367,10 @@ msgstr ""
580
  msgid "Search Product"
581
  msgstr ""
582
 
 
 
 
 
583
  #: templates/fields/customtabs.php:17
584
  msgid "Close all"
585
  msgstr ""
@@ -592,6 +383,10 @@ msgstr ""
592
  msgid "Remove"
593
  msgstr ""
594
 
 
 
 
 
595
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
596
  msgid "Value"
597
  msgstr ""
@@ -769,17 +564,6 @@ msgstr ""
769
  msgid "YITH"
770
  msgstr ""
771
 
772
- #: includes/class-yit-cpt-unlimited.php:676
773
- #. translators: %s is the singular name of the post type.
774
- msgctxt "taxonomy general name"
775
- msgid "%s Categories"
776
- msgstr ""
777
-
778
- #: includes/class-yit-cpt-unlimited.php:677
779
- msgctxt "taxonomy singular name"
780
- msgid "Category"
781
- msgstr ""
782
-
783
  #: includes/class-yith-dashboard.php:96
784
  msgctxt "Plugin FW"
785
  msgid "View Changelog"
1
+ # Copyright (C) 2021
2
  # This file is distributed under the same license as the package.
3
  msgid ""
4
  msgstr ""
5
  "Project-Id-Version: \n"
6
  "Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
7
+ "POT-Creation-Date: 2021-01-21 07:36:24+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2021-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: YITH <info@yithemes.com>\n"
14
  "Language: en\n"
48
  msgid "Color value"
49
  msgstr ""
50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  #: includes/class-yit-plugin-panel-woocommerce.php:419
52
  msgid "The changes you have made will be lost if you leave this page."
53
  msgstr ""
56
  msgid "Plugin Settings"
57
  msgstr ""
58
 
59
+ #: includes/class-yit-plugin-panel.php:84
60
+ msgid "Settings"
61
+ msgstr ""
62
+
63
  #: includes/class-yit-plugin-panel.php:450
64
  #: includes/class-yit-plugin-panel.php:453
65
  msgid "How to install premium version"
367
  msgid "Search Product"
368
  msgstr ""
369
 
370
+ #: templates/fields/ajax-terms.php:41
371
+ msgid "Search Categories"
372
+ msgstr ""
373
+
374
  #: templates/fields/customtabs.php:17
375
  msgid "Close all"
376
  msgstr ""
383
  msgid "Remove"
384
  msgstr ""
385
 
386
+ #: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
387
+ msgid "Name"
388
+ msgstr ""
389
+
390
  #: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
391
  msgid "Value"
392
  msgstr ""
564
  msgid "YITH"
565
  msgstr ""
566
 
 
 
 
 
 
 
 
 
 
 
 
567
  #: includes/class-yith-dashboard.php:96
568
  msgctxt "Plugin FW"
569
  msgid "View Changelog"
plugin-fw/phpcs.xml DELETED
@@ -1,51 +0,0 @@
1
- <?xml version="1.0"?>
2
- <ruleset name="WordPress Coding Standards">
3
- <description>YITH Plugin Framework - PHP_CodeSniffer ruleset.</description>
4
-
5
- <file>.</file>
6
-
7
- <!-- Exclude paths -->
8
- <exclude-pattern>Gruntfile.js</exclude-pattern>
9
- <exclude-pattern>/assets/*</exclude-pattern>
10
- <exclude-pattern>/bin/*</exclude-pattern>
11
- <exclude-pattern>/languages/*</exclude-pattern>
12
- <exclude-pattern>*/node_modules/*</exclude-pattern>
13
- <exclude-pattern>*/tests/*</exclude-pattern>
14
- <exclude-pattern>*/tools/*</exclude-pattern>
15
- <exclude-pattern>*/vendor/*</exclude-pattern>
16
-
17
- <!-- Show progress, show the error codes for each message (source). -->
18
- <arg value="ps"/>
19
-
20
- <!-- Strip the filepaths in reports down to the relevant bit. -->
21
- <arg name="basepath" value="./"/>
22
-
23
- <!-- Check up to 8 files simultaneously. -->
24
- <arg name="parallel" value="8"/>
25
-
26
- <!-- Configs -->
27
- <config name="minimum_supported_wp_version" value="5.2"/>
28
- <!-- Check for cross-version support for PHP 5.6 and higher. -->
29
- <config name="testVersion" value="5.6-"/>
30
-
31
- <!-- Rules -->
32
-
33
- <!-- WordPress -->
34
- <rule ref="WordPress">
35
- <exclude name="WordPress.DB.DirectDatabaseQuery.NoCaching" />
36
- <exclude name="WordPress.DB.DirectDatabaseQuery.DirectQuery" />
37
- <exclude name="WordPress.DB.DirectDatabaseQuery.SchemaChange" />
38
- </rule>
39
-
40
- <rule ref="WordPress.Security.ValidatedSanitizedInput">
41
- <properties>
42
- <property name="customSanitizingFunctions" type="array" value="wc_clean,wc_sanitize_tooltip,wc_format_decimal,wc_stock_amount,wc_sanitize_permalink,wc_sanitize_textarea"/>
43
- </properties>
44
- </rule>
45
-
46
- <rule ref="WordPress.Security.EscapeOutput">
47
- <properties>
48
- <property name="customEscapingFunctions" type="array" value="wc_help_tip,wc_sanitize_tooltip,wc_selected,wc_kses_notice,wc_esc_json,wc_query_string_form_fields,wc_make_phone_clickable,yith_plugin_fw_html_data_to_string,yith_field_deps_data,yith_panel_field_deps_data"/>
49
- </properties>
50
- </rule>
51
- </ruleset>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
plugin-fw/templates/fields/radio.php CHANGED
@@ -32,7 +32,12 @@ $class = 'yith-plugin-fw-radio ' . $class;
32
  value="<?php echo esc_attr( $key ); ?>"
33
  <?php checked( $key, $value ); ?>
34
  />
35
- <label for="<?php echo esc_attr( $radio_id ); ?>"><?php echo wp_kses_post( $label ); ?></label>
 
 
 
 
 
36
  </div>
37
  <?php endforeach; ?>
38
  </div>
32
  value="<?php echo esc_attr( $key ); ?>"
33
  <?php checked( $key, $value ); ?>
34
  />
35
+ <label for="<?php echo esc_attr( $radio_id ); ?>">
36
+ <?php
37
+ // HTML allowed!
38
+ echo $label; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
39
+ ?>
40
+ </label>
41
  </div>
42
  <?php endforeach; ?>
43
  </div>
plugin-fw/templates/fields/select.php CHANGED
@@ -51,7 +51,7 @@ if ( $multiple && ! is_array( $value ) ) {
51
  <option value="<?php echo esc_attr( $key ); ?>"
52
  <?php
53
  if ( $multiple ) {
54
- selected( true, in_array( $key, $value, true ) );
55
  } else {
56
  selected( $key, $value );
57
  }
51
  <option value="<?php echo esc_attr( $key ); ?>"
52
  <?php
53
  if ( $multiple ) {
54
+ selected( true, in_array( $key, $value ) ); // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
55
  } else {
56
  selected( $key, $value );
57
  }
plugin-fw/tools/local-env/docker/phpunit/Dockerfile ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM phpunit/phpunit:latest
2
+
3
+ RUN apk update && \
4
+ apk add --no-cache sqlite bash mariadb-client php7-mysqli subversion wget
5
+
6
+ RUN apk upgrade subversion
7
+
8
+ ENTRYPOINT []
9
+
10
+ WORKDIR /var/www/html/wp-content/plugins/yith-plugin-fw-loader/plugin-fw
11
+
12
+ CMD /bin/true
plugin-fw/tools/local-env/install-wp-tests.sh ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+
3
+ if [ $# -lt 3 ]; then
4
+ echo "usage: $0 <db-name> <db-user> <db-pass> [db-host] [wp-version] [skip-database-creation]"
5
+ exit 1
6
+ fi
7
+
8
+
9
+ echo "INSTALLING...";
10
+ DB_NAME=$1
11
+ DB_USER=$2
12
+ DB_PASS=$3
13
+ DB_HOST=${4-localhost}
14
+ WP_VERSION=${5-latest}
15
+ SKIP_DB_CREATE=${6-false}
16
+
17
+ TMPDIR=${TMPDIR-/tmp}
18
+ TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//")
19
+ WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib}
20
+ WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR/wordpress/}
21
+
22
+ download() {
23
+ if [ `which curl` ]; then
24
+ curl -s "$1" > "$2";
25
+ elif [ `which wget` ]; then
26
+ wget -nv -O "$2" "$1"
27
+ fi
28
+ }
29
+
30
+ if [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+$ ]]; then
31
+ WP_TESTS_TAG="branches/$WP_VERSION"
32
+ elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then
33
+ if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then
34
+ # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x
35
+ WP_TESTS_TAG="tags/${WP_VERSION%??}"
36
+ else
37
+ WP_TESTS_TAG="tags/$WP_VERSION"
38
+ fi
39
+ elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then
40
+ WP_TESTS_TAG="trunk"
41
+ else
42
+ # http serves a single offer, whereas https serves multiple. we only want one
43
+ download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json
44
+ grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json
45
+ LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//')
46
+ if [[ -z "$LATEST_VERSION" ]]; then
47
+ echo "Latest WordPress version could not be found"
48
+ exit 1
49
+ fi
50
+ WP_TESTS_TAG="tags/$LATEST_VERSION"
51
+ fi
52
+
53
+ set -ex
54
+
55
+ install_wp() {
56
+
57
+ if [ -d $WP_CORE_DIR ]; then
58
+ return;
59
+ fi
60
+
61
+ mkdir -p $WP_CORE_DIR
62
+
63
+ if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then
64
+ mkdir -p $TMPDIR/wordpress-nightly
65
+ download https://wordpress.org/nightly-builds/wordpress-latest.zip $TMPDIR/wordpress-nightly/wordpress-nightly.zip
66
+ unzip -q $TMPDIR/wordpress-nightly/wordpress-nightly.zip -d $TMPDIR/wordpress-nightly/
67
+ mv $TMPDIR/wordpress-nightly/wordpress/* $WP_CORE_DIR
68
+ else
69
+ if [ $WP_VERSION == 'latest' ]; then
70
+ local ARCHIVE_NAME='latest'
71
+ elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+ ]]; then
72
+ # https serves multiple offers, whereas http serves single.
73
+ download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR/wp-latest.json
74
+ if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then
75
+ # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x
76
+ LATEST_VERSION=${WP_VERSION%??}
77
+ else
78
+ # otherwise, scan the releases and get the most up to date minor version of the major release
79
+ local VERSION_ESCAPED=`echo $WP_VERSION | sed 's/\./\\\\./g'`
80
+ LATEST_VERSION=$(grep -o '"version":"'$VERSION_ESCAPED'[^"]*' $TMPDIR/wp-latest.json | sed 's/"version":"//' | head -1)
81
+ fi
82
+ if [[ -z "$LATEST_VERSION" ]]; then
83
+ local ARCHIVE_NAME="wordpress-$WP_VERSION"
84
+ else
85
+ local ARCHIVE_NAME="wordpress-$LATEST_VERSION"
86
+ fi
87
+ else
88
+ local ARCHIVE_NAME="wordpress-$WP_VERSION"
89
+ fi
90
+ download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz
91
+ tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C $WP_CORE_DIR
92
+ fi
93
+
94
+ download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php
95
+ }
96
+
97
+ install_test_suite() {
98
+ # portable in-place argument for both GNU sed and Mac OSX sed
99
+ if [[ $(uname -s) == 'Darwin' ]]; then
100
+ local ioption='-i .bak'
101
+ else
102
+ local ioption='-i'
103
+ fi
104
+
105
+ # set up testing suite if it doesn't yet exist
106
+ if [ ! -d $WP_TESTS_DIR ]; then
107
+ # set up testing suite
108
+ mkdir -p $WP_TESTS_DIR
109
+ svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes
110
+ svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data
111
+ fi
112
+
113
+ if [ ! -f wp-tests-config.php ]; then
114
+ download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php
115
+ # remove all forward slashes in the end
116
+ WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::")
117
+ sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php
118
+ sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php
119
+ sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php
120
+ sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php
121
+ sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php
122
+ fi
123
+
124
+ }
125
+
126
+ install_db() {
127
+
128
+ if [ ${SKIP_DB_CREATE} = "true" ]; then
129
+ return 0
130
+ fi
131
+
132
+ # parse DB_HOST for port or socket references
133
+ local PARTS=(${DB_HOST//\:/ })
134
+ local DB_HOSTNAME=${PARTS[0]};
135
+ local DB_SOCK_OR_PORT=${PARTS[1]};
136
+ local EXTRA=""
137
+
138
+ if ! [ -z $DB_HOSTNAME ] ; then
139
+ if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then
140
+ EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp"
141
+ elif ! [ -z $DB_SOCK_OR_PORT ] ; then
142
+ EXTRA=" --socket=$DB_SOCK_OR_PORT"
143
+ elif ! [ -z $DB_HOSTNAME ] ; then
144
+ EXTRA=" --host=$DB_HOSTNAME --protocol=tcp"
145
+ fi
146
+ fi
147
+
148
+ # create database
149
+ mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA;
150
+ }
151
+
152
+ install_wp
153
+ install_test_suite
154
+ install_db
plugin-fw/tools/local-env/mysql-init.sql ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /**
2
+ * MySQL server init.
3
+ *
4
+ * SQL queries in this file will be executed the first time the MySQL server is started.
5
+ */
6
+
7
+ CREATE DATABASE IF NOT EXISTS yith_plugin_fw_tests;
plugin-fw/tools/local-env/phpunit-config.ini ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ upload_max_filesize = 1G
2
+ post_max_size = 1G
3
+
4
+ opcache.enable = 1
5
+ opcache.enable_cli = 1
6
+ opache.file_cache = /tmp/php-opcache
plugin-fw/tools/local-env/scripts/docker.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ const dotenv = require( 'dotenv' );
2
+ const { execSync } = require( 'child_process' );
3
+ dotenv.config();
4
+
5
+ // Execute any docker-compose command passed to this script.
6
+ execSync( 'docker-compose ' + process.argv.slice( 2 ).join( ' ' ), { stdio: 'inherit' } );
plugin-fw/tools/local-env/scripts/install.js ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const dotenv = require( 'dotenv' );
2
+ const { execSync } = require( 'child_process' );
3
+
4
+ dotenv.config();
5
+
6
+ phpunitExec('/var/www/html/install-wp-tests.sh yith_plugin_fw_tests root password mysql latest true');
7
+
8
+ /**
9
+ * Runs commands in the Docker PHPUnit environment.
10
+ *
11
+ * @param {string} cmd The command to run.
12
+ */
13
+ function phpunitExec( cmd ) {
14
+ execSync( `docker-compose run --rm phpunit ${cmd}`, { stdio: 'inherit' } );
15
+ }
plugin-fw/tools/local-env/scripts/start.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ const dotenv = require( 'dotenv' );
2
+ const { execSync } = require( 'child_process' );
3
+
4
+ dotenv.config();
5
+
6
+ // Start the local-env containers.
7
+ execSync( 'docker-compose up -d', { stdio: 'inherit' } );
plugin-fw/tools/local-env/yith-plugin-fw-loader.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Name: YITH Plugin Framework Loader
4
+ * Plugin URI:
5
+ * Description: YITH Plugin Framework Loader
6
+ * Version: 1.0.0
7
+ * Author: YITH
8
+ * Author URI: http://yithemes.com/
9
+ * Text Domain: yith-plugin-framework-loader
10
+ * Domain Path: /languages/
11
+ *
12
+ * @author YITH
13
+ * @package YITH Plugin Framework Loader
14
+ * @version 1.0.0
15
+ */
16
+
17
+ if ( ! defined( 'ABSPATH' ) ) {
18
+ exit;
19
+ } // Exit if accessed directly
20
+
21
+ if ( ! function_exists( 'yith_plugin_registration_hook' ) ) {
22
+ require_once 'plugin-fw/yit-plugin-registration-hook.php';
23
+ }
24
+ register_activation_hook( __FILE__, 'yith_plugin_registration_hook' );
25
+
26
+
27
+ add_action( 'plugins_loaded', 'yith_plugin_fw_loader_load_plugin_fw', 15 );
28
+
29
+ /**
30
+ * Plugin Framework Loader.
31
+ *
32
+ * @return void
33
+ */
34
+ function yith_plugin_fw_loader_load_plugin_fw() {
35
+
36
+ if ( ! defined( 'YIT_CORE_PLUGIN' ) ) {
37
+ global $plugin_fw_data;
38
+ if ( ! empty( $plugin_fw_data ) ) {
39
+ $plugin_fw_file = array_shift( $plugin_fw_data );
40
+ require_once $plugin_fw_file;
41
+ }
42
+ }
43
+
44
+ }
45
+
46
+ /* Plugin Framework Version Check */
47
+ if ( ! function_exists( 'yit_maybe_plugin_fw_loader' ) && file_exists( plugin_dir_path( __FILE__ ) . 'plugin-fw/init.php' ) ) {
48
+ require_once plugin_dir_path( __FILE__ ) . 'plugin-fw/init.php';
49
+ }
50
+ yit_maybe_plugin_fw_loader( plugin_dir_path( __FILE__ ) );
widgets/class.yith-wcan-navigation-widget.php CHANGED
@@ -37,8 +37,35 @@ if ( ! class_exists( 'YITH_WCAN_Navigation_Widget' ) ) {
37
  $control_ops = array( 'width' => 400, 'height' => 350 );
38
  add_action('wp_ajax_yith_wcan_select_type', array( $this, 'ajax_print_terms') );
39
  parent::__construct( 'yith-woo-ajax-navigation', _x( 'YITH Ajax Product Filter', '[Plugin Name] Admin: Widget Title', 'yith-woocommerce-ajax-navigation' ), $widget_ops, $control_ops );
40
- }
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
  function widget( $args, $instance ) {
44
  global $wc_product_attributes;
@@ -369,7 +396,7 @@ if ( ! class_exists( 'YITH_WCAN_Navigation_Widget' ) ) {
369
 
370
  $show_count = $count != 0 && ! empty( $instance['show_count'] ) && ! $instance['show_count'];
371
 
372
- $show_count = apply_filters( "{$this->id}-show_product_count", $show_count, $instance );
373
 
374
  echo '<li ' . $class . '>';
375
 
@@ -605,7 +632,7 @@ if ( ! class_exists( 'YITH_WCAN_Navigation_Widget' ) ) {
605
  }
606
 
607
  if ( $color ) {
608
- $li_style = apply_filters( "{$this->id}-li_style", 'background-color:' . $color . ';', $instance );
609
 
610
  echo '<li ' . $class . '>';
611
 
@@ -1306,7 +1333,7 @@ if ( ! class_exists( 'YITH_WCAN_Navigation_Widget' ) ) {
1306
 
1307
  $show_count = $count != 0 && ! empty( $instance['show_count'] ) && ! $instance['show_count'];
1308
 
1309
- $show_count = apply_filters( "{$this->id}-show_product_count", $show_count, $instance );
1310
 
1311
  if ( $to_print && apply_filters( 'yith_wcan_force_show_count', $show_count ) ) {
1312
  echo ' <small class="count">' . $count . '</small><div class="clear"></div>';
37
  $control_ops = array( 'width' => 400, 'height' => 350 );
38
  add_action('wp_ajax_yith_wcan_select_type', array( $this, 'ajax_print_terms') );
39
  parent::__construct( 'yith-woo-ajax-navigation', _x( 'YITH Ajax Product Filter', '[Plugin Name] Admin: Widget Title', 'yith-woocommerce-ajax-navigation' ), $widget_ops, $control_ops );
 
40
 
41
+ /*
42
+ * Deprecated Filters Map
43
+ *
44
+ * @param mixed|array $deprecated_filters_map Array of deprecated filters
45
+ * @author Andrea Grillo <andrea.grillo@yithemes.com>
46
+ * @since 3.11.7
47
+ * @ return void
48
+ * */
49
+ $deprecated_filters_map = array(
50
+ "{$this->id}-show_product_count" => array(
51
+ 'since' => '3.11.7',
52
+ 'use' => "{$this->id}_show_product_count",
53
+ 'params' => 2,
54
+ ),
55
+ "{$this->id}-li_style" => array(
56
+ 'since' => '3.11.7',
57
+ 'use' => "{$this->id}_li_style",
58
+ 'params' => 2,
59
+ ),
60
+ "{$this->id}-show_product_count" => array(
61
+ 'since' => '3.11.7',
62
+ 'use' => "{$this->id}_show_product_count",
63
+ 'params' => 2,
64
+ ),
65
+ );
66
+
67
+ yith_wcan_deprecated_filter( $deprecated_filters_map );
68
+ }
69
 
70
  function widget( $args, $instance ) {
71
  global $wc_product_attributes;
396
 
397
  $show_count = $count != 0 && ! empty( $instance['show_count'] ) && ! $instance['show_count'];
398
 
399
+ $show_count = apply_filters( "{$this->id}_show_product_count", $show_count, $instance );
400
 
401
  echo '<li ' . $class . '>';
402
 
632
  }
633
 
634
  if ( $color ) {
635
+ $li_style = apply_filters( "{$this->id}_li_style", 'background-color:' . $color . ';', $instance );
636
 
637
  echo '<li ' . $class . '>';
638
 
1333
 
1334
  $show_count = $count != 0 && ! empty( $instance['show_count'] ) && ! $instance['show_count'];
1335
 
1336
+ $show_count = apply_filters( "{$this->id}_show_product_count", $show_count, $instance );
1337
 
1338
  if ( $to_print && apply_filters( 'yith_wcan_force_show_count', $show_count ) ) {
1339
  echo ' <small class="count">' . $count . '</small><div class="clear"></div>';
widgets/class.yith-wcan-reset-navigation-widget.php CHANGED
@@ -8,147 +8,173 @@
8
  */
9
 
10
  if ( ! defined( 'YITH_WCAN' ) ) {
11
- exit;
12
  } // Exit if accessed directly
13
 
14
  if ( ! class_exists( 'YITH_WCAN_Reset_Navigation_Widget' ) ) {
15
- /**
16
- * YITH WooCommerce Ajax Navigation Widget
17
- *
18
- * @since 1.0.0
19
- */
20
- class YITH_WCAN_Reset_Navigation_Widget extends WP_Widget {
21
-
22
- function __construct() {
23
- $widget_ops = array( 'classname' => 'yith-woocommerce-ajax-product-filter yith-woo-ajax-reset-navigation yith-woo-ajax-navigation woocommerce widget_layered_nav', 'description' => _x( 'Reset all filters set by YITH WooCommerce Ajax Product Filter', '[Plugin Name]', 'yith-woocommerce-ajax-navigation' ) );
24
- $control_ops = array( 'width' => 400, 'height' => 350 );
25
- parent::__construct( 'yith-woo-ajax-reset-navigation', __( 'YITH Ajax Reset Filter', 'yith-woocommerce-ajax-navigation' ), $widget_ops, $control_ops );
26
- }
27
-
28
-
29
- function widget( $args, $instance ) {
30
- $_chosen_attributes = YITH_WCAN()->get_layered_nav_chosen_attributes();
31
-
32
- extract( $args );
33
-
34
- $_attributes_array = yit_wcan_get_product_taxonomy();
35
-
36
- if ( apply_filters( 'yith_wcan_show_widget', ! is_post_type_archive( 'product' ) && ! is_tax( $_attributes_array ), $instance ) ) {
37
- return;
38
- }
39
-
40
- // Price
41
- $min_price = isset( $_GET['min_price'] ) ? esc_attr( $_GET['min_price'] ) : 0;
42
- $max_price = isset( $_GET['max_price'] ) ? esc_attr( $_GET['max_price'] ) : 0;
43
-
44
- $after_widget = apply_filters( 'yith_wcan_after_reset_widget', $after_widget );
45
- $before_widget = apply_filters( 'yith_wcan_before_reset_widget', $before_widget );
46
-
47
- ob_start();
48
-
49
- if ( count( $_chosen_attributes ) > 0 || $min_price > 0 || $max_price > 0 || apply_filters( 'yith_woocommerce_reset_filters_attributes', false ) ) {
50
- $title = isset( $instance['title'] ) ? apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) : '';
51
- $label = isset( $instance['label'] ) ? apply_filters( 'yith-wcan-reset-navigation-label', $instance['label'], $instance, $this->id_base ) : '';
52
-
53
- $link = '';
54
-
55
- //clean the url
56
- if( ! isset( $_GET['source_id'] ) ){
57
- $link = '';
58
-
59
- //Check if the user have enabled only WC PRice Filter
60
- if( yit_is_filtered_uri() && ( isset( $_GET['min_price'] ) || isset( $_GET['max_price'] ) ) && is_product_taxonomy() ){
61
- $queried_object = get_queried_object();
62
-
63
- if( $queried_object instanceof WP_Term && ! isset( $_GET[ $queried_object->taxonomy ] ) ){
64
- $link = get_term_link( $queried_object );
65
- }
66
- }
67
-
68
- $link = empty( $link ) || $link instanceof WP_Error ? get_post_type_archive_link( 'product' ) : $link;
69
-
70
- foreach ( (array) $_chosen_attributes as $taxonomy => $data ) {
71
- $taxonomy_filter = str_replace( 'pa_', '', $taxonomy );
72
- $link = remove_query_arg( 'filter_' . $taxonomy_filter, $link );
73
- }
74
-
75
- $link = remove_query_arg( array( 'min_price', 'max_price', 'product_tag' ), $link );
76
- }
77
-
78
- else{
79
- //Start filter from Product category Page
80
- $term = null;
81
-
82
- if( ! empty( $_GET['source_id'] ) && ! empty( $_GET['source_tax'] ) ){
83
- $term = get_term_by( 'term_id', $_GET['source_id'], $_GET['source_tax'] );
84
- }
85
-
86
- if( $term instanceof WP_Term ){
87
- $link = get_term_link( $term, $term->taxonomy );
88
- }
89
- }
90
-
91
- if( is_search() && isset( $_GET['s'] ) && isset( $_GET['post_type'] ) ){
92
- $s = urlencode( stripslashes( $_GET['s'] ) );
93
- $link = add_query_arg( array( 's' => $s, 'post_type' => $_GET['post_type'] ), get_home_url() );
94
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
 
96
- $link = apply_filters( 'yith_woocommerce_reset_filter_link', $link );
 
 
 
97
 
98
- echo $before_widget;
99
- if ( $title ) {
100
- echo $before_title . $title . $after_title;
101
- }
102
- $button_class = apply_filters( 'yith-wcan-reset-navigation-button-class', "yith-wcan-reset-navigation button" );
103
- $rel_nofollow = yith_wcan_add_rel_nofollow_to_url( true );
104
 
105
- echo "<div class='yith-wcan'><a {$rel_nofollow} class='{$button_class}' href='{$link}'>" . __( $label, 'yith-woocommerce-ajax-navigation' ) . "</a></div>";
106
- echo $after_widget;
107
- echo ob_get_clean();
108
- }
109
- else {
110
- ob_end_clean();
111
- if( strpos($before_widget, '<!--widget') !== 0 ){
112
- $before_widget = str_replace( '>', ' style="display:none">', $before_widget );
 
 
 
 
 
 
113
  }
114
 
115
  $html = sprintf( '%s%s', $before_widget, $after_widget );
116
  echo $html;
117
- }
118
- }
119
-
120
-
121
- function form( $instance ) {
122
- $defaults = array(
123
- 'title' => '',
124
- 'label' => __( 'Reset All Filters', 'yith-woocommerce-ajax-navigation' )
125
- );
126
-
127
- $instance = wp_parse_args( (array) $instance, $defaults ); ?>
128
-
129
- <p>
130
- <label>
131
- <strong><?php _e( 'Title', 'yith-woocommerce-ajax-navigation' ) ?>:</strong><br />
132
- <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
133
- </label>
134
- </p>
135
- <p>
136
- <label>
137
- <strong><?php _e( 'Button Label', 'yith-woocommerce-ajax-navigation' ) ?>:</strong><br />
138
- <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'label' ); ?>" name="<?php echo $this->get_field_name( 'label' ); ?>" value="<?php echo $instance['label']; ?>" />
139
- </label>
140
- </p>
141
-
142
- <?php
143
- }
144
-
145
- function update( $new_instance, $old_instance ) {
146
- $instance = $old_instance;
147
- $instance['title'] = strip_tags( $new_instance['title'] );
148
- $instance['label'] = strip_tags( $new_instance['label'] );
149
-
150
- return $instance;
151
- }
152
-
153
- }
 
 
 
154
  }
8
  */
9
 
10
  if ( ! defined( 'YITH_WCAN' ) ) {
11
+ exit;
12
  } // Exit if accessed directly
13
 
14
  if ( ! class_exists( 'YITH_WCAN_Reset_Navigation_Widget' ) ) {
15
+ /**
16
+ * YITH WooCommerce Ajax Navigation Widget
17
+ *
18
+ * @since 1.0.0
19
+ */
20
+ class YITH_WCAN_Reset_Navigation_Widget extends WP_Widget {
21
+
22
+ function __construct() {
23
+ $widget_ops = array(
24
+ 'classname' => 'yith-woocommerce-ajax-product-filter yith-woo-ajax-reset-navigation yith-woo-ajax-navigation woocommerce widget_layered_nav',
25
+ 'description' => _x( 'Reset all filters set by YITH WooCommerce Ajax Product Filter', '[Plugin Name]', 'yith-woocommerce-ajax-navigation' )
26
+ );
27
+ $control_ops = array( 'width' => 400, 'height' => 350 );
28
+ parent::__construct( 'yith-woo-ajax-reset-navigation', __( 'YITH Ajax Reset Filter', 'yith-woocommerce-ajax-navigation' ), $widget_ops, $control_ops );
29
+
30
+ /*
31
+ * Deprecated Filters Map
32
+ *
33
+ * @param mixed|array $deprecated_filters_map Array of deprecated filters
34
+ * @author Andrea Grillo <andrea.grillo@yithemes.com>
35
+ * @since 3.11.7
36
+ * @ return void
37
+ * */
38
+ $deprecated_filters_map = array(
39
+ 'yith-wcan-reset-navigation-label' => array(
40
+ 'since' => '3.11.7',
41
+ 'use' => 'yith_wcan_reset_navigation_label',
42
+ 'params' => 3,
43
+ ),
44
+ 'yith-wcan-reset-navigation-button-class' => array(
45
+ 'since' => '3.11.7',
46
+ 'use' => 'yith_wcan_reset_navigation_button_class',
47
+ 'params' => 1,
48
+ ),
49
+ );
50
+
51
+ yith_wcan_deprecated_filter( $deprecated_filters_map );
52
+ }
53
+
54
+
55
+ function widget( $args, $instance ) {
56
+ $_chosen_attributes = YITH_WCAN()->get_layered_nav_chosen_attributes();
57
+
58
+ extract( $args );
59
+
60
+ $_attributes_array = yit_wcan_get_product_taxonomy();
61
+
62
+ if ( apply_filters( 'yith_wcan_show_widget', ! is_post_type_archive( 'product' ) && ! is_tax( $_attributes_array ), $instance ) ) {
63
+ return;
64
+ }
65
+
66
+ // Price
67
+ $min_price = isset( $_GET['min_price'] ) ? esc_attr( $_GET['min_price'] ) : 0;
68
+ $max_price = isset( $_GET['max_price'] ) ? esc_attr( $_GET['max_price'] ) : 0;
69
+
70
+ $after_widget = apply_filters( 'yith_wcan_after_reset_widget', $after_widget );
71
+ $before_widget = apply_filters( 'yith_wcan_before_reset_widget', $before_widget );
72
+
73
+ ob_start();
74
+
75
+ if ( count( $_chosen_attributes ) > 0 || $min_price > 0 || $max_price > 0 || apply_filters( 'yith_woocommerce_reset_filters_attributes', false ) ) {
76
+ $title = isset( $instance['title'] ) ? apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) : '';
77
+ $label = isset( $instance['label'] ) ? apply_filters( 'yith_wcan_reset_navigation_label', $instance['label'], $instance, $this->id_base ) : '';
78
+
79
+ $link = '';
80
+
81
+ //clean the url
82
+ if ( ! isset( $_GET['source_id'] ) ) {
83
+ $link = '';
84
+
85
+ //Check if the user have enabled only WC PRice Filter
86
+ if ( yit_is_filtered_uri() && ( isset( $_GET['min_price'] ) || isset( $_GET['max_price'] ) ) && is_product_taxonomy() ) {
87
+ $queried_object = get_queried_object();
88
+
89
+ if ( $queried_object instanceof WP_Term && ! isset( $_GET[ $queried_object->taxonomy ] ) ) {
90
+ $link = get_term_link( $queried_object );
91
+ }
92
+ }
93
+
94
+ $link = empty( $link ) || $link instanceof WP_Error ? get_post_type_archive_link( 'product' ) : $link;
95
+
96
+ foreach ( (array) $_chosen_attributes as $taxonomy => $data ) {
97
+ $taxonomy_filter = str_replace( 'pa_', '', $taxonomy );
98
+ $link = remove_query_arg( 'filter_' . $taxonomy_filter, $link );
99
+ }
100
+
101
+ $link = remove_query_arg( array( 'min_price', 'max_price', 'product_tag' ), $link );
102
+ } else {
103
+ //Start filter from Product category Page
104
+ $term = null;
105
+
106
+ if ( ! empty( $_GET['source_id'] ) && ! empty( $_GET['source_tax'] ) ) {
107
+ $term = get_term_by( 'term_id', $_GET['source_id'], $_GET['source_tax'] );
108
+ }
109
+
110
+ if ( $term instanceof WP_Term ) {
111
+ $link = get_term_link( $term, $term->taxonomy );
112
+ }
113
+ }
114
 
115
+ if ( is_search() && isset( $_GET['s'] ) && isset( $_GET['post_type'] ) ) {
116
+ $s = urlencode( stripslashes( $_GET['s'] ) );
117
+ $link = add_query_arg( array( 's' => $s, 'post_type' => $_GET['post_type'] ), get_home_url() );
118
+ }
119
 
120
+ $link = apply_filters( 'yith_woocommerce_reset_filter_link', $link );
 
 
 
 
 
121
 
122
+ echo $before_widget;
123
+ if ( $title ) {
124
+ echo $before_title . $title . $after_title;
125
+ }
126
+ $button_class = apply_filters( 'yith_wcan_reset_navigation_button_class', "yith-wcan-reset-navigation button" );
127
+ $rel_nofollow = yith_wcan_add_rel_nofollow_to_url( true );
128
+
129
+ echo "<div class='yith-wcan'><a {$rel_nofollow} class='{$button_class}' href='{$link}'>" . __( $label, 'yith-woocommerce-ajax-navigation' ) . "</a></div>";
130
+ echo $after_widget;
131
+ echo ob_get_clean();
132
+ } else {
133
+ ob_end_clean();
134
+ if ( strpos( $before_widget, '<!--widget' ) !== 0 ) {
135
+ $before_widget = str_replace( '>', ' style="display:none">', $before_widget );
136
  }
137
 
138
  $html = sprintf( '%s%s', $before_widget, $after_widget );
139
  echo $html;
140
+ }
141
+ }
142
+
143
+
144
+ function form( $instance ) {
145
+ $defaults = array(
146
+ 'title' => '',
147
+ 'label' => __( 'Reset All Filters', 'yith-woocommerce-ajax-navigation' )
148
+ );
149
+
150
+ $instance = wp_parse_args( (array) $instance, $defaults ); ?>
151
+
152
+ <p>
153
+ <label>
154
+ <strong><?php _e( 'Title', 'yith-woocommerce-ajax-navigation' ) ?>:</strong><br/>
155
+ <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'title' ); ?>"
156
+ name="<?php echo $this->get_field_name( 'title' ); ?>"
157
+ value="<?php echo $instance['title']; ?>"/>
158
+ </label>
159
+ </p>
160
+ <p>
161
+ <label>
162
+ <strong><?php _e( 'Button Label', 'yith-woocommerce-ajax-navigation' ) ?>:</strong><br/>
163
+ <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'label' ); ?>"
164
+ name="<?php echo $this->get_field_name( 'label' ); ?>"
165
+ value="<?php echo $instance['label']; ?>"/>
166
+ </label>
167
+ </p>
168
+
169
+ <?php
170
+ }
171
+
172
+ function update( $new_instance, $old_instance ) {
173
+ $instance = $old_instance;
174
+ $instance['title'] = strip_tags( $new_instance['title'] );
175
+ $instance['label'] = strip_tags( $new_instance['label'] );
176
+
177
+ return $instance;
178
+ }
179
+ }
180
  }