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:  * Core class that implements a Papi page.
  5:  */
  6: abstract class Papi_Core_Page extends Papi_Container {
  7: 
  8:     /**
  9:      * Type post.
 10:      *
 11:      * @var string
 12:      */
 13:     const TYPE_POST = 'post';
 14: 
 15:     /**
 16:      * Type option.
 17:      *
 18:      * @var string
 19:      */
 20:     const TYPE_OPTION = 'option';
 21: 
 22:     /**
 23:      * The WordPress post id if it exists.
 24:      *
 25:      * @var int
 26:      */
 27:     public $id;
 28: 
 29:     /**
 30:      * The type of page.
 31:      *
 32:      * @var string
 33:      */
 34:     protected $type;
 35: 
 36:     /**
 37:      * Get Papi property value.
 38:      *
 39:      * @param  string $slug
 40:      *
 41:      * @return mixed
 42:      */
 43:     public function __get( $slug ) {
 44:         return $this->get_value( $slug );
 45:     }
 46: 
 47:     /**
 48:      * Get value from property.
 49:      *
 50:      * @param  string $slug
 51:      *
 52:      * @return mixed
 53:      */
 54:     public function get_value( $slug ) {
 55:         $slug  = papi_remove_papi( $slug );
 56:         $value = papi_get_property_meta_value( $this->id, $slug, $this->type );
 57:         return $this->convert( $slug, $value );
 58:     }
 59: 
 60:     /**
 61:      * Convert property value with the property type converter.
 62:      *
 63:      * @param  string $slug
 64:      * @param  mixed  $value
 65:      *
 66:      * @return mixed
 67:      */
 68:     protected function convert( $slug, $value ) {
 69:         $property = $this->get_property( $slug );
 70: 
 71:         // If no property type is found, just return null.
 72:         if ( ! papi_is_property( $property ) ) {
 73:             return;
 74:         }
 75: 
 76:         if ( papi_is_empty( $value ) ) {
 77:             if ( ! papi_is_empty( $property->get_option( 'value' ) ) ) {
 78:                 return $property->get_option( 'value' );
 79:             }
 80:             return;
 81:         }
 82: 
 83:         // A property need to know about the page.
 84:         $property->set_page( $this );
 85: 
 86:         // Run load value method right after the value has been loaded from the database.
 87:         $value = $property->load_value( $value, $slug, $this->id );
 88: 
 89:         if ( $this->type !== self::TYPE_OPTION ) {
 90:             $value = papi_filter_load_value(
 91:                 $property->type,
 92:                 $value,
 93:                 $slug,
 94:                 $this->id
 95:             );
 96:         }
 97: 
 98:         // Format the value from the property class.
 99:         $value = $property->format_value( $value, $slug, $this->id );
100: 
101:         if ( ! is_admin() || $this->type !== self::TYPE_OPTION ) {
102:             $value = papi_filter_format_value(
103:                 $property->type,
104:                 $value,
105:                 $slug,
106:                 $this->id
107:             );
108:         }
109: 
110:         if ( is_array( $value ) ) {
111:             $value = array_filter( $value );
112:         }
113: 
114:         return $value;
115:     }
116: 
117:     /**
118:      * Check if the `$type` match the page type.
119:      *
120:      * @param  string $type
121:      *
122:      * @return bool
123:      */
124:     public function is( $type ) {
125:         return $this->type === $type;
126:     }
127: 
128:     /**
129:      * Get page from factory.
130:      *
131:      * @param  int    $post_id
132:      * @param  string $type
133:      *
134:      * @return mixed
135:      */
136:     public static function factory( $post_id, $type = self::TYPE_POST ) {
137:         if ( papi_is_option_page() ) {
138:             $type = self::TYPE_OPTION;
139:         }
140: 
141:         $class_suffix = '_' . ucfirst( $type ) . '_Page';
142:         $class_name   = 'Papi' . $class_suffix;
143: 
144:         if ( ! class_exists( $class_name ) ) {
145:             return;
146:         }
147: 
148:         $post_id = papi_get_post_id( $post_id );
149:         $page = new $class_name( $post_id );
150:         $page->set_type( $type );
151: 
152:         if ( ! $page->valid() ) {
153:             return;
154:         }
155: 
156:         return $page;
157:     }
158: 
159:     /**
160:      * Get property from page type.
161:      *
162:      * @param  string $slug
163:      * @param  string $child_slug
164:      *
165:      * @return Papi_Property
166:      */
167:     abstract public function get_property( $slug, $child_slug = '' );
168: 
169:     /**
170:      * Set type.
171:      *
172:      * @param string $type
173:      */
174:     public function set_type( $type ) {
175:         $this->type = $type;
176:     }
177: 
178:     /**
179:      * Check if it's a valid page.
180:      *
181:      * @return bool
182:      */
183:     abstract public function valid();
184: 
185:     /**
186:      * Check if the page has a valid type.
187:      *
188:      * @return bool
189:      */
190:     protected function valid_type() {
191:         $type = strtoupper( $this->type );
192:         return defined( "self::TYPE_$type" );
193:     }
194: }
195: 
API documentation generated by ApiGen