function process()

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
        );
        
    }