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
wpdirectorykit / filters.php

filters.php in WP Directory Kit 1.5.9, at filters.php

984 lines 39.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if (! defined('ABSPATH')) {
3 exit; // Exit if accessed directly.
4 }
5
6 /* fix for redirect */
7 add_action('init', 'wdk_do_output_buffer');
8 function wdk_do_output_buffer()
9 {
10 ob_start();
11 }
12
13 /* add elementor body class */
14 add_filter('body_class', function ($classes) {
15 global $wp_query;
16 global $wdk_listing_id;
17 global $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 }
26
27 return array_merge($classes, array('class-name'));
28 });
29
30 add_filter('the_content', 'wdk_content');
31
32 function wdk_content($content)
33
34 {
35 global $wp_query;
36 global $wdk_listing_id;
37 global $wdk_listing_page_id;
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');
45
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 ) {
52
53 $Winter_MVC_WDK->model('listing_m');
54 $Winter_MVC_WDK->listing_m->update_counter($wdk_listing_id);
55
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
59 /* if not login, return alert for ask login */
60 if (is_user_logged_in()) {
61
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 }
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>';
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 }
88 } else {
89 if (class_exists('Elementor\Plugin')) {
90 $content = '';
91
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 }
95
96 $elementor_instance = Elementor\Plugin::instance();
97 $content .= $elementor_instance->frontend->get_builder_content_for_display($wdk_listing_page_id);
98
99 $custom_css = '';
100
101 $wdk_listing_id;
102 $Winter_MVC_WDK->model('field_m');
103
104 $Winter_MVC_WDK->db->where(array('field_type !=' => 'SECTION'));
105 $fields = $Winter_MVC_WDK->field_m->get();
106
107 foreach ($fields as $field) {
108 if (wdk_field_value($field->idfield, $wdk_listing_id)) continue;
109
110 if (!empty($custom_css)) $custom_css .= ',';
111
112 $custom_css .= '.wdk_' . $field->idfield . '_hide_empty';
113 }
114
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 }
119
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 }
124
125 $custom_css .= '{display: none !important}';
126
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 }
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 }
134 } else {
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>';
136 }
137 }
138 return $content;
139 }
140
141 function wdk_do_header()
142 {
143 // get all elementor pro builder conditions
144 $pro_theme_builder_conditions = get_option('elementor_pro_theme_builder_conditions');
145 $listing_page_id = get_option('wdk_listing_page');
146
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);
151
152 if ($accepted_page_id == $listing_page_id) {
153 // render header content
154
155 $elementor_instance = \Elementor\Plugin::instance();
156 $content = $elementor_instance->frontend->get_builder_content_for_display($header_post_id);
157
158 echo wp_kses_post($content);
159 return;
160 }
161 }
162 }
163 }
164 }
165
166 function wdk_do_footer()
167 {
168 // get all elementor pro builder conditions
169 $pro_theme_builder_conditions = get_option('elementor_pro_theme_builder_conditions');
170 $listing_page_id = get_option('wdk_listing_page');
171
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);
176
177 if ($accepted_page_id == $listing_page_id) {
178 // render footer content
179
180 $elementor_instance = \Elementor\Plugin::instance();
181 $content = $elementor_instance->frontend->get_builder_content_for_display($footer_post_id);
182
183 echo wp_kses_post($content);
184 return;
185 }
186 }
187 }
188 }
189 }
190
191 function wdk_do_body_class($classes)
192 {
193 if (class_exists('Elementor\Plugin')) {
194 $elementor_instance = \Elementor\Plugin::instance();
195 $classes = $elementor_instance->frontend->body_class();
196 }
197
198 return $classes;
199 }
200
201 function wdk_page_template($template)
202 {
203 global $wp_query;
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);
208
209 if ($template_elem == 'elementor_theme') {
210 // for elementor pro theme builder basic support
211 $template_elem = 'elementor_canvas';
212
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 }
217
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 }
226 }
227 }
228 return $template;
229 }
230 add_filter('single_template', 'wdk_page_template');
231
232 add_action('admin_bar_menu', 'wdk_add_toolbar_items', 100);
233 function wdk_add_toolbar_items($admin_bar)
234 {
235 global $wp_query;
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 }
244 }
245
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')) {
251 update_option('wdk_slug_listing_preview_page_changed', 0);
252 flush_rewrite_rules();
253 }
254
255 /*item post type slug*/
256 if ('wdk-listing' === $post_type) {
257 $args['rewrite']['slug'] = get_option('wdk_slug_listing_preview_page');
258 }
259
260 return $args;
261 }
262 add_filter('register_post_type_args', 'wdk_custom_listing_preview_page_slug', 10, 2);
263 }
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
274 /* seo wdk feature, wp overwrite wp_head */
275 add_action('wp_head', 'wdk_seo_metatags');
276 function wdk_seo_metatags()
277 {
278 global $wp_query;
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');
286
287 $seo_title = wp_get_document_title();
288
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 }
306 }
307 }
308
309 /* disable some sw_seo feature if Yost seo plugin detected, for only for listing preview page and profile page */
310 add_action('template_redirect', 'wdk_disable_seo');
311 function wdk_disable_seo()
312 {
313 global $wp_query;
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 }
326 }
327
328 function wdk_yoast_presentation($presentation)
329 {
330 global $wp_query;
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');
338
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 }
345 }
346 return $presentation;
347 }
348 add_filter('wpseo_frontend_presentation', 'wdk_yoast_presentation', 30);
349
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;
363 }
364
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
368 global $Winter_MVC_WDK;
369 $Winter_MVC_WDK->model('listing_m');
370 $total_items = $Winter_MVC_WDK->listing_m->total(array(), TRUE, get_current_user_id());
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
385 }
386 }, 1);
387
388 add_action('wdk-membership/dash/homepage/widgets', function () {
389 global $Winter_MVC_WDK;
390 $Winter_MVC_WDK->model('messages_m');
391 $total_items = $Winter_MVC_WDK->messages_m->total_merge(array(), TRUE, get_current_user_id());
392 if (function_exists('wdk_dash_url')) {
393 ?>
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
406 }
407 });
408
409 add_filter('woocommerce_enable_setup_wizard', '__return_false');
410
411
412 /* detected in smart search location and replace to location id */
413 add_action('template_redirect', 'wdk_search_parameters');
414 function wdk_search_parameters()
415 {
416 global $wp_query;
417 if (!empty($_GET['field_search'])) {
418 global $Winter_MVC_WDK;
419 $Winter_MVC_WDK->model('location_m');
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 $url = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
423
424 $query_link = substr($url, strpos($url, '?') + 1);
425 $clear_link = substr($url, 0, strpos($url, '?'));
426
427 $string_par = array();
428 parse_str($query_link, $string_par);
429 unset($string_par['field_search']);
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);
433 wp_redirect($new_url);
434 exit;
435 }
436 }
437 }
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;
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 });
801
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 });
984