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:  * Post property that can handle relationship
  5:  * between posts.
  6:  */
  7: class Papi_Property_Post extends Papi_Property {
  8: 
  9:     /**
 10:      * The convert type.
 11:      *
 12:      * @var string
 13:      */
 14:     public $convert_type = 'object';
 15: 
 16:     /**
 17:      * Format the value of the property before it's returned
 18:      * to WordPress admin or the site.
 19:      *
 20:      * @param  mixed  $value
 21:      * @param  string $slug
 22:      * @param  int    $post_id
 23:      *
 24:      * @return array
 25:      */
 26:     public function format_value( $value, $slug, $post_id ) {
 27:         if ( is_numeric( $value ) && intval( $value ) !== 0 ) {
 28:             return get_post( $value );
 29:         }
 30: 
 31:         return $this->default_value;
 32:     }
 33: 
 34:     /**
 35:      * Get default settings.
 36:      *
 37:      * @return array
 38:      */
 39:     public function get_default_settings() {
 40:         return [
 41:             'placeholder'   => '',
 42:             'post_type'     => 'post',
 43:             'select2'       => true,
 44:             'query'         => []
 45:         ];
 46:     }
 47: 
 48:     /**
 49:      * Get posts.
 50:      *
 51:      * @param  stdClass $settings
 52:      *
 53:      * @return array
 54:      */
 55:     protected function get_posts( $settings ) {
 56:         // By default we add posts per page key with the value -1 (all).
 57:         if ( ! isset( $settings->query['posts_per_page'] ) ) {
 58:             $settings->query['posts_per_page'] = -1;
 59:         }
 60: 
 61:         // Prepare arguments for WP_Query.
 62:         $args = array_merge( $settings->query, [
 63:             'post_type'              => papi_to_array( $settings->post_type ),
 64:             'no_found_rows'          => true,
 65:             'update_post_meta_cache' => false,
 66:             'update_post_term_cache' => false
 67:         ] );
 68: 
 69:         $query = new WP_Query( $args );
 70:         $posts = $query->get_posts();
 71: 
 72:         // Keep only objects.
 73:         $posts   = papi_get_only_objects( $posts );
 74:         $results = [];
 75: 
 76:         // Set labels.
 77:         foreach ( $posts as $post ) {
 78:             $obj = get_post_type_object( $post->post_type );
 79: 
 80:             if ( empty( $obj ) ) {
 81:                 continue;
 82:             }
 83: 
 84:             if ( ! isset( $results[$obj->labels->menu_name] ) ) {
 85:                 $results[$obj->labels->menu_name] = [];
 86:             }
 87: 
 88:             $results[$obj->labels->menu_name][] = $post;
 89:         }
 90: 
 91:         return $results;
 92:     }
 93: 
 94:     /**
 95:      * Render property html.
 96:      */
 97:     public function html() {
 98:         $settings   = $this->get_settings();
 99:         $value      = $this->get_value();
100: 
101:         if ( is_object( $value ) ) {
102:             $value = $value->ID;
103:         } else {
104:             $value = 0;
105:         }
106: 
107:         $posts        = $this->get_posts( $settings );
108:         $render_label = count( $posts ) > 1;
109:         $classes      = 'papi-fullwidth';
110: 
111:         if ( $settings->select2 ) {
112:             $classes = ' papi-component-select2';
113:         }
114:         ?>
115: 
116:         <div class="papi-property-post">
117:             <select
118:                 id="<?php echo $this->html_id(); ?>"
119:                 name="<?php echo $this->html_name(); ?>"
120:                 class="<?php echo $classes; ?>"
121:                 data-allow-clear="true"
122:                 data-placeholder="<?php echo $settings->placeholder; ?>"
123:                 data-width="100%">
124: 
125:                 <?php if ( ! empty( $settings->placeholder ) ): ?>
126:                     <option value=""></option>
127:                 <?php endif; ?>
128: 
129:                 <?php foreach ( $posts as $label => $items ) : ?>
130: 
131:                     <?php if ( $render_label && is_string( $label ) ): ?>
132:                         <optgroup label="<?php echo $label; ?>">
133:                     <?php endif; ?>
134: 
135:                     <?php
136:                     foreach ( $items as $post ) {
137:                         if ( papi_is_empty( $post->post_title ) ) {
138:                                 continue;
139:                         }
140: 
141:                         papi_render_html_tag( 'option', [
142:                             'value'    => $post->ID,
143:                             'selected' => $value === $post->ID ? 'selected' : null,
144: 
145:                             $post->post_title
146:                         ] );
147:                     }
148:                     ?>
149: 
150:                     <?php if ( $render_label ): ?>
151:                         </optgroup>
152:                     <?php endif; ?>
153: 
154:                 <?php endforeach; ?>
155: 
156:             </select>
157:         </div>
158:         <?php
159:     }
160: 
161:     /**
162:      * Import value to the property.
163:      *
164:      * @param  mixed  $value
165:      * @param  string $slug
166:      * @param  int    $post_id
167:      *
168:      * @return mixed
169:      */
170:     public function import_value( $value, $slug, $post_id ) {
171:         if ( $value instanceof WP_Post ) {
172:             return $value->ID;
173:         }
174: 
175:         if ( is_numeric( $value ) ) {
176:             return (int) $value;
177:         }
178: 
179:         return $this->default_value;
180:     }
181: }
182: 
API documentation generated by ApiGen