PluginProbe ʕ •ᴥ•ʔ
Advanced Custom Fields: Extended / 0.9.2.7
Advanced Custom Fields: Extended v0.9.2.7
0.9.2.7 0.9.2.6 0.9.2.5 0.8.6 0.8.6.1 0.8.6.3 0.8.6.5 0.8.6.6 0.8.6.7 0.8.6.8 0.8.6.9 0.8.7 0.8.7.1 0.8.7.2 0.8.7.3 0.8.7.4 0.8.7.5 0.8.7.6 0.8.8 0.8.8.1 0.8.8.10 0.8.8.11 0.8.8.2 0.8.8.3 0.8.8.4 0.8.8.5 0.8.8.6 0.8.8.7 0.8.8.8 0.8.8.9 0.8.9 0.8.9.1 0.8.9.2 0.8.9.3 0.8.9.4 0.8.9.5 0.9 0.9.0.1 0.9.0.2 0.9.0.3 0.9.0.4 0.9.0.5 0.9.0.6 0.9.0.7 0.9.0.8 0.9.0.9 0.9.1 0.9.1.1 0.9.2 0.9.2.1 0.9.2.2 0.9.2.3 0.9.2.4 trunk 0.5 0.5.1 0.5.2 0.5.2.1 0.5.2.3 0.5.5 0.5.5.1 0.5.8 0.5.8.1 0.6 0.6.0.1 0.6.0.2 0.6.1 0.6.3 0.6.5 0.6.7 0.6.7.2 0.7 0.7.0.3 0.7.5 0.7.5.5 0.7.8 0.7.9 0.7.9.3 0.7.9.4 0.7.9.9.8 0.7.9.9.9 0.8 0.8.1 0.8.2 0.8.3 0.8.3.1 0.8.4 0.8.4.1 0.8.4.5 0.8.4.6 0.8.5 0.8.5.5
acf-extended / includes / acfe-template-functions.php
acf-extended / includes Last commit date
admin 3 months ago field-groups 3 months ago fields 1 week ago fields-settings 3 months ago forms 3 months ago locations 3 months ago modules 1 week ago screens 3 months ago acfe-deprecated-functions.php 2 years ago acfe-field-functions.php 3 months ago acfe-field-group-functions.php 3 months ago acfe-file-functions.php 1 year ago acfe-form-functions.php 3 months ago acfe-helper-array-functions.php 3 months ago acfe-helper-functions.php 3 months ago acfe-helper-multi-functions.php 3 months ago acfe-helper-string-functions.php 3 months ago acfe-meta-functions.php 3 months ago acfe-post-functions.php 3 months ago acfe-screen-functions.php 3 months ago acfe-template-functions.php 3 months ago acfe-term-functions.php 3 months ago acfe-user-functions.php 3 months ago acfe-wp-functions.php 3 years ago assets.php 3 months ago compatibility-acf-5.8.php 4 months ago compatibility-acf-5.9.php 3 months ago compatibility-acf-6.5.php 3 months ago compatibility-acf-6.8.6.php 1 week ago compatibility.php 3 months ago field-extend.php 4 months ago field.php 4 months ago hooks.php 3 months ago init.php 3 months ago local-meta.php 3 years ago media.php 3 months ago module-acf.php 3 months ago module-db.php 3 months ago module-l10n.php 3 months ago module-legacy.php 3 years ago module-manager.php 4 months ago module-post.php 3 months ago module-posts.php 4 months ago module-upgrades.php 3 years ago module.php 3 months ago multilang.php 3 months ago revisions.php 4 months ago screen.php 3 months ago settings.php 3 months ago template-tags.php 3 months ago third-party.php 3 years ago upgrades.php 3 months ago
acfe-template-functions.php
856 lines
1 <?php
2
3 if(!defined('ABSPATH')){
4 exit;
5 }
6
7 /**
8 * get_flexible
9 *
10 * Helper for the Flexible Content: Dynamic Render
11 *
12 * @param string $selector
13 * @param false $post_id
14 *
15 * @return false|string
16 */
17 if(!function_exists('get_flexible')){
18
19 function get_flexible($selector, $post_id = false){
20
21 // Bail early
22 if(!have_rows($selector, $post_id)){
23 return false;
24 }
25
26 // Vars
27 $flexible = acf_get_field_type('flexible_content');
28
29 ob_start();
30
31 while(have_rows($selector, $post_id)): the_row();
32
33 // Vars
34 $loop = acf_get_loop('active');
35 $field = $loop['field'];
36
37 // Bail early if not Flexible Content
38 if($field['type'] !== 'flexible_content'){
39 break;
40 }
41
42 $loop_i = acf_get_loop('active', 'i');
43 $layout = $flexible->get_layout(get_row_layout(), $field);
44
45 // First row
46 if($loop_i === 0){
47
48 // Global
49 global $is_preview;
50
51 // Vars
52 if(!isset($is_preview)){
53 $is_preview = false;
54 }
55
56 // Render: Global Enqueue
57 acfe_flexible_render_enqueue($field);
58
59 }
60
61 // Render: Layout Enqueue
62 acfe_flexible_render_layout_enqueue($layout, $field);
63
64 // Render: Layout Template
65 acfe_flexible_render_layout_template($layout, $field);
66
67 endwhile;
68
69 return ob_get_clean();
70
71 }
72
73 }
74
75 /**
76 * the_flexible
77 *
78 * Helper for the Flexible Content: Dynamic Render
79 *
80 * @param $selector
81 * @param false $post_id
82 */
83 if(!function_exists('the_flexible')){
84
85 function the_flexible($selector, $post_id = false){
86 echo get_flexible($selector, $post_id);
87 }
88
89 }
90
91 /**
92 * has_flexible
93 *
94 * Helper for the Flexible Content: Dynamic Render
95 *
96 * @param $selector
97 * @param false $post_id
98 *
99 * @return bool
100 */
101 if(!function_exists('has_flexible')){
102
103 function has_flexible($selector, $post_id = false){
104 return have_rows($selector, $post_id);
105 }
106
107 }
108
109 /**
110 * acfe_flexible_render_layout_template
111 *
112 * Find & include the Flexible Content Layouts PHP files
113 *
114 * @param $layout
115 * @param $field
116 */
117 function acfe_flexible_render_layout_template($layout, $field){
118
119 // Global
120 global $is_preview, $col, $post; // allow $post to be used in the template
121 $col = false;
122
123 // Vars
124 $name = $field['_name'];
125 $key = $field['key'];
126 $l_name = $layout['name'];
127
128 // File
129 $file = acfe_get($layout, 'acfe_flexible_render_template');
130
131 // Filters
132 $file = apply_filters("acfe/flexible/render/template", $file, $field, $layout, $is_preview);
133 $file = apply_filters("acfe/flexible/render/template/name={$name}", $file, $field, $layout, $is_preview);
134 $file = apply_filters("acfe/flexible/render/template/key={$key}", $file, $field, $layout, $is_preview);
135 $file = apply_filters("acfe/flexible/render/template/layout={$l_name}", $file, $field, $layout, $is_preview);
136 $file = apply_filters("acfe/flexible/render/template/name={$name}&layout={$l_name}", $file, $field, $layout, $is_preview);
137 $file = apply_filters("acfe/flexible/render/template/key={$key}&layout={$l_name}", $file, $field, $layout, $is_preview);
138
139 // Deprecated
140 $file = apply_filters_deprecated("acfe/flexible/layout/render/template/layout={$l_name}", array($file, $field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/template/layout={$l_name}");
141 $file = apply_filters_deprecated("acfe/flexible/layout/render/template/name={$name}&layout={$l_name}", array($file, $field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/template/name={$name}&layout={$l_name}");
142 $file = apply_filters_deprecated("acfe/flexible/layout/render/template/key={$key}&layout={$l_name}", array($file, $field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/template/key={$key}&layout={$l_name}");
143
144 // Before Template
145 do_action("acfe/flexible/render/before_template", $field, $layout, $is_preview);
146
147 // Check file
148 if(!empty($file)){
149
150 $file_found = acfe_locate_file_path($file);
151
152 if(!empty($file_found)){
153
154 // Front-end
155 if(!$is_preview){
156
157 // Include
158 include($file_found);
159
160 // Preview
161 }else{
162
163 $path = pathinfo($file);
164 $extension = $path['extension'];
165
166 $file_preview = substr($file, 0, -strlen($extension)-1);
167 $file_preview .= '-preview.' . $extension;
168
169 $file_preview = acfe_locate_file_path($file_preview);
170
171 // Include
172 if(!empty($file_preview)){
173
174 include($file_preview);
175
176 }else{
177
178 include($file_found);
179
180 }
181
182 }
183
184 }
185
186 }
187
188 // After Template
189 do_action("acfe/flexible/render/after_template", $field, $layout, $is_preview);
190
191 }
192
193 add_action('acfe/flexible/render/before_template', '_acfe_flexible_render_layout_template_before', 10, 3);
194 function _acfe_flexible_render_layout_template_before($field, $layout, $is_preview){
195
196 // vars
197 $name = $field['_name'];
198 $key = $field['key'];
199 $l_name = $layout['name'];
200
201 // variations
202 do_action("acfe/flexible/render/before_template/name={$name}", $field, $layout, $is_preview);
203 do_action("acfe/flexible/render/before_template/key={$key}", $field, $layout, $is_preview);
204 do_action("acfe/flexible/render/before_template/layout={$l_name}", $field, $layout, $is_preview);
205 do_action("acfe/flexible/render/before_template/name={$name}&layout={$l_name}", $field, $layout, $is_preview);
206 do_action("acfe/flexible/render/before_template/key={$key}&layout={$l_name}", $field, $layout, $is_preview);
207
208 // deprecated
209 do_action_deprecated("acfe/flexible/layout/render/before_template/layout={$l_name}", array($field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/before_template/layout={$l_name}");
210 do_action_deprecated("acfe/flexible/layout/render/before_template/name={$name}&layout={$l_name}", array($field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/before_template/name={$name}&layout={$l_name}");
211 do_action_deprecated("acfe/flexible/layout/render/before_template/key={$key}&layout={$l_name}", array($field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/before_template/key={$key}&layout={$l_name}");
212
213 }
214
215 add_action('acfe/flexible/render/after_template', '_acfe_flexible_render_layout_template_after', 10, 3);
216 function _acfe_flexible_render_layout_template_after($field, $layout, $is_preview){
217
218 // vars
219 $name = $field['_name'];
220 $key = $field['key'];
221 $l_name = $layout['name'];
222
223 // variations
224 do_action("acfe/flexible/render/after_template/name={$name}", $field, $layout, $is_preview);
225 do_action("acfe/flexible/render/after_template/key={$key}", $field, $layout, $is_preview);
226 do_action("acfe/flexible/render/after_template/layout={$l_name}", $field, $layout, $is_preview);
227 do_action("acfe/flexible/render/after_template/name={$name}&layout={$l_name}", $field, $layout, $is_preview);
228 do_action("acfe/flexible/render/after_template/key={$key}&layout={$l_name}", $field, $layout, $is_preview);
229
230 // deprecated
231 do_action_deprecated("acfe/flexible/layout/render/after_template/layout={$l_name}", array($field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/after_template/layout={$l_name}");
232 do_action_deprecated("acfe/flexible/layout/render/after_template/name={$name}&layout={$l_name}", array($field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/after_template/name={$name}&layout={$l_name}");
233 do_action_deprecated("acfe/flexible/layout/render/after_template/key={$key}&layout={$l_name}", array($field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/after_template/key={$key}&layout={$l_name}");
234
235 }
236
237
238 /**
239 * acfe_flexible_render_enqueue
240 *
241 * Enqueue global scripts & styles for the Flexible Content
242 *
243 * @param $field
244 */
245 function acfe_flexible_render_enqueue($field){
246
247 // global
248 global $is_preview;
249
250 // actions
251 do_action("acfe/flexible/enqueue", $field, $is_preview);
252 do_action("acfe/flexible/enqueue/name={$field['_name']}", $field, $is_preview);
253 do_action("acfe/flexible/enqueue/key={$field['key']}", $field, $is_preview);
254
255 }
256
257
258 /**
259 * acfe_flexible_render_layout_enqueue
260 *
261 * Find & Enqueue Scripts & Styles files for the Flexible Content
262 *
263 * @param $layout
264 * @param $field
265 */
266 function acfe_flexible_render_layout_enqueue($layout, $field){
267
268 // Global
269 global $is_preview;
270
271 // Vars
272 $name = $field['_name'];
273 $key = $field['key'];
274 $l_name = $layout['name'];
275 $handle = acf_slugify($name) . '-layout-' . acf_slugify($l_name);
276
277 // Files
278 $style = acfe_get($layout, 'acfe_flexible_render_style');
279 $script = acfe_get($layout, 'acfe_flexible_render_script');
280
281 /**
282 * Actions
283 */
284 do_action("acfe/flexible/enqueue/layout={$l_name}", $field, $layout, $is_preview);
285 do_action("acfe/flexible/enqueue/name={$name}&layout={$l_name}", $field, $layout, $is_preview);
286 do_action("acfe/flexible/enqueue/key={$key}&layout={$l_name}", $field, $layout, $is_preview);
287
288 // Deprecated
289 do_action_deprecated("acfe/flexible/layout/enqueue/layout={$l_name}", array($field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/enqueue/layout={$l_name}");
290 do_action_deprecated("acfe/flexible/layout/enqueue/name={$name}&layout={$l_name}", array($field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/enqueue/name={$name}&layout={$l_name}");
291 do_action_deprecated("acfe/flexible/layout/enqueue/key={$key}&layout={$l_name}", array($field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/enqueue/key={$key}&layout={$l_name}");
292
293 /**
294 * Style
295 */
296 $style = apply_filters("acfe/flexible/render/style", $style, $field, $layout, $is_preview);
297 $style = apply_filters("acfe/flexible/render/style/name={$name}", $style, $field, $layout, $is_preview);
298 $style = apply_filters("acfe/flexible/render/style/key={$key}", $style, $field, $layout, $is_preview);
299 $style = apply_filters("acfe/flexible/render/style/layout={$l_name}", $style, $field, $layout, $is_preview);
300 $style = apply_filters("acfe/flexible/render/style/name={$name}&layout={$l_name}", $style, $field, $layout, $is_preview);
301 $style = apply_filters("acfe/flexible/render/style/key={$key}&layout={$l_name}", $style, $field, $layout, $is_preview);
302
303 // Deprecated
304 $style = apply_filters_deprecated("acfe/flexible/layout/render/style/layout={$l_name}", array($style, $field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/style/layout={$l_name}");
305 $style = apply_filters_deprecated("acfe/flexible/layout/render/style/name={$name}&layout={$l_name}", array($style, $field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/style/name={$name}&layout={$l_name}");
306 $style = apply_filters_deprecated("acfe/flexible/layout/render/style/key={$key}&layout={$l_name}", array($style, $field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/style/key={$key}&layout={$l_name}");
307
308 // Check
309 if(!empty($style)){
310
311 // convert to array
312 if(is_string($style)){
313 $style = array(
314 'src' => $style,
315 );
316 }
317
318 // defaults args
319 $style = wp_parse_args($style, array(
320 'handle' => $handle,
321 'src' => '',
322 'deps' => array(),
323 'ver' => false,
324 'media' => 'all',
325 ));
326
327 // src url starts with current domain
328 // remove it and let acfe_locate_file_url() handle it
329 if(stripos($style['src'], home_url()) === 0){
330 $style['src'] = str_replace(home_url(), '', $style['src']);
331 }
332
333 // clone for front-end
334 $style_front = $style;
335
336 // locate src
337 $style_front['src'] = acfe_locate_file_url($style_front['src']);
338
339 // enqueue front-end + preview
340 if(!empty($style_front['src'])){
341 wp_enqueue_style($style_front['handle'], $style_front['src'], $style_front['deps'], $style_front['ver'], $style_front['media']);
342 }
343
344 // preview mode
345 // make sure the src is not a distant url
346 if($is_preview && stripos($style['src'], 'http://') !== 0 && stripos($style['src'], 'https://') !== 0 && stripos($style['src'], '//') !== 0){
347
348 // clone for preview
349 $style_preview = $style;
350
351 // retrieve extension
352 $path = pathinfo($style_preview['src']);
353 $extension = $path['extension'];
354
355 // append "-preview" to src
356 $style_preview['src'] = substr($style_preview['src'], 0, -strlen($extension)-1);
357 $style_preview['src'] .= '-preview.' . $extension;
358
359 // locate src
360 $style_preview['src'] = acfe_locate_file_url($style_preview['src']);
361
362 // append "-preview" to handle
363 $style_preview['handle'] = "{$style_preview['handle']}-preview";
364
365 // enqueue preview
366 if(!empty($style_preview['src'])){
367 wp_enqueue_style($style_preview['handle'], $style_preview['src'], $style_preview['deps'], $style_preview['ver'], $style_preview['media']);
368 }
369
370 }
371
372 }
373
374 /**
375 * Script
376 */
377 $script = apply_filters("acfe/flexible/render/script", $script, $field, $layout, $is_preview);
378 $script = apply_filters("acfe/flexible/render/script/name={$name}", $script, $field, $layout, $is_preview);
379 $script = apply_filters("acfe/flexible/render/script/key={$key}", $script, $field, $layout, $is_preview);
380 $script = apply_filters("acfe/flexible/render/script/layout={$l_name}", $script, $field, $layout, $is_preview);
381 $script = apply_filters("acfe/flexible/render/script/name={$name}&layout={$l_name}", $script, $field, $layout, $is_preview);
382 $script = apply_filters("acfe/flexible/render/script/key={$key}&layout={$l_name}", $script, $field, $layout, $is_preview);
383
384 // Deprecated
385 $script = apply_filters_deprecated("acfe/flexible/layout/render/script/layout={$l_name}", array($script, $field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/script/layout={$l_name}");
386 $script = apply_filters_deprecated("acfe/flexible/layout/render/script/name={$name}&layout={$l_name}", array($script, $field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/script/name={$name}&layout={$l_name}");
387 $script = apply_filters_deprecated("acfe/flexible/layout/render/script/key={$key}&layout={$l_name}", array($script, $field, $layout, $is_preview), '0.8.6.7', "acfe/flexible/render/script/key={$key}&layout={$l_name}");
388
389 // Check
390 if(!empty($script)){
391
392 // convert to array
393 if(is_string($script)){
394 $script = array(
395 'src' => $script,
396 );
397 }
398
399 // defaults args
400 $script = wp_parse_args($script, array(
401 'handle' => $handle,
402 'src' => '',
403 'deps' => array(),
404 'ver' => false,
405 'args' => true,
406 ));
407
408 // src url starts with current domain
409 // remove it and let acfe_locate_file_url() handle it
410 if(stripos($script['src'], home_url()) === 0){
411 $script['src'] = str_replace(home_url(), '', $script['src']);
412 }
413
414 // clone for front-end
415 $script_front = $script;
416
417 // locate
418 $script_front['src'] = acfe_locate_file_url($script_front['src']);
419
420 // front-end with distant script
421 if(!$is_preview || (stripos($script['src'], 'http://') === 0 || stripos($script['src'], 'https://') === 0 || stripos($script['src'], '//') === 0)){
422
423 if(!empty($script_front['src'])){
424 wp_enqueue_script($script_front['handle'], $script_front['src'], $script_front['deps'], $script_front['ver'], $script_front['args']);
425 }
426
427 // front-end/preview with local script
428 }else{
429
430 // clone for preview
431 $script_preview = $script;
432
433 // retrieve extension
434 $path = pathinfo($script_preview['src']);
435 $extension = $path['extension'];
436
437 // append "-preview" to src
438 $script_preview['src'] = substr($script_preview['src'], 0, -strlen($extension)-1);
439 $script_preview['src'] .= '-preview.' . $extension;
440
441 // locate src
442 $script_preview['src'] = acfe_locate_file_url($script_preview['src']);
443
444 // append "-preview" to handle
445 $script_preview['handle'] = "{$script_preview['handle']}-preview";
446
447 // enqueue preview
448 if(!empty($script_preview['src'])){
449 wp_enqueue_script($script_preview['handle'], $script_preview['src'], $script_preview['deps'], $script_preview['ver'], $script_preview['args']);
450
451 // enqueue front-end
452 }elseif(!empty($script_front['src'])){
453 wp_enqueue_script($script_front['handle'], $script_front['src'], $script_front['deps'], $script_front['ver'], $script_front['args']);
454 }
455
456 }
457
458 }
459
460 }
461
462 /**
463 * have_settings
464 *
465 * While loop function for the Flexible Content: Settings Modal feature
466 *
467 * @return bool
468 */
469 if(!function_exists('have_settings')){
470
471 function have_settings(){
472 return have_rows('layout_settings');
473 }
474
475 }
476
477 /**
478 * the_setting
479 *
480 * Setup data for the Flexible Content: Settings Modal loop
481 *
482 * @return false|mixed
483 */
484 if(!function_exists('the_setting')){
485
486 function the_setting(){
487 return the_row();
488 }
489
490 }
491
492 /**
493 * have_archive
494 *
495 * While loop function for the Dynamic Post Type: Archive Page feature
496 *
497 * @param false $_post_type
498 *
499 * @return bool
500 */
501 if(!function_exists('have_archive')){
502
503 function have_archive($post_type = false){
504
505 global $acfe_archive_i, $acfe_archive_post_type;
506
507 $acfe_archive_post_type = false;
508
509 if(!isset($acfe_archive_i) || $acfe_archive_i === 0){
510
511 $acfe_archive_i = 0;
512
513 if(!$post_type){
514
515 // try get_post_type()
516 $post_type = get_post_type();
517
518 if(!$post_type){
519
520 // try get_queried_object()
521 $object = get_queried_object();
522
523 if(is_a($object, 'WP_Post_Type') && property_exists($object, 'has_archive')){
524 $post_type = $object->name;
525 }
526
527 }
528
529 }
530
531 if(!$post_type){
532 return false;
533 }
534
535 if(!post_type_exists($post_type)){
536 return false;
537 }
538
539 $post_type_object = get_post_type_object($post_type);
540
541 if(empty($post_type_object)){
542 return false;
543 }
544
545 if(!acfe_get($post_type_object, 'acfe_admin_archive')){
546 return false;
547 }
548
549 $acfe_archive_post_type = $post_type;
550
551 return true;
552
553 }
554
555 remove_filter('acf/pre_load_post_id', 'acfe_the_archive_post_id');
556
557 return false;
558
559 }
560
561 }
562
563 /**
564 * the_archive
565 *
566 * Setup data for the Dynamic Post Type: Archive Page feature
567 */
568 if(!function_exists('the_archive')){
569
570 function the_archive(){
571
572 global $acfe_archive_i;
573
574 add_filter('acf/pre_load_post_id', 'acfe_the_archive_post_id', 10, 2);
575
576 $acfe_archive_i++;
577
578 }
579
580 }
581
582 /**
583 * acfe_the_archive_post_id
584 *
585 * Dynamic Post Type: Archive Page helper
586 *
587 * @param $null
588 * @param $post_id
589 *
590 * @return mixed|void
591 */
592 function acfe_the_archive_post_id($null, $post_id){
593
594 if($post_id !== false){
595 return $null;
596 }
597
598 global $acfe_archive_post_type;
599
600 if(empty($acfe_archive_post_type)){
601 return $null;
602 }
603
604 return acf_get_valid_post_id("{$acfe_archive_post_type}_archive");
605
606 }
607
608
609 /**
610 * acfe_get_post_id
611 *
612 * Universal way to always retrieve the correct ACF Post ID on front-end, back-end and ajax
613 *
614 * Format:
615 *
616 * raw: 12 | term_24 | user_56 | my-options
617 * id: 12 | 24 | 56 | my-options
618 * type: post | term | user | options
619 * array: array('id' => 12, 'type' => 'post')
620 *
621 * @param string $format - raw, id, type or array
622 *
623 * @return mixed|void
624 */
625 function acfe_get_post_id($format = 'raw'){
626
627 // deprecated format: true/false
628 $format = $format === true ? 'raw' : $format;
629 $format = $format === false ? 'id' : $format;
630
631 // vars
632 $is_ajax = wp_doing_ajax();
633 $is_front = !is_admin() && !$is_ajax;
634 $is_admin = is_admin() && !$is_ajax;
635
636 // ajax request
637 if($is_ajax){
638
639 // passed in acf_form_data()
640 // passed during acf/save_post
641 $post_id = acf_get_form_data('post_id');
642
643 // form submission
644 if(!$post_id){
645 $post_id = acf_maybe_get_POST('_acf_post_id', 0);
646 }
647
648 // passed in acf_form_data()
649 // passed in acf.data > acf.prepareForAjax
650 if(!$post_id){
651 $post_id = acf_maybe_get_POST('post_id', 0);
652 }
653
654 // admin request
655 }elseif($is_admin){
656
657 // passed in acf_form_data()
658 // passed during acf/save_post & acf/validate_save_post
659 $post_id = acf_get_form_data('post_id');
660
661 // form submission
662 if(!$post_id){
663 $post_id = acf_maybe_get_POST('_acf_post_id', 0);
664 }
665
666 // post url param
667 if(!$post_id){
668 $post_id = isset($_REQUEST['post']) ? absint($_REQUEST['post']) : 0;
669 }
670
671 // acf block type request
672 if(!$post_id){
673 $post_id = isset($_REQUEST['post_id']) ? absint($_REQUEST['post_id']) : 0;
674 }
675
676 // url param
677 if(!$post_id){
678 $post_id = isset($_REQUEST['user_id']) ? 'user_' . absint($_REQUEST['user_id']) : 0;
679 }
680
681 // profile
682 if(!$post_id){
683 global $pagenow, $user_ID;
684 $post_id = $pagenow === 'profile.php' && $user_ID !== null ? 'user_' . absint($user_ID) : 0;
685 }
686
687 // term url param
688 if(!$post_id){
689 $post_id = isset($_REQUEST['tag_ID']) ? 'term_' . absint($_REQUEST['tag_ID']) : 0;
690 }
691
692 // options page
693 // must be before post type list because post type archive is on edit.php
694 if(!$post_id){
695
696 global $plugin_page;
697 if(isset($plugin_page)){
698 $page = acf_get_options_page($plugin_page);
699 if($page){
700 $post_id = $page['post_id'];
701 }
702 }
703
704 }
705
706 // post type list
707 if(!$post_id){
708 global $pagenow, $typenow;
709 $post_id = $pagenow === 'edit.php' ? "{$typenow}_options" : 0;
710 }
711
712 // term list
713 if(!$post_id){
714 global $pagenow, $taxnow;
715 $post_id = $pagenow === 'edit-tags.php' ? "tax_{$taxnow}_options" : 0;
716 }
717
718 // user list
719 if(!$post_id){
720 global $pagenow;
721 $post_id = $pagenow === 'users.php' ? "user_options" : 0;
722 }
723
724 // attachment list
725 if(!$post_id){
726 global $pagenow;
727 $post_id = $pagenow === 'upload.php' ? "attachment_options" : 0;
728 }
729
730 // settings
731 if(!$post_id && function_exists('get_current_screen')){
732
733 $setting_pages = array('options-general', 'options-writing', 'options-reading', 'options-discussion', 'options-media', 'options-permalink');
734 if(in_array(get_current_screen()->id, $setting_pages)){
735 $post_id = get_current_screen()->id;
736 }
737 }
738
739 // common post id
740 if(!$post_id){
741 $post_id = (int) get_the_ID();
742 }
743
744 // front-end request
745 }elseif($is_front){
746
747 // default
748 $post_id = 0;
749
750 // passed in acf_form_data()
751 // passed during acf/save_post & acf/validate_save_post
752 if(doing_action('acf/save_post') || doing_action('acf/validate_save_post')){
753 $post_id = acf_get_form_data('post_id');
754 }
755
756 // common post id (within a loop)
757 if(!$post_id){
758 if(in_the_loop() || is_singular()){
759 $post_id = (int) get_the_ID();
760 }
761 }
762
763 // get queries object
764 if(!$post_id){
765
766 $object = get_queried_object();
767
768 if(is_object($object)){
769
770 // post/page object
771 if(isset($object->post_type, $object->ID)){
772
773 $post_id = (int) $object->ID;
774
775 // post type archive object
776 }elseif(isset($object->hierarchical, $object->name, $object->acfe_admin_archive)){
777
778 $post_id = "{$object->name}_archive";
779
780 // user object
781 }elseif(isset($object->roles, $object->ID)){
782
783 $post_id = "user_{$object->ID}";
784
785 // term object
786 }elseif(isset($object->taxonomy, $object->term_id)){
787
788 $post_id = "term_{$object->term_id}";
789
790 // comment object
791 }elseif(isset($object->comment_ID)){
792
793 $post_id = "comment_{$object->comment_ID}";
794
795 }
796
797 }
798
799 }
800
801 // passed in acf_form_data()
802 // passed during acf/save_post & acf/validate_save_post
803 if(!$post_id){
804 $post_id = acf_get_form_data('post_id');
805 }
806
807 // fallback common post id
808 if(!$post_id){
809 $post_id = (int) get_the_ID();
810 }
811
812 }
813
814 // default
815 if(!$post_id){
816 $post_id = 0;
817 }
818
819 // allow for option == options
820 if($post_id === 'option'){
821 $post_id = 'options';
822 }
823
824 // append language code
825 if($post_id == 'options'){
826 $dl = acf_get_setting('default_language');
827 $cl = acf_get_setting('current_language');
828
829 if($cl && $cl !== $dl){
830 $post_id .= '_' . $cl;
831 }
832 }
833
834 // filter for 3rd party
835 $post_id = apply_filters('acf/validate_post_id', $post_id, $post_id);
836
837 // decoded post id
838 $decoded = acf_decode_post_id($post_id);
839
840 // return id
841 if($format === 'id'){
842 return $decoded['id'];
843
844 // return type
845 }elseif($format === 'type'){
846 return $decoded['type'];
847
848 // return array
849 }elseif($format === 'array'){
850 return $decoded;
851 }
852
853 // return raw
854 return $post_id;
855
856 }