PluginProbe
Advanced Custom Fields: Extended / 0.8.7.4
Advanced Custom Fields: Extended v0.8.7.4
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 All 92 releases
acf-extended / includes / modules / form / admin.php
admin.php
3,811 lines 133.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if(!defined('ABSPATH'))
4 exit;
5
6 // Register notices store.
7 acf_register_store('acfe/form')->prop('multisite', true);
8
9 if(!class_exists('acfe_form')):
10
11 class acfe_form{
12
13 public $post_type = '';
14 public $fields_groups = array();
15
16 public $posts = array();
17 public $users = array();
18
19 public $query_vars = array();
20
21 function __construct(){
22
23 // Post Type
24 $this->post_type = 'acfe-form';
25
26 // Admin
27 add_action('init', array($this, 'init'));
28 add_action('current_screen', array($this, 'current_screen'));
29 add_filter('post_row_actions', array($this, 'row_actions'), 10, 2);
30
31 // ACF
32 add_filter('acf/get_post_types', array($this, 'filter_post_type'), 10, 2);
33 add_filter('acf/pre_load_post_id', array($this, 'validate_post_id'), 10, 2);
34
35 // Fields
36 add_filter('acf/load_value/name=acfe_form_custom_html_enable', array($this, 'prepare_custom_html'), 10, 3);
37 add_filter('acf/prepare_field/name=acfe_form_actions', array($this, 'prepare_actions'));
38 add_filter('acf/prepare_field/name=acfe_form_field_groups', array($this, 'field_groups_choices'));
39
40 // Format values
41 add_filter('acfe/form/format_value/type=post_object', array($this, 'format_value_post_object'), 5, 4);
42 add_filter('acfe/form/format_value/type=relationship', array($this, 'format_value_post_object'), 5, 4);
43 add_filter('acfe/form/format_value/type=user', array($this, 'format_value_user'), 5, 4);
44 add_filter('acfe/form/format_value/type=taxonomy', array($this, 'format_value_taxonomy'), 5, 4);
45 add_filter('acfe/form/format_value/type=image', array($this, 'format_value_file'), 5, 4);
46 add_filter('acfe/form/format_value/type=file', array($this, 'format_value_file'), 5, 4);
47 add_filter('acfe/form/format_value/type=select', array($this, 'format_value_select'), 5, 4);
48 add_filter('acfe/form/format_value/type=checkbox', array($this, 'format_value_select'), 5, 4);
49 add_filter('acfe/form/format_value/type=radio', array($this, 'format_value_select'), 5, 4);
50 add_filter('acfe/form/format_value/type=google_map', array($this, 'format_value_google_map'), 5, 4);
51
52 add_action('acf/render_field/name=acfe_form_validation_advanced_field_validation', array($this, 'doc_validation_field'));
53 add_action('acf/render_field/name=acfe_form_validation_advanced_form_validation', array($this, 'doc_validation_form'));
54 add_action('acf/render_field/name=acfe_form_submission_advanced_submission_php', array($this, 'doc_submission_php'));
55 add_action('acf/render_field/name=acfe_form_submission_advanced_submission_js', array($this, 'doc_submission_js'));
56
57 add_action('acf/render_field/name=acfe_form_cheatsheet_field', array($this, 'doc_field'));
58 add_action('acf/render_field/name=acfe_form_cheatsheet_fields', array($this, 'doc_fields'));
59 add_action('acf/render_field/name=acfe_form_cheatsheet_get_field', array($this, 'doc_get_field'));
60 add_action('acf/render_field/name=acfe_form_cheatsheet_get_option', array($this, 'doc_get_option'));
61 add_action('acf/render_field/name=acfe_form_cheatsheet_query_var', array($this, 'doc_query_var'));
62 add_action('acf/render_field/name=acfe_form_cheatsheet_request', array($this, 'doc_request'));
63 add_action('acf/render_field/name=acfe_form_cheatsheet_current_post', array($this, 'doc_current_post'));
64 add_action('acf/render_field/name=acfe_form_cheatsheet_current_term', array($this, 'doc_current_term'));
65 add_action('acf/render_field/name=acfe_form_cheatsheet_current_user', array($this, 'doc_current_user'));
66 add_action('acf/render_field/name=acfe_form_cheatsheet_current_author', array($this, 'doc_current_author'));
67 add_action('acf/render_field/name=acfe_form_cheatsheet_current_form', array($this, 'doc_current_form'));
68
69 // Ajax
70 /*
71 add_action('wp_ajax_acf/fields/select/query', array($this, 'ajax_query_post'), 5);
72 add_action('wp_ajax_nopriv_acf/fields/select/query', array($this, 'ajax_query_post'), 5);
73
74 add_action('wp_ajax_acf/fields/select/query', array($this, 'ajax_query_user'), 5);
75 add_action('wp_ajax_nopriv_acf/fields/select/query', array($this, 'ajax_query_user'), 5);
76
77 add_action('wp_ajax_acf/fields/select/query', array($this, 'ajax_query_term'), 5);
78 add_action('wp_ajax_nopriv_acf/fields/select/query', array($this, 'ajax_query_term'), 5);
79 */
80 }
81
82 function init(){
83
84 // Post Type
85 register_post_type($this->post_type, array(
86 'label' => __('Forms', 'acf'),
87 'description' => __('Forms', 'acf'),
88 'labels' => array(
89 'name' => __('Forms', 'acf'),
90 'singular_name' => __('Form', 'acf'),
91 'menu_name' => __('Forms', 'acf'),
92 'edit_item' => 'Edit Form',
93 'add_new_item' => 'New Form',
94 ),
95 'supports' => array('title'),
96 'hierarchical' => false,
97 'public' => false,
98 'show_ui' => true,
99 'show_in_menu' => 'edit.php?post_type=acf-field-group',
100 'menu_icon' => 'dashicons-feedback',
101 'show_in_admin_bar' => false,
102 'show_in_nav_menus' => false,
103 'can_export' => false,
104 'has_archive' => false,
105 'rewrite' => false,
106 'exclude_from_search' => true,
107 'publicly_queryable' => false,
108 'capabilities' => array(
109 'publish_posts' => acf_get_setting('capability'),
110 'edit_posts' => acf_get_setting('capability'),
111 'edit_others_posts' => acf_get_setting('capability'),
112 'delete_posts' => acf_get_setting('capability'),
113 'delete_others_posts' => acf_get_setting('capability'),
114 'read_private_posts' => acf_get_setting('capability'),
115 'edit_post' => acf_get_setting('capability'),
116 'delete_post' => acf_get_setting('capability'),
117 'read_post' => acf_get_setting('capability'),
118 ),
119 'acfe_admin_ppp' => 999,
120 'acfe_admin_orderby' => 'title',
121 'acfe_admin_order' => 'ASC',
122 ));
123
124 }
125
126 function current_screen(){
127
128 global $typenow;
129
130 if($typenow !== $this->post_type)
131 return;
132
133 // customize post_status
134 global $wp_post_statuses;
135
136 // modify publish post status
137 $wp_post_statuses['publish']->label_count = _n_noop('Active <span class="count">(%s)</span>', 'Active <span class="count">(%s)</span>', 'acf');
138
139 add_action('load-edit.php', array($this, 'load_list'));
140 add_action('load-post.php', array($this, 'load_post'));
141 add_action('load-post-new.php', array($this, 'load_post_new'));
142
143 add_action('load-post.php', array($this, 'load'));
144 add_action('load-post-new.php', array($this, 'load'));
145
146 }
147
148 function load_list(){
149
150 // Columns
151 add_filter('manage_edit-' . $this->post_type . '_columns', array($this, 'admin_columns'));
152 add_action('manage_' . $this->post_type . '_posts_custom_column', array($this, 'admin_columns_html'), 10, 2);
153
154 }
155
156 function load_post(){
157
158 // vars
159 $this->fields_groups = $this->get_fields_groups();
160
161 add_action('add_meta_boxes', array($this, 'add_meta_boxes'));
162
163 // Misc actions
164 add_action('post_submitbox_misc_actions', array($this, 'misc_actions'));
165
166 // Actions
167 if(isset($_REQUEST['post']) && !empty($_REQUEST['post'])){
168
169 $form_id = $_REQUEST['post'];
170
171 if(have_rows('acfe_form_actions', $form_id)):
172
173 while(have_rows('acfe_form_actions', $form_id)): the_row();
174
175 $action = get_row_layout();
176
177 // Custom Action
178 if($action === 'custom')
179 continue;
180
181 $alias = get_sub_field('acfe_form_custom_alias');
182
183 $action_label = '';
184 $action_type = '';
185
186 if($action === 'post'){
187
188 $action_label = 'Post';
189
190 $post_action = get_sub_field('acfe_form_post_action');
191
192 if($post_action === 'insert_post'){
193
194 $action_type = 'Create Post';
195
196 }elseif($post_action === 'update_post'){
197
198 $action_type = 'Update Post';
199
200 }
201
202
203 }elseif($action === 'term'){
204
205 $action_label = 'Term';
206
207 $term_action = get_sub_field('acfe_form_term_action');
208
209 if($term_action === 'insert_term'){
210
211 $action_type = 'Create Term';
212
213 }elseif($term_action === 'update_term'){
214
215 $action_type = 'Update Term';
216
217 }
218
219 }elseif($action === 'user'){
220
221 $action_label = 'User';
222
223 $term_action = get_sub_field('acfe_form_user_action');
224
225 if($term_action === 'insert_user'){
226
227 $action_type = 'Create User';
228
229 }elseif($term_action === 'update_user'){
230
231 $action_type = 'Update User';
232
233 }elseif($term_action === 'log_user'){
234
235 $action_type = 'Log User';
236
237 }
238
239 }elseif($action === 'email'){
240
241 $action_label = 'E-mail';
242 $action_type = 'Send';
243
244 }
245
246 if(empty($alias)){
247
248 $alias = acfe_form_unique_action_id(array('name' => get_field('acfe_form_name', $form_id)), $action);
249
250 }
251
252 $this->query_vars[] = array(
253 'action' => $action,
254 'action_label' => $action_label,
255 'action_type' => $action_type,
256 'alias' => $alias
257 );
258
259 endwhile;
260 endif;
261
262 }
263
264 }
265
266 function load_post_new(){
267
268 /**
269 * Submenu Highlight
270 */
271 add_filter('submenu_file', function(){
272
273 return 'edit.php?post_type=acfe-form';
274
275 });
276
277 }
278
279 function load(){
280
281 // Save Post
282 add_action('acf/save_post', array($this, 'save_form'), 20);
283
284 // Metaboxes
285 remove_meta_box('slugdiv', $this->post_type, 'normal');
286
287 // Footer
288 add_action('admin_footer', array($this, 'load_footer'));
289
290 }
291
292 function misc_actions($post){
293
294 $name = get_field('acfe_form_name', $post->ID);
295
296 ?>
297 <div class="misc-pub-section misc-pub-acfe-field-group-export" style="padding-top:2px;">
298 <span style="font-size:17px;color: #82878c;line-height: 1.3;width: 20px;margin-right: 2px;" class="dashicons dashicons-editor-code"></span> Export: <a href="<?php echo admin_url('edit.php?post_type=acf-field-group&page=acf-tools&tool=acfe_tool_form_export&action=json&keys=' . $name); ?>">Json</a>
299 </div>
300 <?php
301
302 }
303
304 function load_footer(){
305 ?>
306 <script type="text/javascript">
307 (function($){
308
309 if(typeof acf === 'undefined')
310 return;
311
312 $('#post').submit(function(e){
313
314 // vars
315 var $title = $('#titlewrap #title');
316
317 // empty
318 if(!$title.val()){
319
320 // prevent default
321 e.preventDefault();
322
323 // alert
324 alert('Form title is required.');
325
326 // focus
327 $title.focus();
328
329 }
330
331 });
332
333 })(jQuery);
334 </script>
335 <?php
336 }
337
338 function filter_post_type($post_types, $args){
339
340 if(empty($post_types))
341 return $post_types;
342
343 foreach($post_types as $k => $post_type){
344
345 if($post_type !== $this->post_type)
346 continue;
347
348 unset($post_types[$k]);
349
350 }
351
352 return $post_types;
353
354 }
355
356 function row_actions($actions, $post){
357
358 if($post->post_type !== $this->post_type || $post->post_status !== 'publish')
359 return $actions;
360
361 $post_id = $post->ID;
362 $name = get_field('acfe_form_name', $post_id);
363
364 $actions['acfe_form_export_json'] = '<a href="' . admin_url('edit.php?post_type=acf-field-group&page=acf-tools&tool=acfe_tool_form_export&action=json&keys=' . $name) . '">' . __('Json') . '</a>';
365
366 return $actions;
367
368 }
369
370 function get_fields_groups($form_id = false){
371
372 if(!$form_id)
373 $form_id = get_the_ID();
374
375 if(!$form_id && isset($_REQUEST['post']))
376 $form_id = $_REQUEST['post'];
377
378 if(!$form_id)
379 return false;
380
381 $return = array();
382
383 // Field Groups
384 $field_groups = get_field('acfe_form_field_groups', $form_id);
385
386 if(!empty($field_groups)){
387
388 foreach($field_groups as $field_group_key){
389
390 $field_group = acf_get_field_group($field_group_key);
391 if(!$field_group)
392 continue;
393
394 $field_group['fields'] = acf_get_fields($field_group);
395
396 $return[] = $field_group;
397
398 }
399
400 }
401
402 // return
403 return $return;
404
405 }
406
407 function save_form($post_id){
408
409 // Get Post
410 $name = get_field('acfe_form_name', $post_id);
411
412 // Update post
413 wp_update_post(array(
414 'ID' => $post_id,
415 'post_name' => $name,
416 ));
417
418 $new_name = get_post_field('post_name', $post_id);
419
420 if($new_name !== $name)
421 update_field('acfe_form_name', $new_name, $post_id);
422
423 }
424
425 function add_meta_boxes(){
426
427 // Add Instructions
428 add_meta_box(
429
430 // ID
431 'acfe-form-integration',
432
433 // Title
434 'Integration',
435
436 // Render
437 array($this, 'render_form_integration_meta_box'),
438
439 // Screen
440 $this->post_type,
441
442 // Position
443 'side',
444
445 // Priority
446 'core'
447
448 );
449
450 $data = $this->fields_groups;
451
452 if(!empty($data)){
453
454 add_meta_box(
455
456 // ID
457 'acfe-form-details',
458
459 // Title
460 __('Fields', 'acf'),
461
462 // Render
463 array($this, 'render_form_details_meta_box'),
464
465 // Screen
466 $this->post_type,
467
468 // Position
469 'normal',
470
471 // Priority
472 'default'
473
474 );
475
476 }
477
478 }
479
480 function render_form_integration_meta_box($post){
481
482 $form_id = $post->ID;
483 $form_name = get_field('acfe_form_name', $form_id);
484
485 ?>
486
487 <div class="acf-field">
488
489 <div class="acf-label">
490 <label>Shortcodes:</label>
491 </div>
492
493 <div class="acf-input">
494
495 <code>[acfe_form ID="<?php echo $form_id; ?>"]</code><br /><br />
496 <code>[acfe_form name="<?php echo $form_name; ?>"]</code>
497
498 </div>
499
500 </div>
501
502 <div class="acf-field">
503
504 <div class="acf-label">
505 <label>PHP code:</label>
506 </div>
507
508 <div class="acf-input">
509
510 <pre>&lt;?php get_header(); ?&gt;
511
512 &lt;!-- <?php echo get_the_title($form_id); ?> --&gt;
513 &lt;?php acfe_form(&apos;<?php echo $form_name; ?>&apos;); ?&gt;
514
515 &lt;?php get_footer(); ?&gt;</pre>
516
517 </div>
518
519 </div>
520
521 <script type="text/javascript">
522 if(typeof acf !== 'undefined'){
523
524 acf.newPostbox(<?php echo wp_json_encode(array(
525 'id' => 'acfe-form-integration',
526 'key' => '',
527 'style' => 'default',
528 'label' => 'top',
529 'edit' => false
530 )); ?>);
531
532 }
533 </script>
534 <?php
535 }
536
537 function render_form_details_meta_box($array, $data){
538
539 foreach($this->fields_groups as $field_group){ ?>
540
541 <?php
542 //acf_disable_filters();
543
544 $field_group_db = acf_get_field_group($field_group['key']);
545
546 //acf_enable_filters();
547 ?>
548
549 <div class="acf-field">
550
551 <div class="acf-label">
552 <label><a href="<?php echo admin_url('post.php?post=' . $field_group_db['ID'] . '&action=edit'); ?>"><?php echo $field_group['title']; ?></a></label>
553 <p class="description"><?php echo $field_group['key']; ?></p>
554 </div>
555
556 <div class="acf-input">
557
558 <?php if(!empty($field_group['fields'])){ ?>
559
560 <table class="acf-table">
561 <thead>
562 <th class="acf-th" width="25%"><strong>Label</strong></th>
563 <th class="acf-th" width="25%"><strong>Name</strong></th>
564 <th class="acf-th" width="25%"><strong>Key</strong></th>
565 <th class="acf-th" width="25%"><strong>Type</strong></th>
566 </thead>
567
568 <tbody>
569 <?php
570
571 $array = array();
572 foreach($field_group['fields'] as $field){
573
574 $this->get_fields_labels_recursive($array, $field);
575
576 }
577
578 foreach($array as $field_key => $field_label){
579
580 $field = acf_get_field($field_key);
581 $type = acf_get_field_type($field['type']);
582 $type_label = '-';
583 if(isset($type->label))
584 $type_label = $type->label;
585 ?>
586
587 <tr class="acf-row">
588 <td width="25%"><?php echo $field_label; ?></td>
589 <td width="25%"><code style="font-size:12px;"><?php echo $field['name']; ?></code></td>
590 <td width="25%"><code style="font-size:12px;"><?php echo $field_key; ?></code></td>
591 <td width="25%"><?php echo $type_label; ?></td>
592 </tr>
593
594 <?php } ?>
595 </tbody>
596 </table>
597
598 <?php } ?>
599 </div>
600
601 </div>
602
603 <?php } ?>
604
605 <script type="text/javascript">
606 if(typeof acf !== 'undefined'){
607
608 acf.newPostbox(<?php echo wp_json_encode(array(
609 'id' => 'acfe-form-details',
610 'key' => '',
611 'style' => 'default',
612 'label' => 'left',
613 'edit' => false
614 )); ?>);
615
616 }
617 </script>
618 <?php
619
620 }
621
622 function get_fields_labels_recursive(&$array, $field){
623
624 $label = '';
625
626 $ancestors = isset($field['ancestors']) ? $field['ancestors'] : count(acf_get_field_ancestors($field));
627 $label = str_repeat('- ', $ancestors) . $label;
628
629 $label .= !empty($field['label']) ? $field['label'] : '(' . __('no label', 'acf') . ')';
630 $label .= $field['required'] ? ' <span class="acf-required">*</span>' : '';
631
632 $array[$field['key']] = $label;
633
634 if(isset($field['sub_fields']) && !empty($field['sub_fields'])){
635
636 foreach($field['sub_fields'] as $s_field){
637
638 $this->get_fields_labels_recursive($array, $s_field);
639
640 }
641
642 }
643
644 }
645
646 // Field groups choices
647 function field_groups_choices($field){
648
649 //acf_disable_filters();
650
651 $field_groups = acf_get_field_groups();
652 if(empty($field_groups))
653 return $field;
654
655 foreach($field_groups as $field_group){
656
657 if(strpos($field_group['key'], 'group_acfe_') === 0)
658 continue;
659
660 $field['choices'][$field_group['key']] = $field_group['title'];
661
662 }
663
664 //acf_enable_filters();
665
666 return $field;
667
668 }
669
670 function map_field_groups($field){
671
672 $post_id = get_the_ID();
673
674 $field_groups = get_field('acfe_form_field_groups', $post_id);
675
676 if(empty($field_groups))
677 return false;
678
679 foreach($field_groups as $field_group_key){
680
681 $field_group = acf_get_field_group($field_group_key);
682 if(!$field_group)
683 continue;
684
685 $field['choices'][$field_group_key] = $field_group['title'];
686
687 }
688
689 return $field;
690
691 }
692
693 function prepare_custom_html($value, $post_id, $field){
694
695 $custom_html = trim(get_field('acfe_form_custom_html', $post_id));
696
697 if($value === false && !empty($custom_html))
698 $value = true;
699
700 return $value;
701
702 }
703
704 function prepare_actions($field){
705
706 $field['instructions'] = 'Add actions on form submission';
707
708 $data = $this->fields_groups;
709
710 if(empty($data)){
711
712 $field['instructions'] .= '<br /><u>No field groups are currently mapped</u>';
713
714 }
715
716 return $field;
717
718 }
719
720 function map_fields_deep_no_custom($field){
721
722 $choices = array();
723
724 if(!empty($field['choices'])){
725
726 $generic = true;
727
728 if(is_array($field['choices']) && count($field['choices']) === 1){
729
730 reset($field['choices']);
731 $key = key($field['choices']);
732
733 if(acf_is_field_key($key))
734 $generic = false;
735
736 }
737
738 if($generic)
739 $choices['Generic'] = $field['choices'];
740
741 }
742
743 $fields_choices = $this->get_fields_choices(true, $field);
744
745 if(!empty($fields_choices)){
746
747 $field['choices'] = array_merge($choices, $fields_choices);
748
749 }
750
751 return $field;
752
753 }
754
755 function map_fields_deep($field){
756
757 // Map Fields
758 $fields_choices = $this->get_fields_choices(true, $field);
759
760 if(!empty($fields_choices)){
761
762 $field['choices'] = array_merge($field['choices'], $fields_choices);
763
764 }
765
766 if($field['type'] === 'select'){
767
768 // Query Vars
769 if(!empty($this->query_vars)){
770
771 parse_str($field['prefix'], $output);
772 $keys = acfe_array_keys_r($output);
773
774 if(acf_maybe_get($keys, 1) !== 'field_acfe_form_actions')
775 return $field;
776
777 foreach($this->query_vars as $row => $query_var){
778
779 $field_row = acf_maybe_get($keys, 2);
780 $field_row = str_replace('row-', '', $field_row);
781
782 if((is_numeric($field_row) && $field_row > $row) || $field_row === 'acfcloneindex'){
783
784 $action = $query_var['action'];
785 $action_label = $query_var['action_label'];
786 $action_type = $query_var['action_type'];
787 $alias = $query_var['alias'];
788
789 $tags = array();
790
791 if($action === 'post'){
792
793 $tags = array(
794 "{query_var:$alias:ID}" => 'Post ID',
795 "{query_var:$alias:post_title}" => 'Title',
796 "{query_var:$alias:permalink}" => 'Permalink',
797 "{query_var:$alias:admin_url}" => 'Admin URL',
798 );
799
800 }
801
802 elseif($action === 'term'){
803
804 $tags = array(
805 "{query_var:$alias:ID}" => 'Term ID',
806 "{query_var:$alias:name}" => 'Name',
807 "{query_var:$alias:permalink}" => 'Permalink',
808 "{query_var:$alias:admin_url}" => 'Admin URL',
809 );
810
811 }
812
813 elseif($action === 'user'){
814
815 $tags = array(
816 "{query_var:$alias:ID}" => 'User ID',
817 "{query_var:$alias:user_email}" => 'E-mail',
818 "{query_var:$alias:permalink}" => 'Permalink',
819 );
820
821 }
822
823 elseif($action === 'email'){
824
825 $tags = array(
826 "{query_var:$alias:from}" => 'From',
827 "{query_var:$alias:to}" => 'To',
828 "{query_var:$alias:content}" => 'Content',
829 );
830
831 }
832
833 foreach($tags as $tag_key => $tag_value){
834
835 $field['choices']["Action: $action_type ($alias)"][$tag_key] = $tag_value . ' ' . $tag_key;
836
837 }
838
839 }
840
841 }
842 }
843
844 // Templates Tags Examples
845 $field['choices']["Current Post"]['{current:post:ID}'] = 'Post ID {current:post:ID}';
846 $field['choices']["Current Post"]['{current:post:post_title}'] = 'Title {current:post:post_title}';
847 $field['choices']["Current Post"]['{current:post:permalink}'] = 'Permalink {current:post:permalink}';
848 $field['choices']["Current Post"]['{current:post:post_author}'] = 'Author {current:post:post_author}';
849
850 $field['choices']["Current Term"]['{current:term:ID}'] = 'Term ID {current:term:ID}';
851 $field['choices']["Current Term"]['{current:term:name}'] = 'Name {current:term:name}';
852 $field['choices']["Current Term"]['{current:term:permalink}'] = 'Permalink {current:term:permalink}';
853
854 $field['choices']["Current User"]['{current:user:ID}'] = 'User ID {current:user:ID}';
855 $field['choices']["Current User"]['{current:user:user_email}'] = 'E-mail {current:user:user_email}';
856 $field['choices']["Current User"]['{current:user:permalink}'] = 'Permalink {current:user:permalink}';
857
858 $field['choices']["Current Author"]['{current:author:ID}'] = 'Author ID {current:author:ID}';
859 $field['choices']["Current Author"]['{current:author:user_email}'] = 'E-mail {current:author:user_email}';
860 $field['choices']["Current Author"]['{current:author:permalink}'] = 'Permalink {current:author:permalink}';
861
862 $field['choices']["Current Form"]['{current:form:ID}'] = 'ID {current:form:ID}';
863 $field['choices']["Current Form"]['{current:form:name}'] = 'Name {current:form:name}';
864 $field['choices']["Current Form"]['{current:form:title}'] = 'Title {current:form:title}';
865
866 }
867
868 // Clean Choices
869 if(!empty($field['choices'])){
870
871 $sub_values = array();
872
873 foreach($field['choices'] as $category => $values){
874
875 // Generate available values
876 if(is_array($values)){
877
878 $sub_values = array_merge($sub_values, $values);
879
880 // Generate 'Generic'
881 }else{
882
883 unset($field['choices'][$category]);
884
885 $field['choices']['Generic'][$category] = $values;
886
887 }
888
889 }
890
891 // Compare available vs Generic
892 if(isset($field['choices']['Generic'])){
893
894 foreach($field['choices']['Generic'] as $k => $generic){
895
896 if(!isset($sub_values[$k]))
897 continue;
898
899 // Cleanup
900 unset($field['choices']['Generic'][$k]);
901
902 }
903
904 if(empty($field['choices']['Generic']))
905 unset($field['choices']['Generic']);
906
907 }
908
909 // Move Generic to Top
910 if(isset($field['choices']['Generic'])){
911
912 $new_generic = array(
913 'Generic' => $field['choices']['Generic']
914 );
915
916 unset($field['choices']['Generic']);
917
918 $field['choices'] = array_merge($new_generic, $field['choices']);
919
920 }
921
922 }
923
924 return $field;
925
926 }
927
928 function map_fields($field){
929
930 $fields_choices = $this->get_fields_choices();
931
932 if(empty($fields_choices))
933 return false;
934
935 $field['choices'] = $fields_choices;
936
937 return $field;
938
939 }
940
941 function get_fields_choices($deep = false, $original_field = array()){
942
943 $data = $this->fields_groups;
944 $choices = array();
945
946 if(empty($data))
947 return false;
948
949 $field_groups = array();
950
951 foreach($data as $field_group){
952
953 if(empty($field_group['fields']))
954 continue;
955
956 foreach($field_group['fields'] as $s_field){
957
958 $field_groups[$field_group['title']][] = $s_field;
959
960 }
961
962 }
963
964 if(!empty($field_groups)){
965
966 foreach($field_groups as $field_group_title => $fields){
967
968 foreach($fields as $field){
969
970 if(isset($choices[$field_group_title][$field['key']]))
971 continue;
972
973 // First level
974 if(!$deep){
975
976 $label = !empty($field['label']) ? $field['label'] : '(' . __('no label', 'acf') . ')';
977 $label .= $field['required'] ? ' *' : '';
978
979 $choices[$field_group_title][$field['key']] = $label. ' (' . $field['key'] . ')';
980
981 // Deep
982 }else{
983
984 $this->get_fields_choices_recursive($choices[$field_group_title], $field, $original_field);
985
986 }
987
988 }
989
990 }
991
992 }
993
994 return $choices;
995
996 }
997
998 function get_fields_choices_recursive(&$choices, $field, $original_field){
999
1000 $label = '';
1001
1002 $ancestors = isset($field['ancestors']) ? $field['ancestors'] : count(acf_get_field_ancestors($field));
1003 $label = str_repeat('- ', $ancestors) . $label;
1004
1005 $label .= !empty($field['label']) ? $field['label'] : '(' . __('no label', 'acf') . ')';
1006 $label .= $field['required'] ? ' *' : '';
1007
1008 /*
1009 if(acf_maybe_get($original_field, 'type') === 'select'){
1010
1011 $label = $label . ' <code style="font-size:12px;">{field:' . $field['name'] . '}</code>';
1012
1013 }else{
1014
1015 $label = $label . ' (' . $field['key'] . ')';
1016
1017 }
1018 */
1019
1020 $label = $label . ' (' . $field['key'] . ')';
1021
1022 $choices[$field['key']] = $label;
1023
1024 if(isset($field['sub_fields']) && !empty($field['sub_fields'])){
1025
1026 foreach($field['sub_fields'] as $s_field){
1027
1028 $this->get_fields_choices_recursive($choices, $s_field, $original_field);
1029
1030 }
1031
1032 }
1033
1034 }
1035
1036 function render_fields($content, $post_id, $args){
1037
1038 // Mapping
1039 $form_id = $args['ID'];
1040 $form_name = $args['name'];
1041
1042 $mapped_field_groups = $this->get_fields_groups($form_id);
1043 $mapped_field_groups_keys = wp_list_pluck($mapped_field_groups, 'key');
1044 $mapped_fields = array();
1045
1046 if(!empty($mapped_field_groups)){
1047
1048 $post = acf_get_post_id_info($post_id);
1049
1050 // Apply Field Groups Rules
1051 if($post['type'] === 'post' && $args['field_groups_rules']){
1052
1053 $filter = array(
1054 'post_id' => $post_id,
1055 'post_type' => get_post_type($post_id),
1056 );
1057
1058 $filtered = array();
1059
1060 foreach($mapped_field_groups as $field_group){
1061
1062 // Deleted field group
1063 if(!isset($field_group['location']))
1064 continue;
1065
1066 // Force active
1067 $field_group['active'] = true;
1068
1069 if(acf_get_field_group_visibility($field_group, $filter)){
1070
1071 $filtered[] = $field_group;
1072
1073 }
1074
1075 }
1076
1077 $mapped_field_groups = $filtered;
1078
1079 }
1080
1081 if(!empty($mapped_field_groups)){
1082
1083 $mapped_field_groups_keys = wp_list_pluck($mapped_field_groups, 'key');
1084
1085 foreach($mapped_field_groups as $field_group){
1086
1087 if(empty($field_group['fields']))
1088 continue;
1089
1090 foreach($field_group['fields'] as $field){
1091
1092 $mapped_fields[] = $field;
1093
1094 }
1095
1096 }
1097
1098 }
1099
1100 }
1101
1102 // Match {field:key}
1103 if(preg_match_all('/{field:(.*?)}/', $content, $matches)){
1104
1105 foreach($matches[1] as $i => $field_key){
1106
1107 $field = false;
1108
1109 // Field key
1110 if(strpos($field_key, 'field_') === 0){
1111
1112 $field = acf_get_field($field_key);
1113
1114 // Field name
1115 }else{
1116
1117 if(!empty($mapped_fields)){
1118
1119 foreach($mapped_fields as $mapped_field){
1120
1121 if($mapped_field['name'] !== $field_key)
1122 continue;
1123
1124 $field = $mapped_field;
1125 break;
1126
1127 }
1128
1129 }
1130
1131 }
1132
1133 if(!$field){
1134
1135 $content = str_replace('{field:' . $field_key . '}', '', $content);
1136 continue;
1137
1138 }
1139
1140 $fields = array();
1141 $fields[] = $field;
1142
1143 ob_start();
1144
1145 acf_render_fields($fields, acf_uniqid('acfe_form'), $args['field_el'], $args['instruction_placement']);
1146
1147 $render_field = ob_get_clean();
1148
1149 $content = str_replace('{field:' . $field_key . '}', $render_field, $content);
1150
1151 }
1152
1153 }
1154
1155 // Match {field_group:key}
1156 if(preg_match_all('/{field_group:(.*?)}/', $content, $matches)){
1157
1158 //$field_groups = acf_get_field_groups();
1159
1160 foreach($matches[1] as $i => $field_group_key){
1161
1162 $fields = false;
1163
1164 if(!empty($mapped_field_groups)){
1165
1166 // Field group key
1167 if(strpos($field_group_key, 'group_') === 0){
1168
1169 if(in_array($field_group_key, $mapped_field_groups_keys))
1170 $fields = acf_get_fields($field_group_key);
1171
1172 // Field group title
1173 }else{
1174
1175 foreach($mapped_field_groups as $field_group){
1176
1177 if($field_group['title'] !== $field_group_key)
1178 continue;
1179
1180 $fields = acf_get_fields($field_group['key']);
1181 break;
1182
1183 }
1184
1185 }
1186
1187 }
1188
1189 if(!$fields){
1190
1191 $content = str_replace('{field_group:' . $field_group_key . '}', '', $content);
1192 continue;
1193
1194 }
1195
1196 ob_start();
1197
1198 acf_render_fields($fields, acf_uniqid('acfe_form'), $args['field_el'], $args['instruction_placement']);
1199
1200 $render_fields = ob_get_clean();
1201
1202 $content = str_replace('{field_group:' . $field_group_key . '}', $render_fields, $content);
1203
1204 }
1205
1206 }
1207
1208 // Match current_post {current:post:id}
1209 $content = acfe_form_map_current($content, $post_id, $args);
1210
1211 // Match {get_field:name} {get_field:name:123}
1212 $content = acfe_form_map_get_field($content, $post_id);
1213
1214 // Match {get_option:name}
1215 $content = acfe_form_map_get_option($content);
1216
1217 // Match {query_var:name} {query_var:name:key}
1218 $content = acfe_form_map_query_var($content);
1219
1220 // Match {request:name}
1221 $content = acfe_form_map_request($content);
1222
1223 return $content;
1224
1225 }
1226
1227 // Post Object & Relationship
1228 function format_value_post_object($value, $_value, $post_id, $field){
1229
1230 $value = acf_get_array($_value);
1231 $array = array();
1232
1233 foreach($value as $p_id){
1234
1235 $array[] = get_the_title($p_id);
1236
1237 }
1238
1239 return implode(', ', $array);
1240
1241 }
1242
1243 // Google Map
1244 function format_value_google_map($value, $_value, $post_id, $field){
1245
1246 if(is_string($value)){
1247
1248 $value = json_decode(wp_unslash($value), true);
1249
1250 }
1251
1252 $value = acf_get_array($value);
1253
1254 $address = acf_maybe_get($value, 'address');
1255
1256 return $address;
1257
1258 }
1259
1260 // User
1261 function format_value_user($value, $_value, $post_id, $field){
1262
1263 $value = acf_get_array($_value);
1264 $array = array();
1265
1266 foreach($value as $user_id){
1267
1268 $user_data = get_userdata($user_id);
1269 $array[] = $user_data->user_nicename;
1270
1271 }
1272
1273 return implode(', ', $array);
1274
1275 }
1276
1277 // Taxonomy
1278 function format_value_taxonomy($value, $_value, $post_id, $field){
1279
1280 $value = acf_get_array($_value);
1281 $array = array();
1282
1283 foreach($value as $term_id){
1284
1285 $term = get_term($term_id);
1286 $array[] = $term->name;
1287
1288 }
1289
1290 return implode(', ', $array);
1291
1292 }
1293
1294 // Image / File
1295 function format_value_file($value, $_value, $post_id, $field){
1296
1297 if(isset($_value['title']))
1298 return $_value['title'];
1299
1300 return $value;
1301
1302 }
1303
1304 // Select / Checkbox / Radio
1305 function format_value_select($value, $_value, $post_id, $field){
1306
1307 $value = acf_get_array($_value);
1308 $array = array();
1309
1310 foreach($value as $v){
1311
1312 $array[] = acf_maybe_get($field['choices'], $v, $v);
1313
1314 }
1315
1316 return implode(', ', $array);
1317
1318 }
1319
1320 function format_value_array($value){
1321
1322 if(!is_array($value))
1323 return $value;
1324
1325 $return = array();
1326
1327 foreach($value as $i => $v){
1328
1329 $key = '';
1330 if(!is_numeric($i))
1331 $key = $i . ': ';
1332
1333 $return[] = $key . $this->format_value_array($v);
1334
1335 }
1336
1337 return implode(', ', $return);
1338
1339 }
1340
1341 function format_value($value, $post_id = 0, $field){
1342
1343 $_value = $value;
1344
1345 $value = acf_format_value($value, $post_id, $field);
1346
1347 $value = apply_filters('acfe/form/format_value', $value, $_value, $post_id, $field);
1348 $value = apply_filters('acfe/form/format_value/type=' . $field['type'], $value, $_value, $post_id, $field);
1349 $value = apply_filters('acfe/form/format_value/key=' . $field['key'], $value, $_value, $post_id, $field);
1350 $value = apply_filters('acfe/form/format_value/name=' . $field['name'], $value, $_value, $post_id, $field);
1351
1352 // Is Array? Fallback
1353 if(is_array($value)){
1354
1355 $value = $this->format_value_array($value);
1356
1357 }
1358
1359 return $value;
1360
1361 }
1362
1363 function map_fields_values(&$data = array(), $array = array()){
1364
1365 if(empty($array)){
1366
1367 if(!acf_maybe_get_POST('acf'))
1368 return array();
1369
1370 $array = $_POST['acf'];
1371
1372 }
1373
1374 foreach($array as $field_key => $value){
1375
1376 if(!acf_is_field_key($field_key))
1377 continue;
1378
1379 $field = acf_get_field($field_key);
1380
1381 // bypass _validate_email (honeypot)
1382 if(!$field || !isset($field['name']) || $field['name'] === '_validate_email')
1383 continue;
1384
1385 $data[] = array(
1386 'label' => $field['label'],
1387 'name' => $field['name'],
1388 'key' => $field['key'],
1389 'field' => $field,
1390 'value' => $value,
1391 );
1392
1393 if(is_array($value) && !empty($value)){
1394
1395 $this->map_fields_values($data, $value);
1396
1397 }
1398
1399 }
1400
1401 return $data;
1402
1403 }
1404
1405 function map_field_value($content, $post_id = 0, $form = array()){
1406
1407 // Get store
1408 $store = acf_get_store('acfe/form');
1409
1410 // Store found
1411 if(!$store->has('data')){
1412
1413 $data = $this->map_fields_values();
1414
1415 // Set Store: ACF meta
1416 $store->set('data', $data);
1417
1418 }
1419
1420 $is_array = false;
1421
1422 if(is_array($content)){
1423
1424 $is_array = true;
1425
1426 }
1427
1428 $content = acf_array($content);
1429
1430 foreach($content as &$c){
1431
1432 // Match field_abcdef123456
1433 $c = acfe_form_map_field_key($c);
1434
1435 // Match {field:name} {field:key}
1436 $c = acfe_form_map_field($c);
1437
1438 // Match {fields}
1439 $c = acfe_form_map_fields($c);
1440
1441 // Match current_post {current:post:id}
1442 $c = acfe_form_map_current($c, $post_id, $form);
1443
1444 // Match {get_field:name} {get_field:name:123}
1445 $c = acfe_form_map_get_field($c, $post_id);
1446
1447 // Match {get_option:name}
1448 $c = acfe_form_map_get_option($c);
1449
1450 // Match {query_var:name} {query_var:name:key}
1451 $c = acfe_form_map_query_var($c);
1452
1453 // Match {request:name}
1454 $c = acfe_form_map_request($c);
1455
1456 }
1457
1458 if($is_array)
1459 return $content;
1460
1461 if(isset($content[0]))
1462 return $content[0];
1463
1464 return false;
1465
1466 }
1467
1468 function map_field_value_load($content, $post_id = 0, $form = array()){
1469
1470 $is_array = false;
1471
1472 if(is_array($content)){
1473
1474 $is_array = true;
1475
1476 }
1477
1478 $content = acf_array($content);
1479
1480 foreach($content as &$c) {
1481
1482 // Match current_post {current:post:id}
1483 $c = acfe_form_map_current($c, $post_id, $form);
1484
1485 // Match {get_field:name} {get_field:name:123}
1486 $c = acfe_form_map_get_field($c, $post_id);
1487
1488 // Match {get_option:name}
1489 $c = acfe_form_map_get_option($c);
1490
1491 // Match {query_var:name} {query_var:name:key}
1492 $c = acfe_form_map_query_var($c);
1493
1494 // Match {request:name}
1495 $c = acfe_form_map_request($c);
1496
1497 }
1498
1499 if($is_array)
1500 return $content;
1501
1502 if(isset($content[0]))
1503 return $content[0];
1504
1505 return false;
1506
1507 }
1508
1509 function filter_meta($meta, $acf){
1510
1511 if(empty($meta) || empty($acf))
1512 return false;
1513
1514 foreach($acf as $field_key => $value){
1515
1516 if(in_array($field_key, $meta))
1517 continue;
1518
1519 unset($acf[$field_key]);
1520
1521 }
1522
1523 return $acf;
1524
1525 }
1526
1527 // Allow form post_id null
1528 function validate_post_id($null, $post_id){
1529
1530 if($post_id === null)
1531 return false;
1532
1533 return $null;
1534
1535 }
1536
1537 /**
1538 * List: Columns
1539 */
1540 function admin_columns($columns){
1541
1542 acfe_unset($columns, 'date');
1543
1544 $columns['name'] = __('Name');
1545 $columns['field_groups'] = __('Field groups', 'acf');
1546 $columns['actions'] = __('Actions');
1547 $columns['shortcode'] = __('Shortcode');
1548
1549 return $columns;
1550
1551 }
1552
1553 /**
1554 * List: Columns HTML
1555 */
1556 function admin_columns_html($column, $post_id){
1557
1558 // Name
1559 if($column == 'name'){
1560
1561 echo '<code style="font-size: 12px;">' . get_field('acfe_form_name', $post_id) . '</code>';
1562
1563 }
1564
1565 // Field groups
1566 elseif($column == 'field_groups'){
1567
1568 $field_groups = get_field('acfe_form_field_groups', $post_id);
1569
1570 if(empty($field_groups)){
1571
1572 echo '—';
1573 return;
1574
1575 }
1576
1577 $fg = array();
1578
1579 foreach($field_groups as $field_group_key){
1580
1581 //acf_disable_filters();
1582
1583 $field_group = acf_get_field_group($field_group_key);
1584
1585 //acf_enable_filters();
1586
1587 if(!$field_group)
1588 continue;
1589
1590 if($field_group['ID']){
1591
1592 $fg[] = '<a href="' . admin_url('post.php?post=' . $field_group['ID'] . '&action=edit') . '">' . $field_group['title'] . '</a>';
1593
1594 }else{
1595
1596 $fg[] = $field_group['title'];
1597
1598 }
1599
1600 }
1601
1602 echo implode(', ', $fg);
1603
1604 }
1605
1606 // Actions
1607 elseif($column == 'actions'){
1608
1609 $customs = $emails = $posts = $terms = $users = array();
1610 $found = false;
1611
1612 if(have_rows('acfe_form_actions', $post_id)):
1613 while(have_rows('acfe_form_actions', $post_id)): the_row();
1614
1615 // Custom
1616 if(get_row_layout() === 'custom'){
1617
1618 $action_name = get_sub_field('acfe_form_custom_action');
1619
1620 $customs[] = '<span class="acf-js-tooltip dashicons dashicons-editor-code" title="Custom action: ' . $action_name . '"></span>';
1621 $found = true;
1622
1623 }
1624
1625 // E-mail
1626 elseif(get_row_layout() === 'email'){
1627
1628 $emails[] = '<span class="acf-js-tooltip dashicons dashicons-email" title="E-mail"></span>';
1629 $found = true;
1630
1631 }
1632
1633 // Post
1634 elseif(get_row_layout() === 'post'){
1635
1636 $action = get_sub_field('acfe_form_post_action');
1637
1638 // Insert
1639 if($action === 'insert_post'){
1640
1641 $posts[] = '<span class="acf-js-tooltip dashicons dashicons-edit" title="Create post"></span>';
1642 $found = true;
1643
1644 }
1645
1646 // Update
1647 elseif($action === 'update_post'){
1648
1649 $posts[] = '<span class="acf-js-tooltip dashicons dashicons-update" title="Update post"></span>';
1650 $found = true;
1651
1652 }
1653
1654 }
1655
1656 // Term
1657 elseif(get_row_layout() === 'term'){
1658
1659 $action = get_sub_field('acfe_form_term_action');
1660
1661 // Insert
1662 if($action === 'insert_term'){
1663
1664 $terms[] = '<span class="acf-js-tooltip dashicons dashicons-category" title="Create term"></span>';
1665 $found = true;
1666
1667 }
1668
1669 // Update
1670 elseif($action === 'update_term'){
1671
1672 $terms[] = '<span class="acf-js-tooltip dashicons dashicons-category" title="Update term"></span>';
1673 $found = true;
1674
1675 }
1676
1677 }
1678
1679 // User
1680 elseif(get_row_layout() === 'user'){
1681
1682 $action = get_sub_field('acfe_form_user_action');
1683
1684 // Insert
1685 if($action === 'insert_user'){
1686
1687 $users[] = '<span class="acf-js-tooltip dashicons dashicons-admin-users" title="Create user"></span>';
1688 $found = true;
1689
1690 }
1691
1692 // Update
1693 elseif($action === 'update_user'){
1694
1695 $users[] = '<span class="acf-js-tooltip dashicons dashicons-admin-users" title="Update user"></span>';
1696 $found = true;
1697
1698 }
1699
1700 // Update
1701 elseif($action === 'log_user'){
1702
1703 $users[] = '<span class="acf-js-tooltip dashicons dashicons-migrate" title="Log user"></span>';
1704 $found = true;
1705
1706 }
1707
1708 }
1709
1710 endwhile;
1711 endif;
1712
1713 if(!empty($customs))
1714 echo implode('', $customs);
1715
1716 if(!empty($emails))
1717 echo implode('', $emails);
1718
1719 if(!empty($posts))
1720 echo implode('', $posts);
1721
1722 if(!empty($terms))
1723 echo implode('', $terms);
1724
1725 if(!empty($users))
1726 echo implode('', $users);
1727
1728 if(!$found)
1729 echo '—';
1730
1731 }
1732
1733 // Field groups
1734 elseif($column == 'shortcode'){
1735
1736 echo '<code style="font-size: 12px;">[acfe_form name="' . get_field('acfe_form_name', $post_id) . '"]</code>';
1737
1738 }
1739
1740 }
1741
1742 function doc_validation_field($field){
1743
1744 $form_name = 'my_form';
1745
1746 if(acf_maybe_get($field, 'value'))
1747 $form_name = get_field('acfe_form_name', $field['value']);
1748
1749 ?>You may use the following hooks:<br /><br />
1750
1751 <pre>/**
1752 * Perform custom validation on a field's value
1753 * Reference: <a href="https://www.advancedcustomfields.com/resources/acf-validate_value/" target="_blank">https://www.advancedcustomfields.com/resources/acf-validate_value/</a>
1754 */
1755 add_filter(&apos;acf/validate_value/name=my_field&apos;, &apos;my_field_validation&apos;, 10, 4);
1756 function my_field_validation($valid, $value, $field, $input){
1757
1758 if(!$valid)
1759 return $valid;
1760
1761 if($value === &apos;Hello&apos;)
1762 $valid = &apos;Hello is not allowed&apos;;
1763
1764 return $valid;
1765
1766 }</pre>
1767 <?php
1768
1769 }
1770
1771 function doc_validation_form($field){
1772
1773 $form_name = 'my_form';
1774
1775 if(acf_maybe_get($field, 'value'))
1776 $form_name = get_field('acfe_form_name', $field['value']);
1777
1778 ?>You may use the following hooks:<br /><br />
1779
1780 <pre>/**
1781 * @array $form Form arguments
1782 * @int/string $post_id Current post id
1783 */
1784 add_action(&apos;acfe/form/validation/form=<?php echo $form_name; ?>&apos;, &apos;my_form_validation&apos;, 10, 2);
1785 function my_form_validation($form, $post_id){
1786
1787 /**
1788 * Get the form input value named 'my_field'
1789 * This is the value entered by the user during the form submission
1790 */
1791 $my_field = get_field(&apos;my_field&apos;);
1792 $my_field_unformatted = get_field(&apos;my_field&apos;, false, false);
1793
1794 if($my_field === &apos;Hello&apos;){
1795
1796 // Add validation error
1797 acfe_add_validation_error(&apos;my_field&apos;, &apos;Hello is not allowed&apos;);
1798
1799 // Add general validation error
1800 acfe_add_validation_error(&apos;&apos;, &apos;There is an error&apos;);
1801
1802 }
1803
1804
1805 /**
1806 * Get the field value 'my_field' from the post ID 145
1807 */
1808 $post_my_field = get_field(&apos;my_field&apos;, 145);
1809 $post_my_field_unformatted = get_field(&apos;my_field&apos;, 145, false);
1810
1811 }</pre>
1812 <?php
1813
1814 }
1815
1816 function doc_submission_php($field){
1817
1818 $form_name = 'my_form';
1819
1820 if(acf_maybe_get($field, 'value'))
1821 $form_name = get_field('acfe_form_name', $field['value']);
1822
1823 ?>You may use the following hooks:<br /><br />
1824
1825 <pre>
1826 add_action(&apos;acfe/form/submit&apos;, &apos;my_form_submit&apos;, 10, 2);
1827 add_action(&apos;acfe/form/submit/form=<?php echo $form_name; ?>&apos;, &apos;my_form_submit&apos;, 10, 2);</pre>
1828
1829 <br />
1830
1831 <pre>/**
1832 * @array $form Form arguments
1833 * @int/string $post_id Current post id
1834 */
1835 add_action(&apos;acfe/form/submit/form=<?php echo $form_name; ?>&apos;, &apos;my_form_submit&apos;, 10, 2);
1836 function my_form_submit($form, $post_id){
1837
1838 /**
1839 * Get the form input value named 'my_field'
1840 * This is the value entered by the user during the form submission
1841 */
1842 $my_field = get_field(&apos;my_field&apos;);
1843 $my_field_unformatted = get_field(&apos;my_field&apos;, false, false);
1844
1845 if($my_field === &apos;Hello&apos;){
1846
1847 // Do something
1848
1849 }
1850
1851
1852 /**
1853 * Get the field value 'my_field' from the post ID 145
1854 */
1855 $post_my_field = get_field(&apos;my_field&apos;, 145);
1856 $post_my_field_unformatted = get_field(&apos;my_field&apos;, 145, false);
1857
1858 }</pre>
1859 <?php
1860
1861 }
1862
1863 function doc_submission_js($field){
1864
1865 $form_name = 'my_form';
1866
1867 if(acf_maybe_get($field, 'value'))
1868 $form_name = get_field('acfe_form_name', $field['value']);
1869
1870 ?>You may use the following hooks:<br /><br />
1871
1872 <pre>
1873 acf.addAction('acfe/form/submit/success');
1874 acf.addAction('acfe/form/submit/success/id=<?php echo get_the_ID(); ?>');
1875 acf.addAction('acfe/form/submit/success/name=<?php echo $form_name; ?>');</pre>
1876
1877 <br />
1878
1879 <pre>acf.addAction('acfe/form/submit/success/name=<?php echo $form_name; ?>', function(){
1880
1881 // Do something...
1882
1883 });</pre>
1884 <?php
1885
1886 }
1887
1888 function doc_field($field){
1889 ?>
1890 <table class="acf-table">
1891 <tbody>
1892 <tr class="acf-row">
1893 <td width="35%"><code>{field:field_5e5c07b6dfae9}</code></td>
1894 <td>User input</td>
1895 </tr>
1896 <tr class="acf-row">
1897 <td width="35%"><code>{field:my_field}</code></td>
1898 <td>User input</td>
1899 </tr>
1900 <tr class="acf-row">
1901 <td width="35%"><code>{field:my_field:false}</code></td>
1902 <td>User input (unformatted)</td>
1903 </tr>
1904 </tbody>
1905 </table>
1906 <?php
1907 }
1908
1909 function doc_fields($field){
1910 ?>
1911 <table class="acf-table">
1912 <tbody>
1913 <tr class="acf-row">
1914 <td width="35%"><code>{fields}</code></td>
1915 <td>My text: User input<br /><br />My textarea: User input<br /><br />My date: 2020-03-01</td>
1916 </tr>
1917 </tbody>
1918 </table>
1919 <?php
1920 }
1921
1922 function doc_get_field($field){
1923 ?>
1924 <table class="acf-table">
1925 <tbody>
1926 <tr class="acf-row">
1927 <td width="35%"><code>{get_field:my_field}</code></td>
1928 <td>DB value (current post)</td>
1929 </tr>
1930 <tr class="acf-row">
1931 <td width="35%"><code>{get_field:my_field:current}</code></td>
1932 <td>DB value (current post)</td>
1933 </tr>
1934 <tr class="acf-row">
1935 <td width="35%"><code>{get_field:my_field:128}</code></td>
1936 <td>DB value (post:128)</td>
1937 </tr>
1938 <tr class="acf-row">
1939 <td width="35%"><code>{get_field:my_field:128:false}</code></td>
1940 <td>DB value (post:128 - unformatted)</td>
1941 </tr>
1942 </tbody>
1943 </table>
1944 <?php
1945 }
1946
1947 function doc_get_option($field){
1948 ?>
1949 <table class="acf-table">
1950 <tbody>
1951 <tr class="acf-row">
1952 <td width="35%"><code>{get_option:my_option}</code></td>
1953 <td>DB value</td>
1954 </tr>
1955 <tr class="acf-row">
1956 <td width="35%"><code>{get_option:my_option_array:key}</code></td>
1957 <td>DB value</td>
1958 </tr>
1959 </tbody>
1960 </table>
1961 <?php
1962 }
1963
1964 function doc_query_var($field){
1965 ?>
1966 <table class="acf-table">
1967 <tbody>
1968 <tr class="acf-row">
1969 <td width="50%"><code>{query_var:name}</code></td>
1970 <td>value</td>
1971 </tr>
1972 <tr class="acf-row">
1973 <td width="50%"><code>{query_var:name:key}</code></td>
1974 <td>Array value</td>
1975 </tr>
1976 </tbody>
1977 </table>
1978
1979 <br />
1980
1981 <table class="acf-table">
1982 <tbody>
1983 <tr class="acf-row">
1984 <td width="50%"><code>{query_var:my-post-action:ID}</code></td>
1985 <td>128</td>
1986 </tr>
1987 <tr class="acf-row">
1988 <td width="50%"><code>{query_var:my-post-action:post_author}</code></td>
1989 <td>1</td>
1990 </tr>
1991
1992 <tr class="acf-row">
1993 <td width="50%"><code>{query_var:my-post-action:post_author_data:ID}</code></td>
1994 <td>1</td>
1995 </tr>
1996 <tr class="acf-row">
1997 <td width="50%"><code>{query_var:my-post-action:post_author_data:user_login}</code></td>
1998 <td>login</td>
1999 </tr>
2000 <tr class="acf-row">
2001 <td width="50%"><code>{query_var:my-post-action:post_author_data:user_pass}</code></td>
2002 <td>password_hash</td>
2003 </tr>
2004 <tr class="acf-row">
2005 <td width="50%"><code>{query_var:my-post-action:post_author_data:user_nicename}</code></td>
2006 <td>nicename</td>
2007 </tr>
2008 <tr class="acf-row">
2009 <td width="50%"><code>{query_var:my-post-action:post_author_data:user_email}</code></td>
2010 <td>user@domain.com</td>
2011 </tr>
2012 <tr class="acf-row">
2013 <td width="50%"><code>{query_var:my-post-action:post_author_data:user_url}</code></td>
2014 <td>https://www.website.com</td>
2015 </tr>
2016 <tr class="acf-row">
2017 <td width="50%"><code>{query_var:my-post-action:post_author_data:permalink}</code></td>
2018 <td><?php echo home_url('author/johndoe'); ?></td>
2019 </tr>
2020 <tr class="acf-row">
2021 <td width="50%"><code>{query_var:my-post-action:post_author_data:admin_url}</code></td>
2022 <td><?php echo admin_url('user-edit.php?user_id=1'); ?></td>
2023 </tr>
2024 <tr class="acf-row">
2025 <td width="50%"><code>{query_var:my-post-action:post_author_data:user_registered}</code></td>
2026 <td>2020-02-22 22:10:02</td>
2027 </tr>
2028 <tr class="acf-row">
2029 <td width="50%"><code>{query_var:my-post-action:post_author_data:user_activation_key}</code></td>
2030 <td></td>
2031 </tr>
2032 <tr class="acf-row">
2033 <td width="50%"><code>{query_var:my-post-action:post_author_data:user_status}</code></td>
2034 <td>0</td>
2035 </tr>
2036 <tr class="acf-row">
2037 <td width="50%"><code>{query_var:my-post-action:post_author_data:display_name}</code></td>
2038 <td>John Doe</td>
2039 </tr>
2040 <tr class="acf-row">
2041 <td width="50%"><code>{query_var:my-post-action:post_author_data:nickname}</code></td>
2042 <td>JohnDoe</td>
2043 </tr>
2044 <tr class="acf-row">
2045 <td width="50%"><code>{query_var:my-post-action:post_author_data:first_name}</code></td>
2046 <td>John</td>
2047 </tr>
2048 <tr class="acf-row">
2049 <td width="50%"><code>{query_var:my-post-action:post_author_data:last_name}</code></td>
2050 <td>Doe</td>
2051 </tr>
2052 <tr class="acf-row">
2053 <td width="50%"><code>{query_var:my-post-action:post_author_data:description}</code></td>
2054 <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</td>
2055 </tr>
2056 <tr class="acf-row">
2057 <td width="50%"><code>{query_var:my-post-action:post_author_data:rich_editing}</code></td>
2058 <td>true</td>
2059 </tr>
2060 <tr class="acf-row">
2061 <td width="50%"><code>{query_var:my-post-action:post_author_data:syntax_highlighting}</code></td>
2062 <td>true</td>
2063 </tr>
2064 <tr class="acf-row">
2065 <td width="50%"><code>{query_var:my-post-action:post_author_data:comment_shortcuts}</code></td>
2066 <td>false</td>
2067 </tr>
2068 <tr class="acf-row">
2069 <td width="50%"><code>{query_var:my-post-action:post_author_data:admin_color}</code></td>
2070 <td>fresh</td>
2071 </tr>
2072 <tr class="acf-row">
2073 <td width="50%"><code>{query_var:my-post-action:post_author_data:use_ssl}</code></td>
2074 <td>1</td>
2075 </tr>
2076 <tr class="acf-row">
2077 <td width="50%"><code>{query_var:my-post-action:post_author_data:show_admin_bar_front}</code></td>
2078 <td>true</td>
2079 </tr>
2080 <tr class="acf-row">
2081 <td width="50%"><code>{query_var:my-post-action:post_author_data:locale}</code></td>
2082 <td></td>
2083 </tr>
2084 <tr class="acf-row">
2085 <td width="50%"><code>{query_var:my-post-action:post_author_data:wp_capabilities}</code></td>
2086 <td>a:1:{s:13:"administrator";b:1;}</td>
2087 </tr>
2088 <tr class="acf-row">
2089 <td width="50%"><code>{query_var:my-post-action:post_author_data:wp_user_level}</code></td>
2090 <td>10</td>
2091 </tr>
2092 <tr class="acf-row">
2093 <td width="50%"><code>{query_var:my-post-action:post_author_data:dismissed_wp_pointers}</code></td>
2094 <td></td>
2095 </tr>
2096 <tr class="acf-row">
2097 <td width="50%"><code>{query_var:my-post-action:post_author_data:show_welcome_panel}</code></td>
2098 <td>1</td>
2099 </tr>
2100
2101 <tr class="acf-row">
2102 <td width="50%"><code>{query_var:my-post-action:post_date}</code></td>
2103 <td>2020-03-01 20:07:48</td>
2104 </tr>
2105 <tr class="acf-row">
2106 <td width="50%"><code>{query_var:my-post-action:post_date_gmt}</code></td>
2107 <td>2020-03-01 19:07:48</td>
2108 </tr>
2109 <tr class="acf-row">
2110 <td width="50%"><code>{query_var:my-post-action:post_content}</code></td>
2111 <td>Content</td>
2112 </tr>
2113 <tr class="acf-row">
2114 <td width="50%"><code>{query_var:my-post-action:post_title}</code></td>
2115 <td>Title</td>
2116 </tr>
2117 <tr class="acf-row">
2118 <td width="50%"><code>{query_var:my-post-action:post_excerpt}</code></td>
2119 <td>Excerpt</td>
2120 </tr>
2121 <tr class="acf-row">
2122 <td width="50%"><code>{query_var:my-post-action:permalink}</code></td>
2123 <td><?php echo home_url('my-post'); ?></td>
2124 </tr>
2125 <tr class="acf-row">
2126 <td width="50%"><code>{query_var:my-post-action:admin_url}</code></td>
2127 <td><?php echo admin_url('post.php?post=128&action=edit'); ?></td>
2128 </tr>
2129 <tr class="acf-row">
2130 <td width="50%"><code>{query_var:my-post-action:post_status}</code></td>
2131 <td>publish</td>
2132 </tr>
2133 <tr class="acf-row">
2134 <td width="50%"><code>{query_var:my-post-action:comment_status}</code></td>
2135 <td>closed</td>
2136 </tr>
2137 <tr class="acf-row">
2138 <td width="50%"><code>{query_var:my-post-action:ping_status}</code></td>
2139 <td>closed</td>
2140 </tr>
2141 <tr class="acf-row">
2142 <td width="50%"><code>{query_var:my-post-action:post_password}</code></td>
2143 <td>password</td>
2144 </tr>
2145 <tr class="acf-row">
2146 <td width="50%"><code>{query_var:my-post-action:post_name}</code></td>
2147 <td>name</td>
2148 </tr>
2149 <tr class="acf-row">
2150 <td width="50%"><code>{query_var:my-post-action:to_ping}</code></td>
2151 <td></td>
2152 </tr>
2153 <tr class="acf-row">
2154 <td width="50%"><code>{query_var:my-post-action:pinged}</code></td>
2155 <td></td>
2156 </tr>
2157 <tr class="acf-row">
2158 <td width="50%"><code>{query_var:my-post-action:post_modified}</code></td>
2159 <td>2020-03-01 20:07:48</td>
2160 </tr>
2161 <tr class="acf-row">
2162 <td width="50%"><code>{query_var:my-post-action:post_modified_gmt}</code></td>
2163 <td>2020-03-01 19:07:48</td>
2164 </tr>
2165 <tr class="acf-row">
2166 <td width="50%"><code>{query_var:my-post-action:post_content_filtered}</code></td>
2167 <td></td>
2168 </tr>
2169 <tr class="acf-row">
2170 <td width="50%"><code>{query_var:my-post-action:post_parent}</code></td>
2171 <td>0</td>
2172 </tr>
2173 <tr class="acf-row">
2174 <td width="50%"><code>{query_var:my-post-action:guid}</code></td>
2175 <td><?php echo home_url('?page_id=128'); ?></td>
2176 </tr>
2177 <tr class="acf-row">
2178 <td width="50%"><code>{query_var:my-post-action:menu_order}</code></td>
2179 <td>0</td>
2180 </tr>
2181 <tr class="acf-row">
2182 <td width="50%"><code>{query_var:my-post-action:post_type}</code></td>
2183 <td>page</td>
2184 </tr>
2185 <tr class="acf-row">
2186 <td width="50%"><code>{query_var:my-post-action:post_mime_type}</code></td>
2187 <td></td>
2188 </tr>
2189 <tr class="acf-row">
2190 <td width="50%"><code>{query_var:my-post-action:comment_count}</code></td>
2191 <td>0</td>
2192 </tr>
2193 <tr class="acf-row">
2194 <td width="50%"><code>{query_var:my-post-action:filter}</code></td>
2195 <td>raw</td>
2196 </tr>
2197 </tbody>
2198 </table>
2199
2200 <br />
2201
2202 <table class="acf-table">
2203 <tbody>
2204 <tr class="acf-row">
2205 <td width="50%"><code>{query_var:my-term-action:ID}</code></td>
2206 <td>23</td>
2207 </tr>
2208 <tr class="acf-row">
2209 <td width="50%"><code>{query_var:my-term-action:term_id}</code></td>
2210 <td>23</td>
2211 </tr>
2212 <tr class="acf-row">
2213 <td width="50%"><code>{query_var:my-term-action:name}</code></td>
2214 <td>Term</td>
2215 </tr>
2216 <tr class="acf-row">
2217 <td width="50%"><code>{query_var:my-term-action:slug}</code></td>
2218 <td>term</td>
2219 </tr>
2220 <tr class="acf-row">
2221 <td width="50%"><code>{query_var:my-term-action:permalink}</code></td>
2222 <td><?php echo home_url('taxonomy/term'); ?></td>
2223 </tr>
2224 <tr class="acf-row">
2225 <td width="50%"><code>{query_var:my-term-action:admin_url}</code></td>
2226 <td><?php echo admin_url('term.php?tag_ID=23'); ?></td>
2227 </tr>
2228 <tr class="acf-row">
2229 <td width="50%"><code>{query_var:my-term-action:term_group}</code></td>
2230 <td>0</td>
2231 </tr>
2232 <tr class="acf-row">
2233 <td width="50%"><code>{query_var:my-term-action:term_taxonomy_id}</code></td>
2234 <td>23</td>
2235 </tr>
2236 <tr class="acf-row">
2237 <td width="50%"><code>{query_var:my-term-action:taxonomy}</code></td>
2238 <td>taxonomy</td>
2239 </tr>
2240 <tr class="acf-row">
2241 <td width="50%"><code>{query_var:my-term-action:description}</code></td>
2242 <td>Content</td>
2243 </tr>
2244 <tr class="acf-row">
2245 <td width="50%"><code>{query_var:my-term-action:parent}</code></td>
2246 <td>0</td>
2247 </tr>
2248 <tr class="acf-row">
2249 <td width="50%"><code>{query_var:my-term-action:count}</code></td>
2250 <td>0</td>
2251 </tr>
2252 <tr class="acf-row">
2253 <td width="50%"><code>{query_var:my-term-action:filter}</code></td>
2254 <td>raw</td>
2255 </tr>
2256 </tbody>
2257 </table>
2258
2259 <br />
2260
2261 <table class="acf-table">
2262 <tbody>
2263 <tr class="acf-row">
2264 <td width="50%"><code>{query_var:my-user-action:ID}</code></td>
2265 <td>1</td>
2266 </tr>
2267 <tr class="acf-row">
2268 <td width="50%"><code>{query_var:my-user-action:user_login}</code></td>
2269 <td>login</td>
2270 </tr>
2271 <tr class="acf-row">
2272 <td width="50%"><code>{query_var:my-user-action:user_pass}</code></td>
2273 <td>password_hash</td>
2274 </tr>
2275 <tr class="acf-row">
2276 <td width="50%"><code>{query_var:my-user-action:user_nicename}</code></td>
2277 <td>nicename</td>
2278 </tr>
2279 <tr class="acf-row">
2280 <td width="50%"><code>{query_var:my-user-action:user_email}</code></td>
2281 <td>user@domain.com</td>
2282 </tr>
2283 <tr class="acf-row">
2284 <td width="50%"><code>{query_var:my-user-action:user_url}</code></td>
2285 <td>https://www.website.com</td>
2286 </tr>
2287 <tr class="acf-row">
2288 <td width="50%"><code>{query_var:my-user-action:permalink}</code></td>
2289 <td><?php echo home_url('author/johndoe'); ?></td>
2290 </tr>
2291 <tr class="acf-row">
2292 <td width="50%"><code>{query_var:my-user-action:admin_url}</code></td>
2293 <td><?php echo admin_url('user-edit.php?user_id=1'); ?></td>
2294 </tr>
2295 <tr class="acf-row">
2296 <td width="50%"><code>{query_var:my-user-action:user_registered}</code></td>
2297 <td>2020-02-22 22:10:02</td>
2298 </tr>
2299 <tr class="acf-row">
2300 <td width="50%"><code>{query_var:my-user-action:user_activation_key}</code></td>
2301 <td></td>
2302 </tr>
2303 <tr class="acf-row">
2304 <td width="50%"><code>{query_var:my-user-action:user_status}</code></td>
2305 <td>0</td>
2306 </tr>
2307 <tr class="acf-row">
2308 <td width="50%"><code>{query_var:my-user-action:display_name}</code></td>
2309 <td>John Doe</td>
2310 </tr>
2311 <tr class="acf-row">
2312 <td width="50%"><code>{query_var:my-user-action:nickname}</code></td>
2313 <td>JohnDoe</td>
2314 </tr>
2315 <tr class="acf-row">
2316 <td width="50%"><code>{query_var:my-user-action:first_name}</code></td>
2317 <td>John</td>
2318 </tr>
2319 <tr class="acf-row">
2320 <td width="50%"><code>{query_var:my-user-action:last_name}</code></td>
2321 <td>Doe</td>
2322 </tr>
2323 <tr class="acf-row">
2324 <td width="50%"><code>{query_var:my-user-action:description}</code></td>
2325 <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</td>
2326 </tr>
2327 <tr class="acf-row">
2328 <td width="50%"><code>{query_var:my-user-action:rich_editing}</code></td>
2329 <td>true</td>
2330 </tr>
2331 <tr class="acf-row">
2332 <td width="50%"><code>{query_var:my-user-action:syntax_highlighting}</code></td>
2333 <td>true</td>
2334 </tr>
2335 <tr class="acf-row">
2336 <td width="50%"><code>{query_var:my-user-action:comment_shortcuts}</code></td>
2337 <td>false</td>
2338 </tr>
2339 <tr class="acf-row">
2340 <td width="50%"><code>{query_var:my-user-action:admin_color}</code></td>
2341 <td>fresh</td>
2342 </tr>
2343 <tr class="acf-row">
2344 <td width="50%"><code>{query_var:my-user-action:use_ssl}</code></td>
2345 <td>1</td>
2346 </tr>
2347 <tr class="acf-row">
2348 <td width="50%"><code>{query_var:my-user-action:show_admin_bar_front}</code></td>
2349 <td>true</td>
2350 </tr>
2351 <tr class="acf-row">
2352 <td width="50%"><code>{query_var:my-user-action:locale}</code></td>
2353 <td></td>
2354 </tr>
2355 <tr class="acf-row">
2356 <td width="50%"><code>{query_var:my-user-action:wp_capabilities}</code></td>
2357 <td>a:1:{s:13:"administrator";b:1;}</td>
2358 </tr>
2359 <tr class="acf-row">
2360 <td width="50%"><code>{query_var:my-user-action:wp_user_level}</code></td>
2361 <td>10</td>
2362 </tr>
2363 <tr class="acf-row">
2364 <td width="50%"><code>{query_var:my-user-action:dismissed_wp_pointers}</code></td>
2365 <td></td>
2366 </tr>
2367 <tr class="acf-row">
2368 <td width="50%"><code>{query_var:my-user-action:show_welcome_panel}</code></td>
2369 <td>1</td>
2370 </tr>
2371 </tbody>
2372 </table>
2373
2374 <br />
2375
2376 <table class="acf-table">
2377 <tbody>
2378 <tr class="acf-row">
2379 <td width="50%"><code>{query_var:my-email-action:from}</code></td>
2380 <td>Website <email@domain.com></td>
2381 </tr>
2382 <tr class="acf-row">
2383 <td width="50%"><code>{query_var:my-email-action:to}</code></td>
2384 <td>email@domain.com</td>
2385 </tr>
2386 <tr class="acf-row">
2387 <td width="50%"><code>{query_var:my-email-action:reply_to}</code></td>
2388 <td>email@domain.com</td>
2389 </tr>
2390 <tr class="acf-row">
2391 <td width="50%"><code>{query_var:my-email-action:cc}</code></td>
2392 <td>email@domain.com</td>
2393 </tr>
2394 <tr class="acf-row">
2395 <td width="50%"><code>{query_var:my-email-action:bcc}</code></td>
2396 <td>email@domain.com</td>
2397 </tr>
2398 <tr class="acf-row">
2399 <td width="50%"><code>{query_var:my-email-action:subject}</code></td>
2400 <td>Subject</td>
2401 </tr>
2402 <tr class="acf-row">
2403 <td width="50%"><code>{query_var:my-email-action:content}</code></td>
2404 <td>Content</td>
2405 </tr>
2406 <tr class="acf-row">
2407 <td width="50%"><code>{query_var:my-email-action:headers}</code></td>
2408 <td>Array</td>
2409 </tr>
2410 <tr class="acf-row">
2411 <td width="50%"><code>{query_var:my-email-action:attachments}</code></td>
2412 <td>Array</td>
2413 </tr>
2414 </tbody>
2415 </table>
2416 <?php
2417 }
2418
2419 function doc_request($field){
2420 ?>
2421 <table class="acf-table">
2422 <tbody>
2423 <tr class="acf-row">
2424 <td width="35%"><code>{request:name}</code></td>
2425 <td><code>$_REQUEST['name']</code> (including <code>$_GET</code> & <code>$_POST</code>)</td>
2426 </tr>
2427 <tr class="acf-row">
2428 <td width="35%"><code>{request:name:key}</code></td>
2429 <td><code>$_REQUEST['name']['key']</code> (including <code>$_GET</code> & <code>$_POST</code>)</td>
2430 </tr>
2431 </tbody>
2432 </table>
2433 <?php
2434 }
2435
2436 function doc_current_post($field){
2437 ?>
2438 <table class="acf-table">
2439 <tbody>
2440 <tr class="acf-row">
2441 <td width="35%"><code>{current:post}</code></td>
2442 <td>128</td>
2443 </tr>
2444 <tr class="acf-row">
2445 <td width="35%"><code>{current:post:ID}</code></td>
2446 <td>128</td>
2447 </tr>
2448 <tr class="acf-row">
2449 <td width="35%"><code>{current:post:post_author}</code></td>
2450 <td>1</td>
2451 </tr>
2452
2453 <tr class="acf-row">
2454 <td width="35%"><code>{current:post:post_author_data:ID}</code></td>
2455 <td>1</td>
2456 </tr>
2457 <tr class="acf-row">
2458 <td width="35%"><code>{current:post:post_author_data:user_login}</code></td>
2459 <td>login</td>
2460 </tr>
2461 <tr class="acf-row">
2462 <td width="35%"><code>{current:post:post_author_data:user_pass}</code></td>
2463 <td>password_hash</td>
2464 </tr>
2465 <tr class="acf-row">
2466 <td width="35%"><code>{current:post:post_author_data:user_nicename}</code></td>
2467 <td>nicename</td>
2468 </tr>
2469 <tr class="acf-row">
2470 <td width="35%"><code>{current:post:post_author_data:user_email}</code></td>
2471 <td>user@domain.com</td>
2472 </tr>
2473 <tr class="acf-row">
2474 <td width="35%"><code>{current:post:post_author_data:user_url}</code></td>
2475 <td>https://www.website.com</td>
2476 </tr>
2477 <tr class="acf-row">
2478 <td width="35%"><code>{current:post:post_author_data:permalink}</code></td>
2479 <td><?php echo home_url('author/johndoe'); ?></td>
2480 </tr>
2481 <tr class="acf-row">
2482 <td width="35%"><code>{current:post:post_author_data:admin_url}</code></td>
2483 <td><?php echo admin_url('user-edit.php?user_id=1'); ?></td>
2484 </tr>
2485 <tr class="acf-row">
2486 <td width="35%"><code>{current:post:post_author_data:user_registered}</code></td>
2487 <td>2020-02-22 22:10:02</td>
2488 </tr>
2489 <tr class="acf-row">
2490 <td width="35%"><code>{current:post:post_author_data:user_activation_key}</code></td>
2491 <td></td>
2492 </tr>
2493 <tr class="acf-row">
2494 <td width="35%"><code>{current:post:post_author_data:user_status}</code></td>
2495 <td>0</td>
2496 </tr>
2497 <tr class="acf-row">
2498 <td width="35%"><code>{current:post:post_author_data:display_name}</code></td>
2499 <td>John Doe</td>
2500 </tr>
2501 <tr class="acf-row">
2502 <td width="35%"><code>{current:post:post_author_data:nickname}</code></td>
2503 <td>JohnDoe</td>
2504 </tr>
2505 <tr class="acf-row">
2506 <td width="35%"><code>{current:post:post_author_data:first_name}</code></td>
2507 <td>John</td>
2508 </tr>
2509 <tr class="acf-row">
2510 <td width="35%"><code>{current:post:post_author_data:last_name}</code></td>
2511 <td>Doe</td>
2512 </tr>
2513 <tr class="acf-row">
2514 <td width="35%"><code>{current:post:post_author_data:description}</code></td>
2515 <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</td>
2516 </tr>
2517 <tr class="acf-row">
2518 <td width="35%"><code>{current:post:post_author_data:rich_editing}</code></td>
2519 <td>true</td>
2520 </tr>
2521 <tr class="acf-row">
2522 <td width="35%"><code>{current:post:post_author_data:syntax_highlighting}</code></td>
2523 <td>true</td>
2524 </tr>
2525 <tr class="acf-row">
2526 <td width="35%"><code>{current:post:post_author_data:comment_shortcuts}</code></td>
2527 <td>false</td>
2528 </tr>
2529 <tr class="acf-row">
2530 <td width="35%"><code>{current:post:post_author_data:admin_color}</code></td>
2531 <td>fresh</td>
2532 </tr>
2533 <tr class="acf-row">
2534 <td width="35%"><code>{current:post:post_author_data:use_ssl}</code></td>
2535 <td>1</td>
2536 </tr>
2537 <tr class="acf-row">
2538 <td width="35%"><code>{current:post:post_author_data:show_admin_bar_front}</code></td>
2539 <td>true</td>
2540 </tr>
2541 <tr class="acf-row">
2542 <td width="35%"><code>{current:post:post_author_data:locale}</code></td>
2543 <td></td>
2544 </tr>
2545 <tr class="acf-row">
2546 <td width="35%"><code>{current:post:post_author_data:wp_capabilities}</code></td>
2547 <td>a:1:{s:13:"administrator";b:1;}</td>
2548 </tr>
2549 <tr class="acf-row">
2550 <td width="35%"><code>{current:post:post_author_data:wp_user_level}</code></td>
2551 <td>10</td>
2552 </tr>
2553 <tr class="acf-row">
2554 <td width="35%"><code>{current:post:post_author_data:dismissed_wp_pointers}</code></td>
2555 <td></td>
2556 </tr>
2557 <tr class="acf-row">
2558 <td width="35%"><code>{current:post:post_author_data:show_welcome_panel}</code></td>
2559 <td>1</td>
2560 </tr>
2561
2562 <tr class="acf-row">
2563 <td width="35%"><code>{current:post:post_date}</code></td>
2564 <td>2020-03-01 20:07:48</td>
2565 </tr>
2566 <tr class="acf-row">
2567 <td width="35%"><code>{current:post:post_date_gmt}</code></td>
2568 <td>2020-03-01 19:07:48</td>
2569 </tr>
2570 <tr class="acf-row">
2571 <td width="35%"><code>{current:post:post_content}</code></td>
2572 <td>Content</td>
2573 </tr>
2574 <tr class="acf-row">
2575 <td width="35%"><code>{current:post:post_title}</code></td>
2576 <td>Title</td>
2577 </tr>
2578 <tr class="acf-row">
2579 <td width="35%"><code>{current:post:post_excerpt}</code></td>
2580 <td>Excerpt</td>
2581 </tr>
2582 <tr class="acf-row">
2583 <td width="35%"><code>{current:post:permalink}</code></td>
2584 <td><?php echo home_url('my-post'); ?></td>
2585 </tr>
2586 <tr class="acf-row">
2587 <td width="35%"><code>{current:post:admin_url}</code></td>
2588 <td><?php echo admin_url('post.php?post=128&action=edit'); ?></td>
2589 </tr>
2590 <tr class="acf-row">
2591 <td width="35%"><code>{current:post:post_status}</code></td>
2592 <td>publish</td>
2593 </tr>
2594 <tr class="acf-row">
2595 <td width="35%"><code>{current:post:comment_status}</code></td>
2596 <td>closed</td>
2597 </tr>
2598 <tr class="acf-row">
2599 <td width="35%"><code>{current:post:ping_status}</code></td>
2600 <td>closed</td>
2601 </tr>
2602 <tr class="acf-row">
2603 <td width="35%"><code>{current:post:post_password}</code></td>
2604 <td>password</td>
2605 </tr>
2606 <tr class="acf-row">
2607 <td width="35%"><code>{current:post:post_name}</code></td>
2608 <td>name</td>
2609 </tr>
2610 <tr class="acf-row">
2611 <td width="35%"><code>{current:post:to_ping}</code></td>
2612 <td></td>
2613 </tr>
2614 <tr class="acf-row">
2615 <td width="35%"><code>{current:post:pinged}</code></td>
2616 <td></td>
2617 </tr>
2618 <tr class="acf-row">
2619 <td width="35%"><code>{current:post:post_modified}</code></td>
2620 <td>2020-03-01 20:07:48</td>
2621 </tr>
2622 <tr class="acf-row">
2623 <td width="35%"><code>{current:post:post_modified_gmt}</code></td>
2624 <td>2020-03-01 19:07:48</td>
2625 </tr>
2626 <tr class="acf-row">
2627 <td width="35%"><code>{current:post:post_content_filtered}</code></td>
2628 <td></td>
2629 </tr>
2630 <tr class="acf-row">
2631 <td width="35%"><code>{current:post:post_parent}</code></td>
2632 <td>0</td>
2633 </tr>
2634 <tr class="acf-row">
2635 <td width="35%"><code>{current:post:guid}</code></td>
2636 <td><?php echo home_url('?page_id=128'); ?></td>
2637 </tr>
2638 <tr class="acf-row">
2639 <td width="35%"><code>{current:post:menu_order}</code></td>
2640 <td>0</td>
2641 </tr>
2642 <tr class="acf-row">
2643 <td width="35%"><code>{current:post:post_type}</code></td>
2644 <td>page</td>
2645 </tr>
2646 <tr class="acf-row">
2647 <td width="35%"><code>{current:post:post_mime_type}</code></td>
2648 <td></td>
2649 </tr>
2650 <tr class="acf-row">
2651 <td width="35%"><code>{current:post:comment_count}</code></td>
2652 <td>0</td>
2653 </tr>
2654 <tr class="acf-row">
2655 <td width="35%"><code>{current:post:filter}</code></td>
2656 <td>raw</td>
2657 </tr>
2658
2659 </tbody>
2660 </table>
2661 <?php
2662 }
2663
2664 function doc_current_term($field){
2665 ?>
2666 <table class="acf-table">
2667 <tbody>
2668 <tr class="acf-row">
2669 <td width="35%"><code>{current:term}</code></td>
2670 <td>23</td>
2671 </tr>
2672 <tr class="acf-row">
2673 <td width="35%"><code>{current:term:ID}</code></td>
2674 <td>23</td>
2675 </tr>
2676 <tr class="acf-row">
2677 <td width="35%"><code>{current:term:term_id}</code></td>
2678 <td>23</td>
2679 </tr>
2680 <tr class="acf-row">
2681 <td width="35%"><code>{current:term:name}</code></td>
2682 <td>Term</td>
2683 </tr>
2684 <tr class="acf-row">
2685 <td width="35%"><code>{current:term:slug}</code></td>
2686 <td>term</td>
2687 </tr>
2688 <tr class="acf-row">
2689 <td width="35%"><code>{current:term:permalink}</code></td>
2690 <td><?php echo home_url('taxonomy/term'); ?></td>
2691 </tr>
2692 <tr class="acf-row">
2693 <td width="35%"><code>{current:term:admin_url}</code></td>
2694 <td><?php echo admin_url('term.php?tag_ID=23'); ?></td>
2695 </tr>
2696 <tr class="acf-row">
2697 <td width="35%"><code>{current:term:term_group}</code></td>
2698 <td>0</td>
2699 </tr>
2700 <tr class="acf-row">
2701 <td width="35%"><code>{current:term:term_taxonomy_id}</code></td>
2702 <td>23</td>
2703 </tr>
2704 <tr class="acf-row">
2705 <td width="35%"><code>{current:term:taxonomy}</code></td>
2706 <td>taxonomy</td>
2707 </tr>
2708 <tr class="acf-row">
2709 <td width="35%"><code>{current:term:description}</code></td>
2710 <td>Content</td>
2711 </tr>
2712 <tr class="acf-row">
2713 <td width="35%"><code>{current:term:parent}</code></td>
2714 <td>0</td>
2715 </tr>
2716 <tr class="acf-row">
2717 <td width="35%"><code>{current:term:count}</code></td>
2718 <td>0</td>
2719 </tr>
2720 <tr class="acf-row">
2721 <td width="35%"><code>{current:term:filter}</code></td>
2722 <td>raw</td>
2723 </tr>
2724 </tbody>
2725 </table>
2726 <?php
2727 }
2728
2729 function doc_current_user($field){
2730 ?>
2731 <table class="acf-table">
2732 <tbody>
2733 <tr class="acf-row">
2734 <td width="35%"><code>{current:user}</code></td>
2735 <td>1</td>
2736 </tr>
2737 <tr class="acf-row">
2738 <td width="35%"><code>{current:user:ID}</code></td>
2739 <td>1</td>
2740 </tr>
2741 <tr class="acf-row">
2742 <td width="35%"><code>{current:user:user_login}</code></td>
2743 <td>login</td>
2744 </tr>
2745 <tr class="acf-row">
2746 <td width="35%"><code>{current:user:user_pass}</code></td>
2747 <td>password_hash</td>
2748 </tr>
2749 <tr class="acf-row">
2750 <td width="35%"><code>{current:user:user_nicename}</code></td>
2751 <td>nicename</td>
2752 </tr>
2753 <tr class="acf-row">
2754 <td width="35%"><code>{current:user:user_email}</code></td>
2755 <td>user@domain.com</td>
2756 </tr>
2757 <tr class="acf-row">
2758 <td width="35%"><code>{current:user:user_url}</code></td>
2759 <td>https://www.website.com</td>
2760 </tr>
2761 <tr class="acf-row">
2762 <td width="35%"><code>{current:user:permalink}</code></td>
2763 <td><?php echo home_url('author/johndoe'); ?></td>
2764 </tr>
2765 <tr class="acf-row">
2766 <td width="35%"><code>{current:user:admin_url}</code></td>
2767 <td><?php echo admin_url('user-edit.php?user_id=1'); ?></td>
2768 </tr>
2769 <tr class="acf-row">
2770 <td width="35%"><code>{current:user:user_registered}</code></td>
2771 <td>2020-02-22 22:10:02</td>
2772 </tr>
2773 <tr class="acf-row">
2774 <td width="35%"><code>{current:user:user_activation_key}</code></td>
2775 <td></td>
2776 </tr>
2777 <tr class="acf-row">
2778 <td width="35%"><code>{current:user:user_status}</code></td>
2779 <td>0</td>
2780 </tr>
2781 <tr class="acf-row">
2782 <td width="35%"><code>{current:user:display_name}</code></td>
2783 <td>John Doe</td>
2784 </tr>
2785 <tr class="acf-row">
2786 <td width="35%"><code>{current:user:nickname}</code></td>
2787 <td>JohnDoe</td>
2788 </tr>
2789 <tr class="acf-row">
2790 <td width="35%"><code>{current:user:first_name}</code></td>
2791 <td>John</td>
2792 </tr>
2793 <tr class="acf-row">
2794 <td width="35%"><code>{current:user:last_name}</code></td>
2795 <td>Doe</td>
2796 </tr>
2797 <tr class="acf-row">
2798 <td width="35%"><code>{current:user:description}</code></td>
2799 <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</td>
2800 </tr>
2801 <tr class="acf-row">
2802 <td width="35%"><code>{current:user:rich_editing}</code></td>
2803 <td>true</td>
2804 </tr>
2805 <tr class="acf-row">
2806 <td width="35%"><code>{current:user:syntax_highlighting}</code></td>
2807 <td>true</td>
2808 </tr>
2809 <tr class="acf-row">
2810 <td width="35%"><code>{current:user:comment_shortcuts}</code></td>
2811 <td>false</td>
2812 </tr>
2813 <tr class="acf-row">
2814 <td width="35%"><code>{current:user:admin_color}</code></td>
2815 <td>fresh</td>
2816 </tr>
2817 <tr class="acf-row">
2818 <td width="35%"><code>{current:user:use_ssl}</code></td>
2819 <td>1</td>
2820 </tr>
2821 <tr class="acf-row">
2822 <td width="35%"><code>{current:user:show_admin_bar_front}</code></td>
2823 <td>true</td>
2824 </tr>
2825 <tr class="acf-row">
2826 <td width="35%"><code>{current:user:locale}</code></td>
2827 <td></td>
2828 </tr>
2829 <tr class="acf-row">
2830 <td width="35%"><code>{current:user:wp_capabilities}</code></td>
2831 <td>a:1:{s:13:"administrator";b:1;}</td>
2832 </tr>
2833 <tr class="acf-row">
2834 <td width="35%"><code>{current:user:wp_user_level}</code></td>
2835 <td>10</td>
2836 </tr>
2837 <tr class="acf-row">
2838 <td width="35%"><code>{current:user:dismissed_wp_pointers}</code></td>
2839 <td></td>
2840 </tr>
2841 <tr class="acf-row">
2842 <td width="35%"><code>{current:user:show_welcome_panel}</code></td>
2843 <td>1</td>
2844 </tr>
2845 </tbody>
2846 </table>
2847 <?php
2848 }
2849
2850 function doc_current_author($field){
2851 ?>
2852 <table class="acf-table">
2853 <tbody>
2854 <tr class="acf-row">
2855 <td width="35%"><code>{current:author}</code></td>
2856 <td>1</td>
2857 </tr>
2858 <tr class="acf-row">
2859 <td width="35%"><code>{current:author:ID}</code></td>
2860 <td>1</td>
2861 </tr>
2862 <tr class="acf-row">
2863 <td width="35%"><code>{current:author:user_login}</code></td>
2864 <td>login</td>
2865 </tr>
2866 <tr class="acf-row">
2867 <td width="35%"><code>{current:author:user_pass}</code></td>
2868 <td>password_hash</td>
2869 </tr>
2870 <tr class="acf-row">
2871 <td width="35%"><code>{current:author:user_nicename}</code></td>
2872 <td>nicename</td>
2873 </tr>
2874 <tr class="acf-row">
2875 <td width="35%"><code>{current:author:user_email}</code></td>
2876 <td>user@domain.com</td>
2877 </tr>
2878 <tr class="acf-row">
2879 <td width="35%"><code>{current:author:user_url}</code></td>
2880 <td>https://www.website.com</td>
2881 </tr>
2882 <tr class="acf-row">
2883 <td width="35%"><code>{current:author:permalink}</code></td>
2884 <td><?php echo home_url('author/johndoe'); ?></td>
2885 </tr>
2886 <tr class="acf-row">
2887 <td width="35%"><code>{current:author:admin_url}</code></td>
2888 <td><?php echo admin_url('user-edit.php?user_id=1'); ?></td>
2889 </tr>
2890 <tr class="acf-row">
2891 <td width="35%"><code>{current:author:user_registered}</code></td>
2892 <td>2020-02-22 22:10:02</td>
2893 </tr>
2894 <tr class="acf-row">
2895 <td width="35%"><code>{current:author:user_activation_key}</code></td>
2896 <td></td>
2897 </tr>
2898 <tr class="acf-row">
2899 <td width="35%"><code>{current:author:user_status}</code></td>
2900 <td>0</td>
2901 </tr>
2902 <tr class="acf-row">
2903 <td width="35%"><code>{current:author:display_name}</code></td>
2904 <td>John Doe</td>
2905 </tr>
2906 <tr class="acf-row">
2907 <td width="35%"><code>{current:author:nickname}</code></td>
2908 <td>JohnDoe</td>
2909 </tr>
2910 <tr class="acf-row">
2911 <td width="35%"><code>{current:author:first_name}</code></td>
2912 <td>John</td>
2913 </tr>
2914 <tr class="acf-row">
2915 <td width="35%"><code>{current:author:last_name}</code></td>
2916 <td>Doe</td>
2917 </tr>
2918 <tr class="acf-row">
2919 <td width="35%"><code>{current:author:description}</code></td>
2920 <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</td>
2921 </tr>
2922 <tr class="acf-row">
2923 <td width="35%"><code>{current:author:rich_editing}</code></td>
2924 <td>true</td>
2925 </tr>
2926 <tr class="acf-row">
2927 <td width="35%"><code>{current:author:syntax_highlighting}</code></td>
2928 <td>true</td>
2929 </tr>
2930 <tr class="acf-row">
2931 <td width="35%"><code>{current:author:comment_shortcuts}</code></td>
2932 <td>false</td>
2933 </tr>
2934 <tr class="acf-row">
2935 <td width="35%"><code>{current:author:admin_color}</code></td>
2936 <td>fresh</td>
2937 </tr>
2938 <tr class="acf-row">
2939 <td width="35%"><code>{current:author:use_ssl}</code></td>
2940 <td>1</td>
2941 </tr>
2942 <tr class="acf-row">
2943 <td width="35%"><code>{current:author:show_admin_bar_front}</code></td>
2944 <td>true</td>
2945 </tr>
2946 <tr class="acf-row">
2947 <td width="35%"><code>{current:author:locale}</code></td>
2948 <td></td>
2949 </tr>
2950 <tr class="acf-row">
2951 <td width="35%"><code>{current:author:wp_capabilities}</code></td>
2952 <td>a:1:{s:13:"administrator";b:1;}</td>
2953 </tr>
2954 <tr class="acf-row">
2955 <td width="35%"><code>{current:author:wp_user_level}</code></td>
2956 <td>10</td>
2957 </tr>
2958 <tr class="acf-row">
2959 <td width="35%"><code>{current:author:dismissed_wp_pointers}</code></td>
2960 <td></td>
2961 </tr>
2962 <tr class="acf-row">
2963 <td width="35%"><code>{current:author:show_welcome_panel}</code></td>
2964 <td>1</td>
2965 </tr>
2966 </tbody>
2967 </table>
2968 <?php
2969 }
2970
2971 function doc_current_form($field){
2972 ?>
2973 <table class="acf-table">
2974 <tbody>
2975 <tr class="acf-row">
2976 <td width="35%"><code>{current:form}</code></td>
2977 <td>11<br/></td>
2978 </tr>
2979 <tr class="acf-row">
2980 <td width="35%"><code>{current:form:ID}</code></td>
2981 <td>11<br/></td>
2982 </tr>
2983 <tr class="acf-row">
2984 <td width="35%"><code>{current:form:title}</code></td>
2985 <td>Form<br/></td>
2986 </tr>
2987 <tr class="acf-row">
2988 <td width="35%"><code>{current:form:name}</code></td>
2989 <td>form<br/></td>
2990 </tr>
2991 <tr class="acf-row">
2992 <td width="35%"><code>{current:form:custom_key}</code></td>
2993 <td>Custom key value<br/></td>
2994 </tr>
2995 </tbody>
2996 </table>
2997 <?php
2998 }
2999
3000 }
3001
3002 // initialize
3003 acfe()->acfe_form = new acfe_form();
3004
3005 endif;
3006
3007 function acfe_form_render_fields($content, $post_id, $args){
3008
3009 return acfe()->acfe_form->render_fields($content, $post_id, $args);
3010
3011 }
3012
3013 function acfe_form_map_field_value($field, $post_id = 0, $form = array()){
3014
3015 return acfe()->acfe_form->map_field_value($field, $post_id, $form);
3016
3017 }
3018
3019 function acfe_form_map_field_value_load($field, $post_id = 0, $form = array()){
3020
3021 return acfe()->acfe_form->map_field_value_load($field, $post_id, $form);
3022
3023 }
3024
3025 function acfe_form_filter_meta($meta, $acf){
3026
3027 return acfe()->acfe_form->filter_meta($meta, $acf);
3028
3029 }
3030
3031 function acfe_form_format_value($value, $post_id = 0, $field){
3032
3033 return acfe()->acfe_form->format_value($value, $post_id, $field);
3034
3035 }
3036
3037 // Match field_abcdef123456
3038 function acfe_form_map_field_key($content){
3039
3040 if(empty($content) || !is_string($content))
3041 return $content;
3042
3043 if(!acf_is_field_key($content))
3044 return $content;
3045
3046 // Setup data
3047 $data = array();
3048
3049 $store = acf_get_store('acfe/form');
3050
3051 if($store->has('data')){
3052
3053 $data = $store->get('data');
3054
3055 }
3056
3057 if(!empty($data)){
3058
3059 foreach($data as $field){
3060
3061 if($field['key'] !== $content)
3062 continue;
3063
3064 return $field['value'];
3065
3066 }
3067
3068 }
3069
3070 return false;
3071
3072 }
3073
3074 function acfe_form_map_current($content, $post_id = 0, $form = array()){
3075
3076 if(empty($content) || !is_string($content))
3077 return $content;
3078
3079 // init
3080 $value = 0;
3081
3082 // Post
3083 $post = acf_get_post_id_info($post_id);
3084
3085 // Match current_post
3086 if($content === 'current_post'){
3087
3088 if($post['type'] === 'post')
3089 $value = $post['id'];
3090
3091 return $value;
3092
3093 }
3094
3095 // Match current_post_parent
3096 elseif($content === 'current_post_parent'){
3097
3098 if($post['type'] === 'post')
3099 $value = get_post_field('post_parent', $post['id']);
3100
3101 return $value;
3102
3103 }
3104
3105 // Match current_post_author
3106 elseif($content === 'current_post_author'){
3107
3108 if($post['type'] === 'post')
3109 $value = get_post_field('post_author', $post['id']);
3110
3111 return $value;
3112
3113 }
3114
3115 // Match current_term
3116 if($content === 'current_term'){
3117
3118 if($post['type'] === 'term')
3119 $value = $post['id'];
3120
3121 return $value;
3122
3123 }
3124
3125 // Match current_term_parent
3126 elseif($content === 'current_term_parent'){
3127
3128 if($post['type'] === 'term')
3129 $value = get_term_field('parent', $post['id']);
3130
3131 return $value;
3132
3133 }
3134
3135 // Match current_user
3136 elseif($content === 'current_user'){
3137
3138 return get_current_user_id();
3139
3140 }
3141
3142 // Match generate_password
3143 elseif($content === 'generate_password'){
3144
3145 return wp_generate_password(8, false);
3146
3147 }
3148
3149 // Match {current:post:id}
3150 elseif(strpos($content, '{current:') !== false){
3151
3152 // Match {current:name}
3153 if(preg_match_all('/{current:(.*?)}/', $content, $matches)){
3154
3155 foreach($matches[1] as $i => $name){
3156
3157 $value = false;
3158
3159 if(strpos($name, ':') !== false){
3160
3161 $explode = explode(':', $name);
3162
3163 $type = $explode[0]; // post, term, user
3164 $field = $explode[1]; // id, post_parent, post_title
3165
3166 // {current:post:id}
3167 if($type === 'post' && $post['type'] === 'post'){
3168
3169 // id
3170 if(strtolower($field) === 'id' || strtolower($field) === 'post_id'){
3171
3172 $value = $post['id'];
3173
3174 }
3175
3176 // permalink
3177 elseif(strtolower($field) === 'permalink'){
3178
3179 $value = get_permalink($post['id']);
3180
3181 }
3182
3183 // admin url
3184 elseif(strtolower($field) === 'admin_url'){
3185
3186 $value = admin_url('post.php?post=' . $post['id'] . '&action=edit');
3187
3188 }
3189
3190 // post_author_data
3191 elseif(strtolower($field) === 'post_author_data'){
3192
3193 // Retrieve Post Author data
3194 $post_author = get_post_field('post_author', $post['id']);
3195 $user_object = get_user_by('ID', $post_author);
3196
3197 if(isset($user_object->data)){
3198
3199 $user = json_decode(json_encode($user_object->data), true);
3200
3201 $user_object_meta = get_user_meta($user['ID']);
3202
3203 $user_meta = array();
3204
3205 foreach($user_object_meta as $k => $v){
3206
3207 if(!isset($v[0]))
3208 continue;
3209
3210 $user_meta[$k] = $v[0];
3211
3212 }
3213
3214 $user_array = array_merge($user, $user_meta);
3215
3216 $user_array['permalink'] = get_author_posts_url($post_author);
3217 $user_array['admin_url'] = admin_url('user-edit.php?user_id=' . $post_author);
3218
3219 $post_author_data = $user_array;
3220
3221 $field_author = $explode[2];
3222
3223 $value = $post_author_data[$field_author];
3224
3225 }
3226
3227 }
3228
3229 // other
3230 else{
3231
3232 $value = get_post_field($field, $post['id']);
3233
3234 }
3235
3236 }
3237
3238 // {current:term:id}
3239 elseif($type === 'term' && $post['type'] === 'term'){
3240
3241 // id
3242 if(strtolower($field) === 'id' || strtolower($field) === 'term_id'){
3243
3244 $value = $post['id'];
3245
3246 }
3247
3248 // permalink
3249 elseif(strtolower($field) === 'permalink'){
3250
3251 $value = get_term_link($post['id']);
3252
3253 }
3254
3255 // admin url
3256 elseif(strtolower($field) === 'admin_url'){
3257
3258 $value = admin_url('term.php?tag_ID=' . $post['id']);
3259
3260 }
3261
3262 // other
3263 else{
3264
3265 $value = get_term_field($field, $post['id']);
3266
3267 }
3268
3269 }
3270
3271 // {current:user:id}
3272 elseif($type === 'user'){
3273
3274 if(is_user_logged_in()){
3275
3276 $user_id = get_current_user_id();
3277
3278 // id
3279 if(strtolower($field) === 'id' || strtolower($field) === 'user_id'){
3280
3281 $value = $user_id;
3282
3283 }
3284
3285 // permalink
3286 elseif(strtolower($field) === 'permalink'){
3287
3288 $value = get_author_posts_url($user_id);
3289
3290 }
3291
3292 // admin url
3293 elseif(strtolower($field) === 'admin_url'){
3294
3295 $value = admin_url('user-edit.php?user_id=' . $user_id);
3296
3297 }
3298
3299 // other
3300 else{
3301
3302 $value = false;
3303
3304 $user_object = get_user_by('ID', $user_id);
3305
3306 if(isset($user_object->data)){
3307
3308 // return array
3309 $user = json_decode(json_encode($user_object->data), true);
3310
3311 $user_object_meta = get_user_meta($user_id);
3312
3313 $user_meta = array();
3314
3315 foreach($user_object_meta as $k => $v){
3316
3317 if(!isset($v[0]))
3318 continue;
3319
3320 $user_meta[$k] = $v[0];
3321
3322 }
3323
3324 $user = array_merge($user, $user_meta);
3325
3326 $value = acf_maybe_get($user, $field);
3327
3328 }
3329
3330 }
3331
3332 }
3333
3334 }
3335
3336 // {current:author:id}
3337 elseif($type === 'author' && $post['type'] === 'post'){
3338
3339 $user_id = get_post_field('post_author', $post['id']);
3340
3341 if($user_id){
3342
3343 // id
3344 if(strtolower($field) === 'id' || strtolower($field) === 'user_id'){
3345
3346 $value = $user_id;
3347
3348 }
3349
3350 // permalink
3351 elseif(strtolower($field) === 'permalink'){
3352
3353 $value = get_author_posts_url($user_id);
3354
3355 }
3356
3357 // admin url
3358 elseif(strtolower($field) === 'admin_url'){
3359
3360 $value = admin_url('user-edit.php?user_id=' . $user_id);
3361
3362 }
3363
3364 // other
3365 else{
3366
3367 $value = false;
3368
3369 $user_object = get_user_by('ID', $user_id);
3370
3371 if(isset($user_object->data)){
3372
3373 // return array
3374 $user = json_decode(json_encode($user_object->data), true);
3375
3376 $user_object_meta = get_user_meta($user_id);
3377
3378 $user_meta = array();
3379
3380 foreach($user_object_meta as $k => $v){
3381
3382 if(!isset($v[0]))
3383 continue;
3384
3385 $user_meta[$k] = $v[0];
3386
3387 }
3388
3389 $user = array_merge($user, $user_meta);
3390
3391 $value = acf_maybe_get($user, $field);
3392
3393 }
3394
3395 }
3396
3397 }
3398
3399
3400 }
3401
3402 // {current:form:id}
3403 elseif($type === 'form'){
3404
3405 if(strtolower($field) === 'id' || strtolower($field) === 'form_id'){
3406
3407 $value = acf_maybe_get($form, 'ID');
3408
3409 }
3410
3411 elseif(strtolower($field) === 'name' || strtolower($field) === 'form_name'){
3412
3413 $value = acf_maybe_get($form, 'name');
3414
3415 }
3416
3417 elseif(strtolower($field) === 'title' || strtolower($field) === 'form_title'){
3418
3419 $value = acf_maybe_get($form, 'title');
3420
3421 }else{
3422
3423 $value = acf_maybe_get($form, $field);
3424
3425 }
3426
3427 }
3428
3429 }
3430
3431 // {current:post}
3432 elseif($name === 'post' && $post['type'] === 'post'){
3433
3434 $value = $post['id'];
3435
3436 }
3437
3438 // {current:term}
3439 elseif($name === 'term' && $post['type'] === 'term'){
3440
3441 $value = $post['id'];
3442
3443 }
3444
3445 // {current:user}
3446 elseif($name === 'user'){
3447
3448 $value = get_current_user_id();
3449
3450 }
3451
3452 // {current:author}
3453 elseif($name === 'author' && $post['type'] === 'post'){
3454
3455 $value = get_post_field('post_author', $post['id']);
3456
3457 }
3458
3459 // {current:form}
3460 elseif($name === 'form'){
3461
3462 $value = acf_maybe_get($form, 'ID');
3463
3464 }
3465
3466 $content = str_replace('{current:' . $name . '}', $value, $content);
3467
3468 }
3469
3470 }
3471
3472 }
3473
3474 return $content;
3475
3476 }
3477
3478 // Match {query_var:name} {query_var:name:key}
3479 function acfe_form_map_query_var($content){
3480
3481 if(empty($content) || !is_string($content))
3482 return $content;
3483
3484 if(strpos($content, '{query_var:') === false)
3485 return $content;
3486
3487 // Match {query_var:name}
3488 if(preg_match_all('/{query_var:(.*?)}/', $content, $matches)){
3489
3490 foreach($matches[1] as $i => $name){
3491
3492 $query_var = get_query_var($name);
3493
3494 if(strpos($name, ':') !== false){
3495
3496 $explode = explode(':', $name);
3497
3498 $query_var = get_query_var($explode[0]);
3499
3500 if(is_array($query_var) && isset($query_var[$explode[1]])){
3501
3502 $query_var = $query_var[$explode[1]];
3503
3504 if(is_array($query_var) && isset($query_var[$explode[2]])){
3505
3506 $query_var = $query_var[$explode[2]];
3507
3508 }
3509
3510 }
3511
3512 }
3513
3514 $content = str_replace('{query_var:' . $name . '}', $query_var, $content);
3515
3516 }
3517
3518 }
3519
3520 return $content;
3521
3522 }
3523
3524 // Match {request:name} {request:name:key}
3525 function acfe_form_map_request($content){
3526
3527 if(empty($content) || !is_string($content))
3528 return $content;
3529
3530 if(strpos($content, '{request:') === false)
3531 return $content;
3532
3533 // Match {request:name}
3534 if(preg_match_all('/{request:(.*?)}/', $content, $matches)){
3535
3536 foreach($matches[1] as $i => $name){
3537
3538 $request = false;
3539
3540 if(isset($_REQUEST[$name]))
3541 $request = $_REQUEST[$name];
3542
3543 if(strpos($name, ':') !== false){
3544
3545 $explode = explode(':', $name);
3546
3547 if(isset($_REQUEST[$explode[0]]))
3548 $request = $_REQUEST[$explode[0]];
3549
3550 if(is_array($request) && isset($request[$explode[1]])){
3551
3552 $request = $request[$explode[1]];
3553
3554 }
3555
3556 }
3557
3558 $content = str_replace('{request:' . $name . '}', $request, $content);
3559
3560 }
3561
3562 }
3563
3564 return $content;
3565
3566 }
3567
3568 // Match {get_field:name} {get_field:name:123}
3569 function acfe_form_map_get_field($content, $post_id = 0){
3570
3571 if(empty($content) || !is_string($content))
3572 return $content;
3573
3574 if(strpos($content, '{get_field:') === false)
3575 return $content;
3576
3577 // Match {get_field:name}
3578 if(preg_match_all('/{get_field:(.*?)}/', $content, $matches)){
3579
3580 foreach($matches[1] as $i => $name){
3581
3582 if(strpos($name, ':') === false){
3583
3584 $get_field = get_field($name, $post_id);
3585
3586 }else{
3587
3588 $explode = explode(':', $name);
3589
3590 // Field
3591 $field = $explode[0];
3592
3593 // ID
3594 $id = $explode[1];
3595
3596 if($id === 'current')
3597 $id = $post_id;
3598
3599 // Format
3600 $format = true;
3601
3602 if(acf_maybe_get($explode, 2) === 'false')
3603 $format = false;
3604
3605 $get_field = get_field($field, $id, $format);
3606
3607 }
3608
3609 $content = str_replace('{get_field:' . $name . '}', $get_field, $content);
3610
3611 }
3612
3613 }
3614
3615 return $content;
3616
3617 }
3618
3619 // Match {get_option:name} {get_option:name:key}
3620 function acfe_form_map_get_option($content){
3621
3622 if(empty($content) || !is_string($content))
3623 return $content;
3624
3625 if(strpos($content, '{get_option:') === false)
3626 return $content;
3627
3628 // Match {get_option:name}
3629 if(preg_match_all('/{get_option:(.*?)}/', $content, $matches)){
3630
3631 foreach($matches[1] as $i => $name){
3632
3633 if(strpos($name, ':') === false){
3634
3635 $get_option = get_option($name);
3636
3637 }else{
3638
3639 $explode = explode(':', $name);
3640
3641 $get_option = get_option($explode[0]);
3642
3643 if(is_array($get_option) && isset($get_option[$explode[1]])){
3644
3645 $get_option = $get_option[$explode[1]];
3646
3647 }
3648
3649 }
3650
3651 $content = str_replace('{get_option:' . $name . '}', $get_option, $content);
3652
3653 }
3654
3655 }
3656
3657 return $content;
3658
3659 }
3660
3661 // Match {field:name} {field:key}
3662 function acfe_form_map_field($content){
3663
3664 if(empty($content) || !is_string($content))
3665 return $content;
3666
3667 if(strpos($content, '{field:') === false)
3668 return $content;
3669
3670 if(preg_match_all('/{field:(.*?)}/', $content, $matches)){
3671
3672 // Setup data
3673 $data = array();
3674
3675 $store = acf_get_store('acfe/form');
3676
3677 if($store->has('data')){
3678
3679 $data = $store->get('data');
3680
3681 }
3682
3683 foreach($matches[1] as $i => $field_key){
3684
3685 $key = $field_key;
3686 $format = true;
3687
3688 if(strpos($key, ':') !== false){
3689
3690 $explode = explode(':', $key);
3691
3692 $key = $explode[0]; // field_123abc
3693
3694 if($explode[1] === 'false')
3695 $format = false;
3696
3697 }
3698
3699 if(!empty($data)){
3700
3701 foreach($data as $field){
3702
3703 if($field['name'] !== $key && $field['key'] !== $key)
3704 continue;
3705
3706 // Value
3707 $value = $field['value'];
3708
3709 if($format)
3710 $value = acfe_form_format_value($field['value'], 0, $field['field']);
3711
3712 // Replace
3713 $content = str_replace('{field:' . $field_key . '}', $value, $content);
3714
3715 break;
3716
3717 }
3718
3719 }
3720
3721 // Fallback (clean)
3722 $content = str_replace('{field:' . $field_key . '}', '', $content);
3723
3724 }
3725
3726 }
3727
3728 // Return
3729 return $content;
3730
3731 }
3732
3733 // Match {fields}
3734 function acfe_form_map_fields($content){
3735
3736 if(empty($content) || !is_string($content))
3737 return $content;
3738
3739 if(strpos($content, '{fields}') === false)
3740 return $content;
3741
3742 // Match {fields}
3743 if(preg_match('/{fields}/', $content, $matches)){
3744
3745 // Setup data
3746 $data = array();
3747
3748 $store = acf_get_store('acfe/form');
3749
3750 if($store->has('data')){
3751
3752 $data = $store->get('data');
3753
3754 }
3755
3756 $content_html = '';
3757
3758 if(!empty($data)){
3759
3760 foreach($data as $field){
3761
3762 // Label
3763 $label = !empty($field['label']) ? $field['label'] : $field['name'];
3764
3765 // Value
3766 $value = acfe_form_format_value($field['value'], 0, $field['field']);
3767
3768 // Add
3769 $content_html .= $label . ': ' . $value . "<br/>\n";
3770
3771 }
3772
3773 }
3774
3775 $content_html = apply_filters('acfe/form/template_tag/fields', $content_html, $data);
3776
3777 // Replace
3778 $content = str_replace('{fields}', $content_html, $content);
3779
3780 }
3781
3782 // Return
3783 return $content;
3784
3785 }
3786
3787 function acfe_form_map_vs_fields($map, $fields, $post_id = 0, $form = array()){
3788
3789 $return = array();
3790
3791 foreach($map as $mkey => $mval){
3792
3793 if(empty($mval))
3794 continue;
3795
3796 $return[$mkey] = acfe_form_map_field_value($mval, $post_id, $form);
3797
3798 }
3799
3800 foreach($fields as $fkey => $fvalue){
3801
3802 if(isset($return[$fkey]))
3803 continue;
3804
3805 $return[$fkey] = acfe_form_map_field_value($fvalue, $post_id, $form);
3806
3807 }
3808
3809 return $return;
3810
3811 }