Overview

Classes

  • Papi_Admin
  • Papi_Admin_Ajax
  • Papi_Admin_Assets
  • Papi_Admin_Management_Pages
  • Papi_Admin_Menu
  • Papi_Admin_Meta_Box
  • Papi_Admin_Meta_Box_Tabs
  • Papi_Admin_Option_Handler
  • Papi_Admin_Post_Handler
  • Papi_Admin_View
  • Papi_Attachment_Type
  • Papi_Conditional_Rules
  • Papi_Container
  • Papi_Core_Autoload
  • Papi_Core_Conditional
  • Papi_Core_Conditional_Rule
  • Papi_Core_Data_Handler
  • Papi_Core_Page
  • Papi_Core_Property
  • Papi_Core_Type
  • Papi_Loader
  • Papi_Option_Page
  • Papi_Option_Type
  • Papi_Page_Type
  • Papi_Page_Type_Meta
  • Papi_Porter
  • Papi_Porter_Driver
  • Papi_Porter_Driver_Core
  • Papi_Post_Page
  • Papi_Property
  • Papi_Property_Bool
  • Papi_Property_Checkbox
  • Papi_Property_Color
  • Papi_Property_Datetime
  • Papi_Property_Divider
  • Papi_Property_Dropdown
  • Papi_Property_Editor
  • Papi_Property_Email
  • Papi_Property_File
  • Papi_Property_Flexible
  • Papi_Property_Gallery
  • Papi_Property_Hidden
  • Papi_Property_Html
  • Papi_Property_Image
  • Papi_Property_Link
  • Papi_Property_Number
  • Papi_Property_Post
  • Papi_Property_Radio
  • Papi_Property_Reference
  • Papi_Property_Relationship
  • Papi_Property_Repeater
  • Papi_Property_String
  • Papi_Property_Term
  • Papi_Property_Text
  • Papi_Property_Url
  • Papi_Property_User

