in web/wp-content/plugins/acf-extended/includes/modules/form/module-form-action-post.php [433:592]
function process($form, $action){
// apply tags
$action = $this->setup_action($action, $form);
// vars
$save = $action['save'];
$post_id = (int) acf_extract_var($save, 'target');
$post_thumbnail = acf_extract_var($save, 'post_thumbnail');
$post_terms = acf_extract_var($save, 'post_terms');
$append_terms = acf_extract_var($save, 'append_terms');
// pre-insert post
if($action['type'] === 'insert_post'){
$post_id = wp_insert_post(array(
'post_title' => 'Post'
));
}
// invalid target
if(!$post_id || is_wp_error($post_id)){
return false;
}
// context
// generated_id
acfe_add_context(array('context' => 'save', 'generated_id' => $post_id));
acfe_apply_tags($action['save']['post_title']);
acfe_apply_tags($action['save']['post_name']);
$save['post_title'] = $action['save']['post_title'];
$save['post_name'] = $action['save']['post_name'];
acfe_delete_context(array('context', 'generated_id'));
// default post arguments
$args = array(
'ID' => $post_id
);
// construct post arguments
foreach($save as $post_field => $value){
// post_type, post_title, post_status, post_content etc...
if(in_array($post_field, $this->fields) && !acf_is_empty($value)){
$args[ $post_field ] = $value;
}
}
// filters
$args = apply_filters("acfe/form/submit_post_args", $args, $form, $action);
$args = apply_filters("acfe/form/submit_post_args/form={$form['name']}", $args, $form, $action);
$args = apply_filters("acfe/form/submit_post_args/action={$action['name']}", $args, $form, $action);
// bail early
if($args === false){
// delete pre-insert post
if($action['type'] === 'insert_post'){
wp_delete_post($post_id, true);
}
return false;
}
// update post
$post_id = wp_update_post($args);
// bail early
if(!$post_id || is_wp_error($post_id)){
return false;
}
// post thumbnail
if(!acf_is_empty($post_thumbnail)){
if($post_thumbnail){
set_post_thumbnail($post_id, $post_thumbnail);
}else{
delete_post_thumbnail($post_id);
}
}
// post terms
$process_terms = array();
// loop post terms
foreach($post_terms as $value){
// vars
$taxonomy = false;
$id_or_slug = false;
// numeric
if(is_numeric($value)){
// get term by id
$term = get_term($value);
if(!empty($term) && !is_wp_error($term)){
$taxonomy = $term->taxonomy;
$id_or_slug = $term->term_id;
}
// slug
}elseif(is_string($value)){
// slug can be in the following format:
// My Term|taxonomy
$keys = explode('|', $value);
$id_or_slug = array_shift($keys);
$taxonomy = array_shift($keys);
// no taxonomy provided
if(!$taxonomy){
// try to retrieve taxonomy from the created post
$post_type = acf_maybe_get($args, 'post_type', 'post');
$taxonomies = get_object_taxonomies($post_type);
$taxonomy = array_shift($taxonomies);
}
}
// assign term
if($taxonomy && $id_or_slug){
// group by taxonomy
$process_terms[ $taxonomy ][] = $id_or_slug;
}
}
// loop terms to set
foreach($process_terms as $taxonomy => $terms){
// deprecated filter
$append_terms = apply_filters_deprecated("acfe/form/submit/post_append_terms", array($append_terms, $post_id, $terms, $taxonomy, $form, $action['name']), '0.9', "acfe/form/prepare_post");
$append_terms = apply_filters_deprecated("acfe/form/submit/post_append_terms/form={$form['name']}", array($append_terms, $post_id, $terms, $taxonomy, $form, $action['name']), '0.9', "acfe/form/prepare_post/form={$form['name']}");
$append_terms = apply_filters_deprecated("acfe/form/submit/post_append_terms/action={$action['name']}", array($append_terms, $post_id, $terms, $taxonomy, $form, $action['name']), '0.9', "acfe/form/prepare_post/action={$action['name']}");
wp_set_object_terms($post_id, $terms, $taxonomy, $append_terms);
}
// return
return array(
'post_id' => $post_id,
'args' => $args
);
}