PluginProbe
WP Directory Kit / 1.5.9
WP Directory Kit v1.5.9
1.5.9 1.5.7 1.5.6 1.5.5 1.5.4 1.5.3 trunk 1.1.0 1.1.6 1.1.8 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.8 All 37 releases
← All changes | filters.php +824 -281 1.2.3 → 1.5.9 View file →
@@ -1,170 +1,162 @@
1 1 <?php
2 -if ( ! defined( 'ABSPATH' ) ) {
3 - exit; // Exit if accessed directly.
2 +if (! defined('ABSPATH')) {
3 + exit; // Exit if accessed directly.
4 4 }
5 5
6 6 /* fix for redirect */
7 7 add_action('init', 'wdk_do_output_buffer');
8 -function wdk_do_output_buffer() {
8 +function wdk_do_output_buffer()
9 +{
9 10 ob_start();
10 -}
11 +}
11 12
12 13 /* add elementor body class */
13 -add_filter( 'body_class', function( $classes ) {
14 +add_filter('body_class', function ($classes) {
14 15 global $wp_query;
15 16 global $wdk_listing_id;
16 17 global $wdk_listing_page_id;
17 - if(isset($wp_query->post))
18 - if($wp_query->post->post_type == 'wdk-listing')
19 - {
20 - $wdk_listing_id = $wp_query->post->ID;
21 - $wdk_listing_page_id = get_option('wdk_listing_page');
22 - if(!empty($wdk_listing_page_id) && get_post_status($wdk_listing_page_id) =='publish')
23 - {
24 - return array_merge( $classes, array( 'elementor-page-'.$wdk_listing_page_id ) );
18 + if (isset($wp_query->post))
19 + if ($wp_query->post->post_type == 'wdk-listing') {
20 + $wdk_listing_id = $wp_query->post->ID;
21 + $wdk_listing_page_id = get_option('wdk_listing_page');
22 + if (!empty($wdk_listing_page_id) && get_post_status($wdk_listing_page_id) == 'publish') {
23 + return array_merge($classes, array('elementor-page-' . $wdk_listing_page_id));
24 + }
25 25 }
26 - }
27 -
28 - return array_merge( $classes, array( 'class-name' ) );
29 -} );
30 26
31 -add_filter('the_content', 'wdk_content');
27 + return array_merge($classes, array('class-name'));
28 +});
32 29
33 -function wdk_content( $content )
34 -{
30 +add_filter('the_content', 'wdk_content');
31 +
32 +function wdk_content($content)
33 +
34 +{
35 35 global $wp_query;
36 36 global $wdk_listing_id;
37 37 global $wdk_listing_page_id;
38 - if(isset($wp_query->post))
39 - if($wp_query->post->post_type == 'wdk-listing')
40 - {
41 - $wdk_listing_id = $wp_query->post->ID;
42 - $wdk_listing_page_id = get_option('wdk_listing_page');
43 - if(!empty($wdk_listing_page_id) && get_post_status($wdk_listing_page_id) =='publish')
44 - {
45 - global $Winter_MVC_WDK;
46 - $Winter_MVC_WDK->load_helper('listing');
38 + if (isset($wp_query->post))
39 + if ($wp_query->post->post_type == 'wdk-listing') {
40 + $wdk_listing_id = $wp_query->post->ID;
41 + $wdk_listing_page_id = get_option('wdk_listing_page');
42 + if (!empty($wdk_listing_page_id) && get_post_status($wdk_listing_page_id) == 'publish') {
43 + global $Winter_MVC_WDK;
44 + $Winter_MVC_WDK->load_helper('listing');
47 45
48 - if((wdk_field_value('is_activated', $wdk_listing_id,false) && wdk_field_value('is_approved', $wdk_listing_id,false)) || ( get_current_user_id() != 0 && get_current_user_id() == wdk_field_value('user_id_editor', $wdk_listing_id,false))) {
46 + if (
47 + (
48 + wdk_field_value('is_activated', $wdk_listing_id, false) && wdk_field_value('is_approved', $wdk_listing_id, false)) ||
49 + (get_current_user_id() != 0 && get_current_user_id() == wdk_field_value('user_id_editor', $wdk_listing_id, false)) ||
50 + (get_current_user_id() != 0 && wmvc_user_in_role('administrator'))
51 + ) {
49 52
50 - $Winter_MVC_WDK->model('listing_m');
51 - $Winter_MVC_WDK->listing_m->update_counter($wdk_listing_id);
52 -
53 - if(wdk_get_option('wdk_membership_is_enable_subscriptions') && wdk_get_option('wdk_membership_subscriptions_view_listing_enabled') && function_exists('run_wdk_membership')){
54 - /* if required subscription with View details listing */
53 + $Winter_MVC_WDK->model('listing_m');
54 + $Winter_MVC_WDK->listing_m->update_counter($wdk_listing_id);
55 55
56 - /* if not login, return alert for ask login */
57 - if(is_user_logged_in()) {
56 + if (wdk_get_option('wdk_membership_is_enable_subscriptions') && wdk_get_option('wdk_membership_subscriptions_view_listing_enabled') && function_exists('run_wdk_membership')) {
57 + /* if required subscription with View details listing */
58 58
59 - global $Winter_MVC_wdk_membership;
60 - $Winter_MVC_wdk_membership->model('subscription_m');
61 - $Winter_MVC_wdk_membership->model('subscription_user_m');
62 - $user_subscriptions_listings_view = $Winter_MVC_wdk_membership->subscription_user_m->get_pagination(NULL, FALSE, array('is_activated'=>1,'is_view_private_listings'=>1));
59 + /* if not login, return alert for ask login */
60 + if (is_user_logged_in()) {
63 61
64 - /* if not allow subscription, return alert for subscription on dash page */
65 - if(empty($user_subscriptions_listings_view)){
66 - $content = '<div style="margin: 35px auto;max-width:768px"><p class="wdk_alert wdk_alert-danger">'.esc_html__('Required subscription for "View Listings Details", please', 'wpdirectorykit').' <a href="'.esc_url(wdk_dash_url('dash_page=membership')).'">'.esc_html__('purchase subscription here', 'wpdirectorykit').'</a></p></div>';
67 - } else {
68 - if(class_exists('Elementor\Plugin'))
69 - {
70 - $content = '';
71 - $elementor_instance = Elementor\Plugin::instance();
72 - $content = $elementor_instance->frontend->get_builder_content_for_display($wdk_listing_page_id);
62 + global $Winter_MVC_wdk_membership;
63 + $Winter_MVC_wdk_membership->model('subscription_m');
64 + $Winter_MVC_wdk_membership->model('subscription_user_m');
65 + $user_subscriptions_listings_view = $Winter_MVC_wdk_membership->subscription_user_m->get_pagination(NULL, FALSE, array('is_activated' => 1, 'is_view_private_listings' => 1));
66 +
67 + /* if not allow subscription, return alert for subscription on dash page */
68 + if (empty($user_subscriptions_listings_view)) {
69 + $content = '<div style="margin: 35px auto;max-width:768px"><p class="wdk_alert wdk_alert-danger">' . esc_html__('Required subscription for "View Listings Details", please', 'wpdirectorykit') . ' <a href="' . esc_url(wdk_dash_url('dash_page=membership')) . '">' . esc_html__('purchase subscription here', 'wpdirectorykit') . '</a></p></div>';
70 + } else {
71 + if (class_exists('Elementor\Plugin')) {
72 + $content = '';
73 + $elementor_instance = Elementor\Plugin::instance();
74 + $content = $elementor_instance->frontend->get_builder_content_for_display($wdk_listing_page_id);
75 + }
73 76 }
77 + } else {
78 + $content = '<div style="margin: 35px auto;max-width:768px"><p class="wdk_alert wdk_alert-danger">' . esc_html__('Required subscription for "View Listings Details", please', 'wpdirectorykit') . ' <a href="' . wdk_login_url(wdk_server_current_url(), esc_html__('Login for open Listing', 'wpdirectorykit')) . '">' . esc_html__('register or login here', 'wpdirectorykit') . '</a></p></div>';
74 79 }
80 + }
81 + /* if login required */ elseif (get_option('wdk_membership_login_required_listing_preview') && !is_user_logged_in()) {
82 + if (get_option('wdk_membership_login_page')) {
83 + wp_redirect(wdk_url_suffix(get_permalink(get_option('wdk_membership_login_page')), 'redirect_to=' . urlencode(wdk_current_url()) . '&custom_message=' . urlencode(esc_html__('Please login for open Listing', 'wpdirectorykit'))));
84 + // exit();
85 + } else {
86 + wp_redirect(wp_login_url(wdk_current_url()));
87 + }
75 88 } else {
76 - $content = '<div style="margin: 35px auto;max-width:768px"><p class="wdk_alert wdk_alert-danger">'.esc_html__('Required subscription for "View Listings Details", please', 'wpdirectorykit').' <a href="'.wdk_login_url(wdk_server_current_url(), esc_html__('Login for open Listing', 'wpdirectorykit')).'">'.esc_html__('register or login here', 'wpdirectorykit').'</a></p></div>';
77 - }
89 + if (class_exists('Elementor\Plugin')) {
90 + $content = '';
78 91
79 - }
80 - /* if login required */
81 - elseif(get_option('wdk_membership_login_required_listing_preview') && !is_user_logged_in()){
82 - if(get_option('wdk_membership_login_page')){
83 - wp_redirect(wdk_url_suffix(get_permalink(get_option('wdk_membership_login_page')),'redirect_to='.urlencode(wdk_current_url()).'&custom_message='.urlencode(esc_html__('Please login for open Listing', 'wpdirectorykit'))));
84 - // exit();
85 - } else {
86 - wp_redirect(wp_login_url(wdk_current_url()));
87 - }
88 - }
89 - else {
90 - if(class_exists('Elementor\Plugin'))
91 - {
92 - $content = '';
92 + if (!wdk_field_value('is_approved', $wdk_listing_id, false) || !wdk_field_value('is_activated', $wdk_listing_id, false)) {
93 + $content = '<div style="margin: 35px auto;max-width:768px;margin-bottom: 35px"><p class="wdk_alert wdk_alert-danger">' . esc_html__('Listing is not activated/approved and not visible for public', 'wpdirectorykit') . '</p></div>';
94 + }
93 95
94 - if(!wdk_field_value('is_approved', $wdk_listing_id, false)) {
95 - $content = '<div style="margin: 35px auto;max-width:768px;margin-bottom: 35px"><p class="wdk_alert wdk_alert-danger">'.esc_html__('Listing is not activated/approved and not visible for public', 'wpdirectorykit').'</p></div>';
96 - }
96 + $elementor_instance = Elementor\Plugin::instance();
97 + $content .= $elementor_instance->frontend->get_builder_content_for_display($wdk_listing_page_id);
97 98
98 - $elementor_instance = Elementor\Plugin::instance();
99 - $content .= $elementor_instance->frontend->get_builder_content_for_display($wdk_listing_page_id);
100 -
101 - $custom_css = '';
99 + $custom_css = '';
102 100
103 - $wdk_listing_id;
104 - $Winter_MVC_WDK->model('field_m');
101 + $wdk_listing_id;
102 + $Winter_MVC_WDK->model('field_m');
105 103
106 - $Winter_MVC_WDK->db->where(array('field_type !='=> 'SECTION'));
107 - $fields = $Winter_MVC_WDK->field_m->get();
104 + $Winter_MVC_WDK->db->where(array('field_type !=' => 'SECTION'));
105 + $fields = $Winter_MVC_WDK->field_m->get();
108 106
109 - foreach($fields as $field) {
110 - if(wdk_field_value ($field->idfield, $wdk_listing_id)) continue;
107 + foreach ($fields as $field) {
108 + if (wdk_field_value($field->idfield, $wdk_listing_id)) continue;
111 109
112 - if(!empty($custom_css)) $custom_css .= ',';
110 + if (!empty($custom_css)) $custom_css .= ',';
113 111
114 - $custom_css .= '.wdk_'.$field->idfield.'_hide_empty';
115 - }
112 + $custom_css .= '.wdk_' . $field->idfield . '_hide_empty';
113 + }
116 114
117 - if(!wdk_field_value ('lat', $wdk_listing_id, false) || !wdk_field_value ('lng', $wdk_listing_id)) {
118 - if(!empty($custom_css)) $custom_css .= ',';
119 - $custom_css .= '.wdk_map_hide_empty';
120 - }
115 + if (!wdk_field_value('lat', $wdk_listing_id, false) || !wdk_field_value('lng', $wdk_listing_id)) {
116 + if (!empty($custom_css)) $custom_css .= ',';
117 + $custom_css .= '.wdk_map_hide_empty';
118 + }
121 119
122 - if(!wdk_field_value ('is_featured', $wdk_listing_id, false)) {
123 - if(!empty($custom_css)) $custom_css .= ',';
124 - $custom_css .= '.wdk_is_featured_hide_empty';
125 - }
120 + if (!wdk_field_value('is_featured', $wdk_listing_id, false)) {
121 + if (!empty($custom_css)) $custom_css .= ',';
122 + $custom_css .= '.wdk_is_featured_hide_empty';
123 + }
126 124
127 - $custom_css .= '{display: none !important}';
125 + $custom_css .= '{display: none !important}';
128 126
129 - wp_enqueue_style('wdk-custom-inline', WPDIRECTORYKIT_URL.'public/css/custom-inline.css');
130 - wp_add_inline_style( 'wdk-custom-inline', $custom_css);
131 -
127 + wp_enqueue_style('wdk-custom-inline', WPDIRECTORYKIT_URL . 'public/css/custom-inline.css');
128 + wp_add_inline_style('wdk-custom-inline', $custom_css);
129 + }
132 130 }
131 + } else {
132 + $content = '<div style="margin: 35px auto;max-width:768px"><p class="wdk_alert wdk_alert-danger">' . esc_html__('Listing missing or not activated', 'wpdirectorykit') . ', <a href="' . get_home_url() . '">' . esc_html__('return to Homepage', 'wpdirectorykit') . '</a></p></div>';
133 133 }
134 -
135 134 } else {
136 - $content = '<div style="margin: 35px auto;max-width:768px"><p class="wdk_alert wdk_alert-danger">'.esc_html__('Listing missing or not activated', 'wpdirectorykit').', <a href="'.get_home_url().'">'.esc_html__('return to Homepage', 'wpdirectorykit').'</a></p></div>';
135 + $content = '<div style="margin: 35px auto;max-width:768px"><p class="wdk_alert wdk_alert-danger">' . esc_html__('Missing listing Preview Page', 'wpdirectorykit') . ', <a href="' . esc_url(get_admin_url()) . 'admin.php?page=wdk_settings&function=import_demo">' . esc_html__('Import demo Page', 'wpdirectorykit') . '</a></p></div>';
137 136 }
138 - } else {
139 - $content = '<div style="margin: 35px auto;max-width:768px"><p class="wdk_alert wdk_alert-danger">'.esc_html__('Missing listing Preview Page', 'wpdirectorykit').', <a href="'.get_admin_url().'admin.php?page=wdk_settings&function=import_demo">'.esc_html__('Import demo Page', 'wpdirectorykit').'</a></p></div>';
140 137 }
141 -
142 - }
143 138 return $content;
144 139 }
145 140
146 -function wdk_do_header() {
141 +function wdk_do_header()
142 +{
147 143 // get all elementor pro builder conditions
148 144 $pro_theme_builder_conditions = get_option('elementor_pro_theme_builder_conditions');
149 145 $listing_page_id = get_option('wdk_listing_page');
150 146
151 - if(!empty($pro_theme_builder_conditions))
152 - {
153 - foreach($pro_theme_builder_conditions['header'] as $header_post_id => $header_on_pages)
154 - {
155 - foreach($header_on_pages as $pages)
156 - {
157 - $accepted_page_id = substr($pages, strrpos($pages, '/')+1);
147 + if (!empty($pro_theme_builder_conditions)) {
148 + foreach ($pro_theme_builder_conditions['header'] as $header_post_id => $header_on_pages) {
149 + foreach ($header_on_pages as $pages) {
150 + $accepted_page_id = substr($pages, strrpos($pages, '/') + 1);
158 151
159 - if($accepted_page_id == $listing_page_id)
160 - {
152 + if ($accepted_page_id == $listing_page_id) {
161 153 // render header content
162 154
163 155 $elementor_instance = \Elementor\Plugin::instance();
164 156 $content = $elementor_instance->frontend->get_builder_content_for_display($header_post_id);
165 -
166 - echo wp_kses_post( $content );
157 +
158 + echo wp_kses_post($content);
167 159 return;
168 160 }
169 161 }
170 162 }
@@ -170,29 +162,26 @@
170 162 }
171 163 }
172 164 }
173 165
174 -function wdk_do_footer() {
166 +function wdk_do_footer()
167 +{
175 168 // get all elementor pro builder conditions
176 169 $pro_theme_builder_conditions = get_option('elementor_pro_theme_builder_conditions');
177 170 $listing_page_id = get_option('wdk_listing_page');
178 171
179 - if(!empty($pro_theme_builder_conditions))
180 - {
181 - foreach($pro_theme_builder_conditions['footer'] as $footer_post_id => $footer_on_pages)
182 - {
183 - foreach($footer_on_pages as $pages)
184 - {
185 - $accepted_page_id = substr($pages, strrpos($pages, '/')+1);
172 + if (!empty($pro_theme_builder_conditions)) {
173 + foreach ($pro_theme_builder_conditions['footer'] as $footer_post_id => $footer_on_pages) {
174 + foreach ($footer_on_pages as $pages) {
175 + $accepted_page_id = substr($pages, strrpos($pages, '/') + 1);
186 176
187 - if($accepted_page_id == $listing_page_id)
188 - {
177 + if ($accepted_page_id == $listing_page_id) {
189 178 // render footer content
190 179
191 180 $elementor_instance = \Elementor\Plugin::instance();
192 181 $content = $elementor_instance->frontend->get_builder_content_for_display($footer_post_id);
193 -
194 - echo wp_kses_post( $content );
182 +
183 + echo wp_kses_post($content);
195 184 return;
196 185 }
197 186 }
198 187 }
@@ -200,10 +189,9 @@
200 189 }
201 190
202 191 function wdk_do_body_class($classes)
203 192 {
204 - if(class_exists('Elementor\Plugin'))
205 - {
193 + if (class_exists('Elementor\Plugin')) {
206 194 $elementor_instance = \Elementor\Plugin::instance();
207 195 $classes = $elementor_instance->frontend->body_class();
208 196 }
209 197
@@ -209,232 +197,787 @@
209 197
210 198 return $classes;
211 199 }
212 200
213 -function wdk_page_template ($template) {
201 +function wdk_page_template($template)
202 +{
214 203 global $wp_query;
215 - if(isset($wp_query->post))
216 - if($wp_query->post->post_type == 'wdk-listing')
217 - {
218 - $listing_page_id = get_option('wdk_listing_page');
219 - $template_elem = get_post_meta($listing_page_id, '_wp_page_template', true);
204 + if (isset($wp_query->post))
205 + if ($wp_query->post->post_type == 'wdk-listing') {
206 + $listing_page_id = get_option('wdk_listing_page');
207 + $template_elem = get_post_meta($listing_page_id, '_wp_page_template', true);
220 208
221 - if($template_elem == 'elementor_theme')
222 - {
223 - // for elementor pro theme builder basic support
224 - $template_elem = 'elementor_canvas';
209 + if ($template_elem == 'elementor_theme') {
210 + // for elementor pro theme builder basic support
211 + $template_elem = 'elementor_canvas';
225 212
226 - add_filter( 'body_class', 'wdk_do_body_class' );
227 - add_action( 'elementor/page_templates/canvas/before_content', 'wdk_do_header' , 0 );
228 - add_action( 'elementor/page_templates/canvas/after_content', 'wdk_do_footer' , 0 );
229 - }
213 + add_filter('body_class', 'wdk_do_body_class');
214 + add_action('elementor/page_templates/canvas/before_content', 'wdk_do_header', 0);
215 + add_action('elementor/page_templates/canvas/after_content', 'wdk_do_footer', 0);
216 + }
230 217
231 - if($template_elem == 'elementor_canvas' || $template_elem == 'elementor_header_footer' ){
232 - /**
233 - * @var \Elementor\Modules\PageTemplates\Module $page_templates_module
234 - */
235 - if(class_exists('Elementor\Plugin'))
236 - {
237 - $page_templates_module = Elementor\Plugin::instance()->modules_manager->get_modules( 'page-templates' );
238 - $template = $page_templates_module->get_template_path( $template_elem );
218 + if ($template_elem == 'elementor_canvas' || $template_elem == 'elementor_header_footer') {
219 + /**
220 + * @var \Elementor\Modules\PageTemplates\Module $page_templates_module
221 + */
222 + if (class_exists('Elementor\Plugin')) {
223 + $page_templates_module = Elementor\Plugin::instance()->modules_manager->get_modules('page-templates');
224 + $template = $page_templates_module->get_template_path($template_elem);
225 + }
239 226 }
240 227 }
241 - }
242 228 return $template;
243 229 }
244 -add_filter ('single_template', 'wdk_page_template');
230 +add_filter('single_template', 'wdk_page_template');
245 231
246 232 add_action('admin_bar_menu', 'wdk_add_toolbar_items', 100);
247 -function wdk_add_toolbar_items($admin_bar){
233 +function wdk_add_toolbar_items($admin_bar)
234 +{
248 235 global $wp_query;
249 - if(isset($wp_query->post))
250 - if ($wp_query->post->post_type == 'wdk-listing') {
251 - $admin_bar->add_menu(array(
252 - 'id' => 'edit',
253 - 'title' => __('Edit Listing', 'wpdirectorykit'),
254 - 'href' => admin_url('admin.php?page=wdk_listing&id='.$wp_query->post->ID),
255 - ));
256 - }
236 + if (isset($wp_query->post))
237 + if ($wp_query->post->post_type == 'wdk-listing') {
238 + $admin_bar->add_menu(array(
239 + 'id' => 'edit',
240 + 'title' => __('Edit Listing', 'wpdirectorykit'),
241 + 'href' => admin_url('admin.php?page=wdk_listing&id=' . $wp_query->post->ID),
242 + ));
243 + }
257 244 }
258 245
259 -if(get_option('wdk_slug_listing_preview_page')){
260 - function wdk_custom_listing_preview_page_slug( $args, $post_type ) {
261 -
262 - if(get_option('wdk_slug_listing_preview_page_changed')){
246 +if (get_option('wdk_slug_listing_preview_page')) {
247 + function wdk_custom_listing_preview_page_slug($args, $post_type)
248 + {
249 +
250 + if (get_option('wdk_slug_listing_preview_page_changed')) {
263 251 update_option('wdk_slug_listing_preview_page_changed', 0);
264 252 flush_rewrite_rules();
265 253 }
266 254
267 - /*item post type slug*/
268 - if ( 'wdk-listing' === $post_type ) {
269 - $args['rewrite']['slug'] = get_option('wdk_slug_listing_preview_page');
255 + /*item post type slug*/
256 + if ('wdk-listing' === $post_type) {
257 + $args['rewrite']['slug'] = get_option('wdk_slug_listing_preview_page');
270 258 }
271 -
259 +
272 260 return $args;
273 261 }
274 - add_filter( 'register_post_type_args', 'wdk_custom_listing_preview_page_slug', 10, 2 );
262 + add_filter('register_post_type_args', 'wdk_custom_listing_preview_page_slug', 10, 2);
275 263 }
276 264
265 +// Hook example, custom page title for
266 +add_filter('document_title_parts', function ($title_parts_array) {
267 + global $wp_query;
268 + if (isset($wp_query->post) && $wp_query->post->post_type === 'wdk-listing') {
269 + $title_parts_array['title'] = wdk_listing_seo_title();
270 + }
271 + return $title_parts_array;
272 +});
273 +
277 274 /* seo wdk feature, wp overwrite wp_head */
278 -add_action( 'wp_head', 'wdk_seo_metatags');
279 -function wdk_seo_metatags(){
275 +add_action('wp_head', 'wdk_seo_metatags');
276 +function wdk_seo_metatags()
277 +{
280 278 global $wp_query;
281 - if(isset($wp_query->post))
282 - if($wp_query->post->post_type == 'wdk-listing')
283 - {
284 - $wdk_listing_id = $wp_query->post->ID;
285 - if($wdk_listing_id) {
286 - global $Winter_MVC_WDK;
287 - $Winter_MVC_WDK->model('field_m');
288 - $Winter_MVC_WDK->load_helper('listing');
289 -
290 - echo '<meta name="title" content="'.esc_attr(wp_get_document_title()).'">'.PHP_EOL;
291 - echo '<meta property="og:type" content="'.esc_attr(get_post_type()).'" />'.PHP_EOL;
292 - echo '<meta property="og:title" content="'.esc_attr(wp_get_document_title()).'" />'.PHP_EOL;
279 + if (isset($wp_query->post))
280 + if ($wp_query->post->post_type == 'wdk-listing') {
281 + $wdk_listing_id = $wp_query->post->ID;
282 + if ($wdk_listing_id) {
283 + global $Winter_MVC_WDK;
284 + $Winter_MVC_WDK->model('field_m');
285 + $Winter_MVC_WDK->load_helper('listing');
293 286
294 - if(get_option('wdk_seo_description')) {
295 - echo '<meta name="description" content="'.esc_attr(wp_trim_words(wp_strip_all_tags(wpautop(wdk_field_value(get_option('wdk_seo_description'), $wdk_listing_id))), 20)).'">'.PHP_EOL;
296 - echo '<meta property="og:description" content="'.esc_attr(wp_trim_words(wp_strip_all_tags(wpautop(wdk_field_value(get_option('wdk_seo_description'), $wdk_listing_id))), 20)).'">'.PHP_EOL;
297 - }
298 -
299 - if(get_option('wdk_seo_keywords')) {
300 - echo '<meta name="keywords" content="'.esc_attr(wp_trim_words(wp_strip_all_tags(wpautop(wdk_field_value(get_option('wdk_seo_keywords'), $wdk_listing_id))), 20)).'">'.PHP_EOL;
301 - }
287 + $seo_title = wp_get_document_title();
302 288
303 - if(!in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))){
304 - echo '<meta property="og:image" content="'.esc_url(wdk_image_src(array('listing_images'=>wdk_field_value('listing_images', $wdk_listing_id)), 'full')).'" />'.PHP_EOL;
289 + echo '<meta name="title" content="' . esc_attr($seo_title) . '">' . PHP_EOL;
290 + echo '<meta property="og:type" content="' . esc_attr(get_post_type()) . '" />' . PHP_EOL;
291 + echo '<meta property="og:title" content="' . esc_attr($seo_title) . '" />' . PHP_EOL;
292 +
293 + if (get_option('wdk_seo_description')) {
294 + echo '<meta name="description" content="' . esc_attr(wp_trim_words(wp_strip_all_tags(wpautop(wdk_field_value(get_option('wdk_seo_description'), $wdk_listing_id))), 20)) . '">' . PHP_EOL;
295 + echo '<meta property="og:description" content="' . esc_attr(wp_trim_words(wp_strip_all_tags(wpautop(wdk_field_value(get_option('wdk_seo_description'), $wdk_listing_id))), 20)) . '">' . PHP_EOL;
296 + }
297 +
298 + if (get_option('wdk_seo_keywords')) {
299 + echo '<meta name="keywords" content="' . esc_attr(wp_trim_words(wp_strip_all_tags(wpautop(wdk_field_value(get_option('wdk_seo_keywords'), $wdk_listing_id))), 20)) . '">' . PHP_EOL;
300 + }
301 +
302 + if (!in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))) {
303 + echo '<meta property="og:image" content="' . esc_url(wdk_image_src(array('listing_images' => wdk_field_value('listing_images', $wdk_listing_id)), 'full')) . '" />' . PHP_EOL;
304 + }
305 305 }
306 306 }
307 - }
308 307 }
309 308
310 309 /* disable some sw_seo feature if Yost seo plugin detected, for only for listing preview page and profile page */
311 -add_action( 'template_redirect', 'wdk_disable_seo' );
312 -function wdk_disable_seo() {
310 +add_action('template_redirect', 'wdk_disable_seo');
311 +function wdk_disable_seo()
312 +{
313 313 global $wp_query;
314 - if(isset($wp_query->post))
315 - if($wp_query->post->post_type == 'wdk-listing')
316 - {
317 - if(in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))){
318 - add_filter( 'wpseo_title', '__return_false');
319 - add_filter( 'wpseo_metadesc', '__return_false');
320 - add_filter( 'wpseo_opengraph_url', '__return_false');
321 - add_filter( 'wpseo_opengraph_title', '__return_false');
322 - add_filter( 'wpseo_opengraph_image', '__return_false');
323 - add_filter( 'wpseo_opengraph_type', '__return_false');
324 - add_filter( 'wpseo_opengraph_desc', '__return_false');
314 + if (isset($wp_query->post))
315 + if ($wp_query->post->post_type == 'wdk-listing') {
316 + if (in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))) {
317 + add_filter('wpseo_title', '__return_false');
318 + add_filter('wpseo_metadesc', '__return_false');
319 + add_filter('wpseo_opengraph_url', '__return_false');
320 + add_filter('wpseo_opengraph_title', '__return_false');
321 + add_filter('wpseo_opengraph_image', '__return_false');
322 + add_filter('wpseo_opengraph_type', '__return_false');
323 + add_filter('wpseo_opengraph_desc', '__return_false');
324 + }
325 325 }
326 - }
327 326 }
328 327
329 -function wdk_yoast_presentation($presentation) {
328 +function wdk_yoast_presentation($presentation)
329 +{
330 330 global $wp_query;
331 - if(isset($wp_query->post))
332 - if ($wp_query->post->post_type == 'wdk-listing')
333 - {
334 - $wdk_listing_id = $wp_query->post->ID;
335 - if($wdk_listing_id) {
336 - global $Winter_MVC_WDK;
337 - $Winter_MVC_WDK->model('field_m');
338 - $Winter_MVC_WDK->load_helper('listing');
331 + if (isset($wp_query->post))
332 + if ($wp_query->post->post_type == 'wdk-listing') {
333 + $wdk_listing_id = $wp_query->post->ID;
334 + if ($wdk_listing_id) {
335 + global $Winter_MVC_WDK;
336 + $Winter_MVC_WDK->model('field_m');
337 + $Winter_MVC_WDK->load_helper('listing');
339 338
340 - $presentation->open_graph_images = [
341 - [
342 - 'url' => esc_url(wdk_image_src(array('listing_images'=>wdk_field_value('listing_images', $wdk_listing_id)), 'full')),
343 - ]
344 - ];
345 -
339 + $presentation->open_graph_images = [
340 + [
341 + 'url' => esc_url(wdk_image_src(array('listing_images' => wdk_field_value('listing_images', $wdk_listing_id)), 'full')),
342 + ]
343 + ];
344 + }
346 345 }
347 - }
348 346 return $presentation;
349 347 }
350 348 add_filter('wpseo_frontend_presentation', 'wdk_yoast_presentation', 30);
351 349
352 -add_filter( 'wp_kses_allowed_html', 'wpdirectorykit_wpkses_post_iframe', 10, 2 );
353 -function wpdirectorykit_wpkses_post_iframe( $tags, $context ) {
354 - if ( 'post' === $context ) {
355 - $tags['iframe'] = array(
356 - 'src' => true,
357 - 'height' => true,
358 - 'width' => true,
359 - 'frameborder' => true,
360 - 'allowfullscreen' => true,
361 - );
362 - }
363 - return $tags;
350 +add_filter('wp_kses_allowed_html', 'wpdirectorykit_wpkses_post_iframe', 10, 2);
351 +function wpdirectorykit_wpkses_post_iframe($tags, $context)
352 +{
353 + if ('post' === $context) {
354 + $tags['iframe'] = array(
355 + 'src' => true,
356 + 'height' => true,
357 + 'width' => true,
358 + 'frameborder' => true,
359 + 'allowfullscreen' => true,
360 + );
361 + }
362 + return $tags;
364 363 }
365 364
366 -add_action('wdk-membership/dash/homepage/widgets', function() {
367 - if(!current_user_can('edit_own_listings') && !wmvc_user_in_role('administrator')) return false;
368 -
365 +add_action('wdk-membership/dash/homepage/widgets', function () {
366 + if (!current_user_can('edit_own_listings') && !wmvc_user_in_role('administrator')) return false;
367 +
369 368 global $Winter_MVC_WDK;
370 369 $Winter_MVC_WDK->model('listing_m');
371 370 $total_items = $Winter_MVC_WDK->listing_m->total(array(), TRUE, get_current_user_id());
372 - if(function_exists('wdk_dash_url')){
373 - ?>
374 - <div class="wdk-col-12 wdk-col-md-3 wdk-membership-dash-widget_listings">
375 - <a href="<?php echo esc_url(wdk_dash_url('dash_page=listings'));?>" class="wdk-membership-dash-widget">
376 - <span class="wdk-content">
377 - <span class="icon"><span class="dashicons dashicons-location"></span></span>
378 - </span>
379 - <span class="wdk-side">
380 - <span class="title"><?php echo esc_html__('Listings','wpdirectorykit');?></span>
381 - <span class="wdk-count"><?php echo esc_html($total_items);?></span>
382 - </span>
383 - </a>
384 - </div>
385 -<?php
371 + if (function_exists('wdk_dash_url')) {
372 +?>
373 + <div class="wdk-col-12 wdk-col-md-3 wdk-membership-dash-widget_listings">
374 + <a href="<?php echo esc_url(wdk_dash_url('dash_page=listings')); ?>" class="wdk-membership-dash-widget">
375 + <span class="wdk-content">
376 + <span class="icon"><span class="dashicons dashicons-location"></span></span>
377 + </span>
378 + <span class="wdk-side">
379 + <span class="title"><?php echo esc_html__('Listings', 'wpdirectorykit'); ?></span>
380 + <span class="wdk-count"><?php echo esc_html($total_items); ?></span>
381 + </span>
382 + </a>
383 + </div>
384 + <?php
386 385 }
387 -},1);
386 +}, 1);
388 387
389 -add_action('wdk-membership/dash/homepage/widgets', function() {
388 +add_action('wdk-membership/dash/homepage/widgets', function () {
390 389 global $Winter_MVC_WDK;
391 390 $Winter_MVC_WDK->model('messages_m');
392 391 $total_items = $Winter_MVC_WDK->messages_m->total_merge(array(), TRUE, get_current_user_id());
393 - if(function_exists('wdk_dash_url')){
392 + if (function_exists('wdk_dash_url')) {
394 393 ?>
395 - <div class="wdk-col-12 wdk-col-md-3 wdk-membership-dash-widget_messsages">
396 - <a href="<?php echo esc_url(wdk_dash_url('dash_page=messages'));?>" class="wdk-membership-dash-widget">
397 - <span class="wdk-content">
398 - <span class="icon"><span class="dashicons dashicons-email"></span></span>
399 - </span>
400 - <span class="wdk-side">
401 - <span class="title"><?php echo esc_html__('Messages','wpdirectorykit');?></span>
402 - <span class="wdk-count"><?php echo esc_html($total_items);?></span>
403 - </span>
404 - </a>
405 - </div>
406 -<?php
394 + <div class="wdk-col-12 wdk-col-md-3 wdk-membership-dash-widget_messsages">
395 + <a href="<?php echo esc_url(wdk_dash_url('dash_page=messages')); ?>" class="wdk-membership-dash-widget">
396 + <span class="wdk-content">
397 + <span class="icon"><span class="dashicons dashicons-email"></span></span>
398 + </span>
399 + <span class="wdk-side">
400 + <span class="title"><?php echo esc_html__('Messages', 'wpdirectorykit'); ?></span>
401 + <span class="wdk-count"><?php echo esc_html($total_items); ?></span>
402 + </span>
403 + </a>
404 + </div>
405 + <?php
407 406 }
408 407 });
409 408
410 -add_filter( 'woocommerce_enable_setup_wizard', '__return_false' );
409 +add_filter('woocommerce_enable_setup_wizard', '__return_false');
411 410
412 411
413 412 /* detected in smart search location and replace to location id */
414 -add_action( 'template_redirect', 'wdk_search_parameters' );
415 -function wdk_search_parameters() {
413 +add_action('template_redirect', 'wdk_search_parameters');
414 +function wdk_search_parameters()
415 +{
416 416 global $wp_query;
417 - if(!empty($_GET['field_search'])) {
417 + if (!empty($_GET['field_search'])) {
418 418 global $Winter_MVC_WDK;
419 419 $Winter_MVC_WDK->model('location_m');
420 - $location = $Winter_MVC_WDK->location_m->get_by(array('location_title'=>sanitize_text_field($_GET['field_search'])), TRUE);
421 - if($location) {
420 + $location = $Winter_MVC_WDK->location_m->get_by(array('location_title' => wdk_esc_sql(sanitize_text_field($_GET['field_search']))), TRUE);
421 + if ($location) {
422 422 $url = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
423 -
424 - $query_link = substr($url, strpos($url, '?')+1);
423 +
424 + $query_link = substr($url, strpos($url, '?') + 1);
425 425 $clear_link = substr($url, 0, strpos($url, '?'));
426 426
427 427 $string_par = array();
428 - parse_str( $query_link, $string_par);
428 + parse_str($query_link, $string_par);
429 429 unset($string_par['field_search']);
430 430 $string_par['search_location'] = $location->idlocation;
431 -
432 - $new_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http").'://'.$clear_link.'?'.http_build_query($string_par);
431 +
432 + $new_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . '://' . $clear_link . '?' . http_build_query($string_par);
433 433 wp_redirect($new_url);
434 - exit;
434 + exit;
435 435 }
436 + }
437 +}
436 438
439 +add_filter('plugin_action_links_wpdirectorykit/wpdirectorykit.php', 'wdk_buy_link');
440 +function wdk_buy_link($links)
441 +{
442 + // Build and escape the URL.
443 + $url = esc_url(get_admin_url() . 'admin.php?page=wdk_addons');
444 + // Create the link.
445 + $settings_link = "<a style=\"color:rgb(0, 163, 42);font-weight:bold;\" href='$url'>" . esc_html__('Check Premium Features', 'wpdirectorykit') . '</a>';
446 + // Adds the link to the end of the array.
447 + $links[] = $settings_link;
448 + return $links;
449 +}
450 +
451 +
452 +add_filter('wpdirectorykit/listing/field/value', 'wdk_filter_field_format_date', 2, 10);
453 +if (!function_exists('wdk_filter_field_format_date')) {
454 + function wdk_filter_field_format_date($field_value = '', $field_id = NULL, $number_format = TRUE)
455 + {
456 + if (in_array($field_id, array('date', 'date-modified'))) {
457 + $field_value = wdk_get_date($field_value, TRUE);
458 + }
459 +
460 + return $field_value;
437 461 }
462 +}
463 +
464 +
465 +// fix sitemap issue
466 +function wdk_modify_sitemap_index($content)
467 +{
468 + // Modify the $content as needed
469 + // For example, replace & with &amp;
470 + $content = str_replace('&', '&amp;', $content);
471 + return $content;
472 +}
473 +
474 +// Hook the filter to the wpseo_sitemap_index filter hook
475 +add_filter('wpseo_sitemap_index', 'wdk_modify_sitemap_index');
476 +
477 +if (false) {
478 + // Hook example, custom page title for
479 + add_filter('document_title_parts', function ($title_parts_array) {
480 + global $wp_query;
481 + if (isset($wp_query->post))
482 + if ($wp_query->post->post_type == 'wdk-listing') {
483 + $wdk_listing_id = $wp_query->post->ID;
484 + if ($wdk_listing_id) {
485 + global $Winter_MVC_WDK;
486 + $Winter_MVC_WDK->model('field_m');
487 + $Winter_MVC_WDK->load_helper('listing');
488 +
489 + $title_parts_array['title'] = wp_strip_all_tags(wpautop(wdk_field_value('post_title', $wdk_listing_id) . ' - ' . wdk_field_value('address', $wdk_listing_id)));
490 + }
491 + }
492 + return $title_parts_array;
493 + });
494 +}
495 +
496 +add_filter('tiny_mce_before_init', function ($init) {
497 + if (get_option('wdk_disable_toolbar_on_content_editor')) {
498 + $init['wpautop'] = false;
499 + $init['toolbar'] = false;
500 + }
501 +
502 + return $init;
503 +});
504 +
505 +/*
506 +* configuration number_format_i18n
507 +*/
508 +add_filter('init', function ($init) {
509 +
510 + if (!get_option('wdk_disable_custom_muber_format'))
511 + if (get_option('wdk_number_format_decimal_point') || get_option('wdk_number_format_thousands_sep')) {
512 + global $wp_locale;
513 + if (get_option('wdk_number_format_decimal_point'))
514 + $wp_locale->number_format['decimal_point'] = get_option('wdk_number_format_decimal_point');
515 +
516 + if (get_option('wdk_number_format_thousands_sep'))
517 + $wp_locale->number_format['thousands_sep'] = get_option('wdk_number_format_thousands_sep');
518 + }
519 +});
520 +
521 +add_filter('wdk/listings/results', function ($listings) {
522 + global $Winter_MVC_WDK;
523 + $Winter_MVC_WDK->model('field_m');
524 + $Winter_MVC_WDK->load_helper('listing');
525 +
526 + $listings_ids = array();
527 + foreach ($listings as $listing) {
528 + $listings_ids[] = $listing->post_id;
529 + }
530 +
531 + if (!empty($listings_ids)) {
532 + $Winter_MVC_WDK->listing_m->update_listings_views($listings_ids);
533 + }
534 +
535 + return $listings;
536 +});
537 +
538 +add_filter('body_class', function ($classes) {
539 +
540 + if (isset($_GET['popup'])) {
541 + $classes[] = 'popup-mode';
542 + }
543 +
544 + return $classes;
545 +});
546 +
547 +add_action('init', function () {
548 + $required_version = '1.0.5';
549 + $plugin_file = 'wdk-membership/wdk-membership.php';
550 +
551 + if (!file_exists(WP_PLUGIN_DIR . '/' . $plugin_file)) {
552 + return;
553 + }
554 +
555 + if (! function_exists('get_plugins')) {
556 + require_once ABSPATH . 'wp-admin/includes/plugin.php';
557 + }
558 +
559 + $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file);
560 +
561 + if (is_plugin_active($plugin_file) && isset($plugin_data['Version']) && version_compare($plugin_data['Version'], $required_version, '<')) {
562 +
563 + if (isset($_GET['page']) && !empty($plugin_data['TextDomain']) && strpos($_GET['page'], $plugin_data['TextDomain']) === 0) {
564 + $message = '<span class="dashicons dashicons-warning"></span> &nbsp;&nbsp;' . esc_html__('Important!', 'wpdirectorykit') . '<br>';
565 + $message .= wdk_sprintf(
566 + /* translators: 1: Opening p tag, 2: Closing p tag, 3: Closing a tag, 4: Opening a tag for Gumroad, 5: Opening a tag for WP Rollback, 6: Opening a tag for contact page. */
567 + __('%1$sYou need to update WDK Membership Addon to ensure compatibility with the latest plugin version. You can download the latest addons from your Gumroad account: %4$shttps://gumroad.com/library%3$s%2$s or update via freemius, depends where you purchased our premium plugin.
568 + %1$sIf you prefer to continue using older plugin versions, please note that this increases security risks and is not recommended. However, you can roll back to a previous version using the following plugin: %5$shttps://wordpress.org/plugins/wp-rollback/%3$s%2$s
569 + %1$sIf you experience any issues or need assistance, feel free to contact us through any available channel. We continue to provide fully human-based support: %6$shttps://wpdirectorykit.com/contact/%3$s%2$s', 'wpdirectorykit'),
570 + '<p>',
571 + '</p>',
572 + '</a>',
573 + '<a target="_blank" href="https://gumroad.com/library">',
574 + '<a target="_blank" href="https://wordpress.org/plugins/wp-rollback/">',
575 + '<a target="_blank" href="https://wpdirectorykit.com/contact/">'
576 + );
577 + wdk_notify_admin('wdk_notify_wpdirectorykit_required_version_' . $plugin_data['TextDomain'], $message, '', 'notice notice-error wdk-notice-upgrade');
578 + }
579 + }
580 +});
581 +
582 +
583 +
584 +add_action('admin_footer', function () {
585 +
586 + if (file_exists(WPDIRECTORYKIT_PATH . 'premium_functions.php')) {
587 + return;
588 + }
589 +
590 + if (!current_user_can('manage_options')) {
591 + return;
592 + }
593 +
594 + $user_id = get_current_user_id();
595 + $last_closed = (int) get_user_meta($user_id, '_wdk_admin_popup_closed', true);
596 +
597 + // 14 days = 1209600 seconds
598 + if ($last_closed && (time() - $last_closed) < 1209600) {
599 + return;
600 + }
601 + ?>
602 + <div id="wdk-admin-popup">
603 + <div class="wdk-admin-popup-inner">
604 + <button id="wdk-admin-popup-close" class="wdk-admin-popup-close">&times;</button>
605 +
606 + <div class="wdk-popup-header">
607 + <h2>🚀 <?php echo esc_html__('Welcome to our free WP Directory Kit plugin!', 'wpdirectorykit'); ?></h2>
608 + </div>
609 +
610 + <div class="wdk-popup-content">
611 +
612 + <p>💬 <?php echo esc_html__('If you encounter any issues, please contact us via Telegram, WhatsApp, or email.', 'wpdirectorykit'); ?></p>
613 +
614 + <p class="wdk-contact">
615 + <strong>📩 <?php echo esc_html__('Telegram', 'wpdirectorykit'); ?>:</strong>
616 + <a href="https://t.me/wpdirectorykit" target="_blank">https://t.me/wpdirectorykit</a><br>
617 +
618 + <strong>📱 <?php echo esc_html__('WhatsApp', 'wpdirectorykit'); ?>:</strong>
619 + <a href="https://wa.me/+385959055516" target="_blank">https://wa.me/+385959055516</a>
620 + </p>
621 +
622 + <p class="wdk-links">
623 + ✨ <?php echo esc_html__('Check out our premium features here:', 'wpdirectorykit'); ?><br>
624 + <a href="https://wpdirectorykit.com/plugins/" target="_blank">https://wpdirectorykit.com/plugins/</a>
625 + </p>
626 +
627 + <p class="wdk-links">
628 + 🎨 <?php echo esc_html__('and other cool designs here:', 'wpdirectorykit'); ?><br>
629 + <a href="https://wpdirectorykit.com/themes/" target="_blank">https://wpdirectorykit.com/themes/</a>
630 + </p>
631 +
632 + <p class="wdk-features">
633 + ⚙️ <?php echo esc_html__('We offer everything you need for a professional directory website, including login and registration, a front-end dashboard, agent search, individual agent pages, booking, multi-currency support, import tools, favorites, reviews, listing comparisons, SVG maps, live chat, and much more!', 'wpdirectorykit'); ?>
634 + </p>
635 +
636 + <p class="wdk-footer-note">
637 + ❤️ <?php echo esc_html__('Please consider supporting our work by purchasing one of our premium features — we’ll do our very best to assist you!', 'wpdirectorykit'); ?>
638 + </p>
639 +
640 + <!-- ACTION BUTTONS -->
641 + <div class="wdk-actions">
642 + <button class="wdk-btn wdk-dismiss wdk-admin-popup-close"><?php echo esc_html__('Not interested', 'wpdirectorykit'); ?></button>
643 +
644 + <a href="https://wpdirectorykit.com/plugins/" target="_blank" class="wdk-btn wdk-primary wdk-premium">
645 + <?php echo esc_html__('Check premium plugins', 'wpdirectorykit'); ?>
646 + </a>
647 + </div>
648 +
649 + </div>
650 + </div>
651 +
652 + <?php
653 + $popup_css = '
654 + #wdk-admin-popup {
655 + position: fixed;
656 + inset: 0;
657 + background: rgba(0,0,0,0.6);
658 + backdrop-filter: blur(6px);
659 + display: flex;
660 + justify-content: center;
661 + align-items: center;
662 + z-index: 99999;
663 + opacity: 0;
664 + visibility: hidden;
665 + transition: all .3s ease;
666 + }
667 + #wdk-admin-popup.show {
668 + opacity: 1;
669 + visibility: visible;
670 + }
671 + .wdk-admin-popup-inner {
672 + background: linear-gradient(135deg, #ffffff, #f9fafb);
673 + padding: 35px;
674 + width: 700px;
675 + max-width: calc(100% - 30px);
676 + border-radius: 16px;
677 + box-shadow: 0 20px 60px rgba(0,0,0,0.25);
678 + transform: translateY(20px);
679 + transition: all .3s ease;
680 + position: relative;
681 + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
682 + line-height: 1.6;
683 + }
684 + #wdk-admin-popup.show .wdk-admin-popup-inner {
685 + transform: translateY(0);
686 + }
687 + #wdk-admin-popup-close {
688 + position: absolute;
689 + top: 12px;
690 + right: 14px;
691 + border: none;
692 + background: transparent;
693 + font-size: 22px;
694 + cursor: pointer;
695 + opacity: .6;
696 + }
697 + #wdk-admin-popup-close:hover {
698 + opacity: 1;
699 + }
700 + .wdk-popup-header h2 {
701 + margin: 0 0 15px;
702 + font-size: 22px;
703 + }
704 + .wdk-popup-content p {
705 + margin: 12px 0;
706 + color: #444;
707 + }
708 + .wdk-contact {
709 + background: #f3f4f6;
710 + padding: 12px;
711 + border-radius: 10px;
712 + }
713 + .wdk-links {
714 + background: #eef2ff;
715 + padding: 12px;
716 + border-radius: 10px;
717 + }
718 + .wdk-features {
719 + font-size: 13px;
720 + color: #555;
721 + }
722 + .wdk-footer-note {
723 + font-size: 13px;
724 + color: #777;
725 + }
726 + .wdk-popup-content a {
727 + color: #4f46e5;
728 + text-decoration: none;
729 + word-break: break-all;
730 + }
731 + .wdk-popup-content a:hover {
732 + text-decoration: underline;
733 + }
734 + .wdk-actions {
735 + margin-top: 25px;
736 + display: flex;
737 + justify-content: flex-start;
738 + gap: 10px;
739 + }
740 + .wdk-btn {
741 + padding: 10px 16px;
742 + border-radius: 8px;
743 + border: none;
744 + cursor: pointer;
745 + font-weight: 600;
746 + text-decoration: none;
747 + transition: all .15s;
748 + }
749 + .wdk-btn:hover {
750 + filter: brightness(0.95);
751 + text-decoration: none;
752 + }
753 + .wdk-dismiss {
754 + background: #eee;
755 + }
756 + .wdk-popup-content .wdk-primary {
757 + background: #4f46e5;
758 + color: #fff;
759 + text-decoration: none;
760 + }
761 + ';
762 +
763 + // Enqueue a WordPress built-in style to attach inline CSS to, or register a custom handle.
764 + wp_register_style('wdk-admin-popup', false);
765 + wp_enqueue_style('wdk-admin-popup');
766 + wp_add_inline_style('wdk-admin-popup', $popup_css);
767 + ?>
768 + <?php
769 + $popup_js = "
770 +document.addEventListener('DOMContentLoaded', function() {
771 + const popup = document.getElementById('wdk-admin-popup');
772 +
773 + if (popup) {
774 + setTimeout(() => popup.classList.add('show'), 2000);
775 +
776 + const closeBtns = document.querySelectorAll('.wdk-admin-popup-close');
777 +
778 + function closePopup() {
779 + popup.classList.remove('show');
780 +
781 + fetch(ajaxurl, {
782 + method: 'POST',
783 + headers: {
784 + 'Content-Type': 'application/x-www-form-urlencoded'
785 + },
786 + body: 'action=wdk_close_popup'
787 + });
788 + }
789 +
790 + if (closeBtns && closeBtns.length > 0) {
791 + closeBtns.forEach(btn => {
792 + btn.addEventListener('click', closePopup);
793 + });
794 + }
795 +
796 + popup.addEventListener('click', function(e) {
797 + if (e.target === popup) {
798 + closePopup();
799 + }
800 + });
438 801
439 -}
440 -?>
802 + }
803 +});
804 +";
805 + wp_register_script('wdk-admin-popup', false);
806 + wp_enqueue_script('wdk-admin-popup');
807 + wp_add_inline_script('wdk-admin-popup', $popup_js);
808 + ?>
809 + </div>
810 +<?php
811 +});
812 +
813 +add_action('wp_ajax_wdk_close_popup', function () {
814 + if (!current_user_can('manage_options')) {
815 + wp_die();
816 + }
817 +
818 + update_user_meta(get_current_user_id(), '_wdk_admin_popup_closed', time());
819 +
820 + wp_die();
821 +});
822 +
823 +
824 +add_filter('body_class', function ($classes) {
825 + if (get_option('wdk_disable_outline_on_focus')) {
826 + $classes[] = 'wdk_disable_outline_on_focus';
827 + }
828 + return $classes;
829 +});
830 +
831 +
832 +
833 +
834 +add_action('wdk/listing/edit/aboveform', function () {
835 +
836 + if (function_exists('fpai_register_settings')) return false;
837 +
838 +
839 + $popup_css = '
840 + .fpai-ai-button {
841 + display: inline-flex;
842 + align-items: center;
843 + gap: 8px;
844 + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
845 + color: white;
846 + padding: 12px 20px;
847 + border-radius: 25px;
848 + cursor: pointer;
849 + font-weight: 600;
850 + font-size: 14px;
851 + box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
852 + transition: all 0.3s ease;
853 + margin-bottom: 15px;
854 + border: none;
855 + position: relative;
856 + overflow: hidden;
857 + }
858 +
859 + .fpai-ai-button .fpai-button-text {
860 + color: #fff;
861 + }
862 +
863 + .fpai-ai-button:hover {
864 + transform: translateY(-2px);
865 + box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
866 + background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
867 + }
868 +
869 + .fpai-ai-button:active {
870 + transform: translateY(0);
871 + }
872 +
873 + .fpai-ai-button.active {
874 + background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
875 + transform: translateY(-1px);
876 + }
877 +
878 + /* Stars Container with Animation */
879 + .fpai-stars-container {
880 + display: flex;
881 + gap: 2px;
882 + }
883 +
884 + .fpai-star {
885 + display: inline-block;
886 + animation: sparkle 2s infinite;
887 + font-size: 12px;
888 + }
889 +
890 + .fpai-star:nth-child(1) {
891 + animation-delay: 0s;
892 + }
893 +
894 + .fpai-star:nth-child(2) {
895 + animation-delay: 0.7s;
896 + }
897 +
898 + .fpai-star:nth-child(3) {
899 + animation-delay: 1.4s;
900 + }
901 +
902 + @keyframes sparkle {
903 +
904 + 0%,
905 + 100% {
906 + opacity: 0.3;
907 + transform: scale(0.8) rotate(0deg);
908 + }
909 +
910 + 50% {
911 + opacity: 1;
912 + transform: scale(1.2) rotate(180deg);
913 + }
914 + }
915 +
916 + ';
917 +
918 + // Enqueue a WordPress built-in style to attach inline CSS to, or register a custom handle.
919 + wp_register_style('wdk-admin-popup', false);
920 + wp_enqueue_style('wdk-admin-popup');
921 + wp_add_inline_style('wdk-admin-popup', $popup_css);
922 +
923 + wp_enqueue_script('thickbox');
924 + wp_enqueue_style('thickbox');
925 +?>
926 + <a class="fpai-ai-button fpai-pro"
927 + <?php if (!file_exists(ABSPATH . 'wp-content/plugins/form-populate-with-ai/form-populate-with-ai.php')): ?>
928 + data-button-succuss="<?php echo esc_attr__('Install', 'wpdirectorykit'); ?>"
929 + data-title="<?php echo esc_attr__('Form Populate with AI', 'wpdirectorykit'); ?>"
930 + data-content="<?php echo esc_attr__('Please install our free plugin AI Form Populate to use this feature and button should open our website with plugin details', 'wpdirectorykit'); ?>"
931 + data-action="<?php echo esc_url(admin_url('plugin-install.php?tab=plugin-information&plugin=form-populate-with-ai&TB_iframe=true&width=600&height=550' )); ?>"
932 + <?php elseif (file_exists(ABSPATH . 'wp-content/plugins/form-populate-with-ai/form-populate-with-ai.php') && !function_exists('fpai_register_settings')): ?>
933 + data-button-succuss="<?php echo esc_attr__('Activate', 'wpdirectorykit'); ?>"
934 + data-title="<?php echo esc_attr__('Form Populate with AI', 'wpdirectorykit'); ?>"
935 + data-content="<?php echo esc_attr__('Please install our free plugin AI Form Populate to use this feature and button should open our website with plugin details', 'wpdirectorykit'); ?>"
936 +
937 + data-action="<?php echo esc_url(admin_url('plugin-install.php?tab=plugin-information&plugin=form-populate-with-ai&TB_iframe=true&width=600&height=550' )); ?>"
938 + <?php endif; ?>
939 + >
940 + <span class="fpai-stars-container">
941 + <span class="fpai-star">⭐</span>
942 + <span class="fpai-star">✨</span>
943 + <span class="fpai-star">🌟</span>
944 + </span>
945 + <span class="fpai-button-text"><?php echo esc_html__('Populate with AI', 'wpdirectorykit'); ?></span>
946 + </a>
947 +
948 + <script>
949 +jQuery(document).ready(function ($) {
950 + if (typeof jQuery.fn.confirm == 'function') {
951 + jQuery('.fpai-pro').off().on('click', function (e) {
952 + e.preventDefault();
953 + var self = jQuery(this)
954 + jQuery.confirm({
955 + boxWidth: '400px',
956 + useBootstrap: false,
957 + title: self.data('title'),
958 + content: self.data('content'),
959 + buttons: {
960 + cancel: function () {
961 + return true;
962 + },
963 + somethingElse: {
964 + text: self.data('button-succuss'),
965 + btnClass: 'btn-blue activate-now',
966 + keys: ['enter', 'shift'],
967 + action: function () {
968 + tb_show(
969 + self.data('title'),
970 + self.data('action')
971 + );
972 + }
973 + }
974 + }
975 + });
976 + return false;
977 + });
978 + }
979 + });
980 + </script>
981 +
982 +<?php
983 +});