Functions

  • current_page
  • papi
  • papi_action_delete_value
  • papi_action_include
  • papi_append_post_type_query
  • papi_body_class
  • papi_cache_delete
  • papi_cache_get
  • papi_cache_key
  • papi_cache_set
  • papi_camel_case
  • papi_cast_string_value
  • papi_convert_to_string
  • papi_current_user_is_allowed
  • papi_dashify
  • papi_delete_field
  • papi_delete_option
  • papi_delete_property_meta_value
  • papi_display_page_type
  • papi_doing_ajax
  • papi_esc_html
  • papi_f
  • papi_field
  • papi_field_shortcode
  • papi_field_value
  • papi_fields
  • papi_filter_conditional_rule_allowed
  • papi_filter_core_load_one_type_on
  • papi_filter_format_value
  • papi_filter_load_value
  • papi_filter_settings_directories
  • papi_filter_settings_only_page_type
  • papi_filter_settings_page_type_column_title
  • papi_filter_settings_show_page_type
  • papi_filter_settings_show_standard_page_type
  • papi_filter_settings_show_standard_page_type_in_filter
  • papi_filter_settings_sort_order
  • papi_filter_settings_standard_page_description
  • papi_filter_settings_standard_page_name
  • papi_filter_settings_standard_page_thumbnail
  • papi_filter_update_value
  • papi_from_property_array_slugs
  • papi_get_all_files_in_directory
  • papi_get_all_page_type_files
  • papi_get_all_page_types
  • papi_get_box_property
  • papi_get_class_name
  • papi_get_field
  • papi_get_file_path
  • papi_get_number_of_pages
  • papi_get_only_objects
  • papi_get_option
  • papi_get_options_and_properties
  • papi_get_or_post
  • papi_get_page
  • papi_get_page_new_url
  • papi_get_page_query_strings
  • papi_get_page_type
  • papi_get_page_type_base_path
  • papi_get_page_type_by_id
  • papi_get_page_type_by_post_id
  • papi_get_page_type_id
  • papi_get_page_type_key
  • papi_get_page_type_meta_value
  • papi_get_page_type_name
  • papi_get_page_type_template
  • papi_get_parent_post_id
  • papi_get_post_id
  • papi_get_post_type
  • papi_get_post_type_label
  • papi_get_post_types
  • papi_get_property_class_name
  • papi_get_property_meta_value
  • papi_get_property_options
  • papi_get_property_type
  • papi_get_property_type_key
  • papi_get_property_type_key_f
  • papi_get_qs
  • papi_get_sanitized_post
  • papi_get_slugs
  • papi_get_tab_options
  • papi_html_name
  • papi_html_tag
  • papi_include_template
  • papi_is_empty
  • papi_is_json
  • papi_is_method
  • papi_is_option_page
  • papi_is_option_type
  • papi_is_page_type
  • papi_is_property
  • papi_is_property_type_key
  • papi_is_rule
  • papi_management_page_type_render_box
  • papi_maybe_convert_to_array
  • papi_maybe_convert_to_object
  • papi_maybe_get_callable_value
  • papi_maybe_json_decode
  • papi_maybe_json_encode
  • papi_nl2br
  • papi_option_shortcode
  • papi_option_type_exists
  • papi_page_type_exists
  • papi_populate_properties
  • papi_property
  • papi_remove_papi
  • papi_remove_trailing_quotes
  • papi_render_html_tag
  • papi_render_properties
  • papi_render_property
  • papi_require_text
  • papi_required_html
  • papi_rule
  • papi_santize_data
  • papi_set_page_type_id
  • papi_setup_tabs
  • papi_slugify
  • papi_sort_order
  • papi_tab
  • papi_template
  • papi_template_include
  • papi_to_array
  • papi_to_property_array_slugs
  • papi_translate_keys
  • papi_underscorify
  • papi_update_field
  • papi_update_option
  • papi_update_property_meta_value
  • papi_with
  • papify
  • the_papi_field
  • the_papi_option
  • the_papi_page_type_name
  • Overview
  • Class
  1: <?php
  2: 
  3: /**
  4:  * Admin class that handle post data.
  5:  */
  6: final class Papi_Admin_Post_Handler extends Papi_Core_Data_Handler {
  7: 
  8:     /**
  9:      * The constructor.
 10:      */
 11:     public function __construct() {
 12:         $this->setup_actions();
 13:     }
 14: 
 15:     /**
 16:      * Overwrite post data in `posts` table.
 17:      *
 18:      * @param int $post_id
 19:      */
 20:     private function overwrite_post_data( $post_id ) {
 21:         global $wpdb;
 22: 
 23:         if ( empty( $post_id ) || empty( $this->overwrite ) ) {
 24:             return;
 25:         }
 26: 
 27:         $wpdb->update( $wpdb->posts, $this->overwrite, ['ID' => $post_id] );
 28:     }
 29: 
 30:     /**
 31:      * Pre save page template and page type.
 32:      *
 33:      * @param int $post_id
 34:      */
 35:     private function pre_save( $post_id ) {
 36:         if ( empty( $post_id ) ) {
 37:             return;
 38:         }
 39: 
 40:         $data = $this->get_pre_data();
 41: 
 42:         foreach ( $data as $key => $value ) {
 43:             if ( empty( $value ) ) {
 44:                 continue;
 45:             }
 46: 
 47:             if ( is_array( $value ) ) {
 48:                 list( $keys, $value ) = $this->get_pre_deep_keys_value( $value );
 49:                 $key = sprintf( '%s_%s', $key, implode( '_', $keys ) );
 50:             }
 51: 
 52:             update_post_meta( $post_id, $key, $value );
 53:         }
 54:     }
 55: 
 56:     /**
 57:      * Save meta boxes.
 58:      *
 59:      * @param int    $post_id
 60:      * @param object $post
 61:      */
 62:     public function save_meta_boxes( $post_id, $post ) {
 63:         // Can't proceed without a post id or post.
 64:         if ( empty( $post_id ) || empty( $post ) ) {
 65:             return;
 66:         }
 67: 
 68:         // Don't save meta boxes for revisions or autosaves
 69:         if ( defined( 'DOING_AUTOSAVE' ) || is_int( wp_is_post_revision( $post ) ) || is_int( wp_is_post_autosave( $post ) ) ) {
 70:             return;
 71:         }
 72: 
 73:         // Check the post being saved has the same id as the post id.
 74:         // This will prevent other save post events.
 75:         if ( $this->valid_post_id( $post_id ) ) {
 76:             return;
 77:         }
 78: 
 79:         // Check if our nonce is vailed.
 80:         if ( ! wp_verify_nonce( papi_get_sanitized_post( 'papi_meta_nonce' ), 'papi_save_data' ) ) {
 81:             return;
 82:         }
 83: 
 84:         // Check for any of the capabilities before we save the code.
 85:         if ( ! current_user_can( 'edit_posts' ) || ! current_user_can( 'edit_pages' ) ) {
 86:             return;
 87:         }
 88: 
 89:         $this->save_properties( $post_id );
 90:     }
 91: 
 92:     /**
 93:      * Save properties.
 94:      *
 95:      * @param int $post_id
 96:      */
 97:     public function save_properties( $post_id ) {
 98:         // Pre save page template, page type and some others dynamic values.
 99:         $this->pre_save( $post_id );
100: 
101:         // Get properties data.
102:         $data = $this->get_post_data();
103: 
104:         // Prepare properties data.
105:         $data = $this->prepare_properties_data( $data, $post_id );
106: 
107:         // Overwrite post data if any.
108:         $this->overwrite_post_data( $post_id );
109: 
110:         // Save all properties value
111:         foreach ( $data as $key => $value ) {
112:             papi_update_property_meta_value( [
113:                 'post_id'       => $post_id,
114:                 'slug'          => $key,
115:                 'value'         => $value
116:             ] );
117:         }
118:     }
119: 
120:     /**
121:      * Setup actions.
122:      */
123:     private function setup_actions() {
124:         add_action( 'save_post', [$this, 'save_meta_boxes'], 1, 2 );
125:     }
126: 
127:     /**
128:      * Check if post id is valid or not.
129:      *
130:      * @param  int $post_id
131:      *
132:      * @return bool
133:      */
134:     private function valid_post_id( $post_id ) {
135:         $key = papi_get_sanitized_post( 'action' ) === 'save-attachment-compat'
136:             ? 'id'
137:             : 'post_ID';
138: 
139:         return papi_get_sanitized_post( $key ) !== strval( $post_id );
140:     }
141: }
142: 
143: if ( is_admin() ) {
144:     new Papi_Admin_Post_Handler;
145: }
146: 
API documentation generated by ApiGen