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 +854 -230 1.1.0 → 1.5.9 View file →
@@ -1,142 +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 -add_filter('the_content', 'wdk_content');
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 + }
13 26
14 -function wdk_content( $content )
15 -{
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 +{
16 35 global $wp_query;
17 36 global $wdk_listing_id;
18 37 global $wdk_listing_page_id;
19 - if(isset($wp_query->post))
20 - if($wp_query->post->post_type == 'wdk-listing')
21 - {
22 - $wdk_listing_id = $wp_query->post->ID;
23 - $wdk_listing_page_id = get_option('wdk_listing_page');
24 - if(!empty($wdk_listing_page_id) && get_post_status($wdk_listing_page_id) =='publish')
25 - {
26 - global $Winter_MVC_WDK;
27 - $Winter_MVC_WDK->load_helper('listing');
28 - if(wdk_field_value('is_activated', $wdk_listing_id,false) && wdk_field_value('is_approved', $wdk_listing_id,false)) {
29 -
30 - if(wdk_get_option('wdk_membership_is_enable_subscriptions') && wdk_get_option('wdk_membership_subscriptions_view_listing_enabled') && function_exists('run_wdk_membership')){
31 - /* if required subscription with View details 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');
32 45
33 - /* if not login, return alert for ask login */
34 - if(is_user_logged_in()) {
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 + ) {
35 52
36 - global $Winter_MVC_wdk_membership;
37 - $Winter_MVC_wdk_membership->model('subscription_m');
38 - $Winter_MVC_wdk_membership->model('subscription_user_m');
39 - $user_subscriptions_listings_view = $Winter_MVC_wdk_membership->subscription_user_m->get_pagination(NULL, FALSE, array('is_activated'=>1,'is_view_private_listings'=>1));
53 + $Winter_MVC_WDK->model('listing_m');
54 + $Winter_MVC_WDK->listing_m->update_counter($wdk_listing_id);
40 55
41 - /* if not allow subscription, return alert for subscription on dash page */
42 - if(empty($user_subscriptions_listings_view)){
43 - $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>';
44 - } else {
45 - if(class_exists('Elementor\Plugin'))
46 - {
47 - $content = '';
48 - $elementor_instance = Elementor\Plugin::instance();
49 - $content = $elementor_instance->frontend->get_builder_content_for_display($wdk_listing_page_id);
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 + }
50 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>';
51 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 + }
52 88 } else {
53 - $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>';
54 - }
89 + if (class_exists('Elementor\Plugin')) {
90 + $content = '';
55 91
56 - }
57 - /* if login required */
58 - elseif(get_option('wdk_membership_login_required_listing_preview') && !is_user_logged_in()){
59 - if(get_option('wdk_membership_login_page')){
60 - 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'))));
61 - // exit();
62 - } else {
63 - wp_redirect(wp_login_url(wdk_current_url()));
64 - }
65 - }
66 - else {
67 - if(class_exists('Elementor\Plugin'))
68 - {
69 - $content = '';
70 - $elementor_instance = Elementor\Plugin::instance();
71 - $content = $elementor_instance->frontend->get_builder_content_for_display($wdk_listing_page_id);
72 -
73 - $custom_css = '';
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 + }
74 95
75 - $wdk_listing_id;
76 - $Winter_MVC_WDK->model('field_m');
96 + $elementor_instance = Elementor\Plugin::instance();
97 + $content .= $elementor_instance->frontend->get_builder_content_for_display($wdk_listing_page_id);
77 98
78 - $Winter_MVC_WDK->db->where(array('field_type !='=> 'SECTION'));
79 - $fields = $Winter_MVC_WDK->field_m->get();
99 + $custom_css = '';
80 100
81 - foreach($fields as $field) {
82 - if(wdk_field_value ($field->idfield, $wdk_listing_id)) continue;
101 + $wdk_listing_id;
102 + $Winter_MVC_WDK->model('field_m');
83 103
84 - if(!empty($custom_css)) $custom_css .= ',';
104 + $Winter_MVC_WDK->db->where(array('field_type !=' => 'SECTION'));
105 + $fields = $Winter_MVC_WDK->field_m->get();
85 106
86 - $custom_css .= '.wdk_'.$field->idfield.'_hide_empty';
87 - }
107 + foreach ($fields as $field) {
108 + if (wdk_field_value($field->idfield, $wdk_listing_id)) continue;
88 109
89 - if(!wdk_field_value ('lat', $wdk_listing_id, false) || !wdk_field_value ('lng', $wdk_listing_id)) {
90 - if(!empty($custom_css)) $custom_css .= ',';
91 - $custom_css .= '.wdk_map_hide_empty';
92 - }
110 + if (!empty($custom_css)) $custom_css .= ',';
93 111
94 - if(!wdk_field_value ('is_featured', $wdk_listing_id, false)) {
95 - if(!empty($custom_css)) $custom_css .= ',';
96 - $custom_css .= '.wdk_is_featured_hide_empty';
97 - }
112 + $custom_css .= '.wdk_' . $field->idfield . '_hide_empty';
113 + }
98 114
99 - $custom_css .= '{display: none !important}';
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 + }
100 119
101 - wp_enqueue_style('wdk-custom-inline', WPDIRECTORYKIT_URL.'public/css/custom-inline.css');
102 - wp_add_inline_style( 'wdk-custom-inline', $custom_css);
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 + }
103 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 + }
104 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>';
105 133 }
106 -
107 134 } else {
108 - $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>';
109 136 }
110 - } else {
111 - $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>';
112 137 }
113 -
114 - }
115 138 return $content;
116 139 }
117 140
118 -function wdk_do_header() {
141 +function wdk_do_header()
142 +{
119 143 // get all elementor pro builder conditions
120 144 $pro_theme_builder_conditions = get_option('elementor_pro_theme_builder_conditions');
121 145 $listing_page_id = get_option('wdk_listing_page');
122 146
123 - if(!empty($pro_theme_builder_conditions))
124 - {
125 - foreach($pro_theme_builder_conditions['header'] as $header_post_id => $header_on_pages)
126 - {
127 - foreach($header_on_pages as $pages)
128 - {
129 - $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);
130 151
131 - if($accepted_page_id == $listing_page_id)
132 - {
152 + if ($accepted_page_id == $listing_page_id) {
133 153 // render header content
134 154
135 155 $elementor_instance = \Elementor\Plugin::instance();
136 156 $content = $elementor_instance->frontend->get_builder_content_for_display($header_post_id);
137 -
138 - echo wp_kses_post( $content );
157 +
158 + echo wp_kses_post($content);
139 159 return;
140 160 }
141 161 }
142 162 }
@@ -142,29 +162,26 @@
142 162 }
143 163 }
144 164 }
145 165
146 -function wdk_do_footer() {
166 +function wdk_do_footer()
167 +{
147 168 // get all elementor pro builder conditions
148 169 $pro_theme_builder_conditions = get_option('elementor_pro_theme_builder_conditions');
149 170 $listing_page_id = get_option('wdk_listing_page');
150 171
151 - if(!empty($pro_theme_builder_conditions))
152 - {
153 - foreach($pro_theme_builder_conditions['footer'] as $footer_post_id => $footer_on_pages)
154 - {
155 - foreach($footer_on_pages as $pages)
156 - {
157 - $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);
158 176
159 - if($accepted_page_id == $listing_page_id)
160 - {
177 + if ($accepted_page_id == $listing_page_id) {
161 178 // render footer content
162 179
163 180 $elementor_instance = \Elementor\Plugin::instance();
164 181 $content = $elementor_instance->frontend->get_builder_content_for_display($footer_post_id);
165 -
166 - echo wp_kses_post( $content );
182 +
183 + echo wp_kses_post($content);
167 184 return;
168 185 }
169 186 }
170 187 }
@@ -172,10 +189,9 @@
172 189 }
173 190
174 191 function wdk_do_body_class($classes)
175 192 {
176 - if(class_exists('Elementor\Plugin'))
177 - {
193 + if (class_exists('Elementor\Plugin')) {
178 194 $elementor_instance = \Elementor\Plugin::instance();
179 195 $classes = $elementor_instance->frontend->body_class();
180 196 }
181 197
@@ -181,179 +197,787 @@
181 197
182 198 return $classes;
183 199 }
184 200
185 -function wdk_page_template ($template) {
201 +function wdk_page_template($template)
202 +{
186 203 global $wp_query;
187 - if(isset($wp_query->post))
188 - if($wp_query->post->post_type == 'wdk-listing')
189 - {
190 - $listing_page_id = get_option('wdk_listing_page');
191 - $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);
192 208
193 - if($template_elem == 'elementor_theme')
194 - {
195 - // for elementor pro theme builder basic support
196 - $template_elem = 'elementor_canvas';
209 + if ($template_elem == 'elementor_theme') {
210 + // for elementor pro theme builder basic support
211 + $template_elem = 'elementor_canvas';
197 212
198 - add_filter( 'body_class', 'wdk_do_body_class' );
199 - add_action( 'elementor/page_templates/canvas/before_content', 'wdk_do_header' , 0 );
200 - add_action( 'elementor/page_templates/canvas/after_content', 'wdk_do_footer' , 0 );
201 - }
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 + }
202 217
203 - if($template_elem == 'elementor_canvas' || $template_elem == 'elementor_header_footer' ){
204 - /**
205 - * @var \Elementor\Modules\PageTemplates\Module $page_templates_module
206 - */
207 - if(class_exists('Elementor\Plugin'))
208 - {
209 - $page_templates_module = Elementor\Plugin::instance()->modules_manager->get_modules( 'page-templates' );
210 - $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 + }
211 226 }
212 227 }
213 - }
214 228 return $template;
215 229 }
216 -add_filter ('single_template', 'wdk_page_template');
230 +add_filter('single_template', 'wdk_page_template');
217 231
218 232 add_action('admin_bar_menu', 'wdk_add_toolbar_items', 100);
219 -function wdk_add_toolbar_items($admin_bar){
233 +function wdk_add_toolbar_items($admin_bar)
234 +{
220 235 global $wp_query;
221 - if(isset($wp_query->post))
222 - if ($wp_query->post->post_type == 'wdk-listing') {
223 - $admin_bar->add_menu(array(
224 - 'id' => 'edit',
225 - 'title' => __('Edit Listing', 'wpdirectorykit'),
226 - 'href' => admin_url('admin.php?page=wdk_listing&id='.$wp_query->post->ID),
227 - ));
228 - }
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 + }
229 244 }
230 245
231 -if(get_option('wdk_slug_listing_preview_page')){
232 - function wdk_custom_listing_preview_page_slug( $args, $post_type ) {
233 -
234 - 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')) {
235 251 update_option('wdk_slug_listing_preview_page_changed', 0);
236 252 flush_rewrite_rules();
237 253 }
238 254
239 - /*item post type slug*/
240 - if ( 'wdk-listing' === $post_type ) {
241 - $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');
242 258 }
243 -
259 +
244 260 return $args;
245 261 }
246 - 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);
247 263 }
248 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 +
249 274 /* seo wdk feature, wp overwrite wp_head */
250 -add_action( 'wp_head', 'wdk_seo_metatags');
251 -function wdk_seo_metatags(){
275 +add_action('wp_head', 'wdk_seo_metatags');
276 +function wdk_seo_metatags()
277 +{
252 278 global $wp_query;
253 - if(isset($wp_query->post))
254 - if($wp_query->post->post_type == 'wdk-listing')
255 - {
256 - $wdk_listing_id = $wp_query->post->ID;
257 - if($wdk_listing_id) {
258 - global $Winter_MVC_WDK;
259 - $Winter_MVC_WDK->model('field_m');
260 - $Winter_MVC_WDK->load_helper('listing');
261 -
262 - echo '<meta name="title" content="'.esc_attr(wp_get_document_title()).'">'.PHP_EOL;
263 - echo '<meta property="og:type" content="'.esc_attr(get_post_type()).'" />'.PHP_EOL;
264 - 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');
265 286
266 - if(get_option('wdk_seo_description')) {
267 - 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;
268 - 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;
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 + }
269 305 }
270 -
271 - if(get_option('wdk_seo_keywords')) {
272 - 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;
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');
273 324 }
325 + }
326 +}
274 327
275 - if(!in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))){
276 - 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;
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 + ];
277 344 }
278 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 + );
279 361 }
362 + return $tags;
280 363 }
281 364
282 -/* disable some sw_seo feature if Yost seo plugin detected, for only for listing preview page and profile page */
283 -add_action( 'template_redirect', 'wdk_disable_seo' );
284 -function wdk_disable_seo() {
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 +{
285 416 global $wp_query;
286 - if(isset($wp_query->post))
287 - if($wp_query->post->post_type == 'wdk-listing')
288 - {
289 - if(in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))){
290 - add_filter( 'wpseo_title', '__return_false');
291 - add_filter( 'wpseo_metadesc', '__return_false');
292 - add_filter( 'wpseo_opengraph_url', '__return_false');
293 - add_filter( 'wpseo_opengraph_title', '__return_false');
294 - add_filter( 'wpseo_opengraph_image', '__return_false');
295 - add_filter( 'wpseo_opengraph_type', '__return_false');
296 - add_filter( 'wpseo_opengraph_desc', '__return_false');
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;
297 435 }
298 436 }
299 437 }
300 438
301 -function wdk_yoast_presentation($presentation) {
302 - global $wp_query;
303 - if(isset($wp_query->post))
304 - if ($wp_query->post->post_type == 'wdk-listing')
305 - {
306 - $wdk_listing_id = $wp_query->post->ID;
307 - if($wdk_listing_id) {
308 - global $Winter_MVC_WDK;
309 - $Winter_MVC_WDK->model('field_m');
310 - $Winter_MVC_WDK->load_helper('listing');
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 +}
311 450
312 - $presentation->open_graph_images = [
313 - [
314 - 'url' => esc_url(wdk_image_src(array('listing_images'=>wdk_field_value('listing_images', $wdk_listing_id)), 'full')),
315 - ]
316 - ];
317 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);
318 458 }
459 +
460 + return $field_value;
319 461 }
320 - return $presentation;
321 462 }
322 -add_filter('wpseo_frontend_presentation', 'wdk_yoast_presentation', 30);
323 463
324 -add_filter( 'wp_kses_allowed_html', 'wpdirectorykit_wpkses_post_iframe', 10, 2 );
325 -function wpdirectorykit_wpkses_post_iframe( $tags, $context ) {
326 - if ( 'post' === $context ) {
327 - $tags['iframe'] = array(
328 - 'src' => true,
329 - 'height' => true,
330 - 'width' => true,
331 - 'frameborder' => true,
332 - 'allowfullscreen' => true,
333 - );
334 - }
335 - return $tags;
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;
336 472 }
337 473
338 -add_action('wdk-membership/dash/homepage/widgets', function() {
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) {
339 522 global $Winter_MVC_WDK;
340 - $Winter_MVC_WDK->model('listing_m');
341 - $total_items = $Winter_MVC_WDK->listing_m->total(array(), TRUE, get_current_user_id());
342 - if(function_exists('wdk_dash_url')){
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 + }
343 601 ?>
344 - <div class="wdk-col-12 wdk-col-md-3">
345 - <a href="<?php echo esc_url(wdk_dash_url('dash_page=listings'));?>" class="wdk-membership-dash-widget">
346 - <span class="wdk-content">
347 - <span class="icon"><span class="dashicons dashicons-location"></span></span>
348 - </span>
349 - <span class="wdk-side">
350 - <span class="title"><?php echo esc_html__('Listings','wpdirectorykit');?></span>
351 - <span class="wdk-count"><?php echo esc_html($total_items);?></span>
352 - </span>
353 - </a>
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 + ?>
354 809 </div>
355 810 <?php
811 +});
812 +
813 +add_action('wp_ajax_wdk_close_popup', function () {
814 + if (!current_user_can('manage_options')) {
815 + wp_die();
356 816 }
357 -},1);
358 817
359 -?>
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 +});