• Class
  • Tree
  • Deprecated

Classes

  • Papi_Admin
  • Papi_Admin_Ajax
  • Papi_Admin_Assets
  • Papi_Admin_Columns
  • Papi_Admin_Menu
  • Papi_Admin_Meta_Box
  • Papi_Admin_Meta_Box_Tabs
  • Papi_Admin_Meta_Handler
  • Papi_Admin_Option_Handler
  • Papi_Admin_Taxonomy
  • Papi_Admin_View
  • Papi_Attachment_Type
  • Papi_CLI
  • Papi_CLI_Command
  • Papi_CLI_Post_Command
  • Papi_CLI_Term_Command
  • Papi_CLI_Type_Command
  • Papi_Conditional_Rules
  • Papi_Container
  • Papi_Core_Autoload
  • Papi_Core_Box
  • Papi_Core_Conditional
  • Papi_Core_Conditional_Rule
  • Papi_Core_Data_Handler
  • Papi_Core_Meta_Store
  • Papi_Core_Property
  • Papi_Core_Tab
  • Papi_Core_Type
  • Papi_Entry_Type
  • Papi_Loader
  • Papi_Option_Store
  • Papi_Option_Type
  • Papi_Page_Type
  • Papi_Porter
  • Papi_Porter_Driver
  • Papi_Porter_Driver_Core
  • Papi_Post_Store
  • 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_Group
  • 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
  • Papi_Taxonomy_Type
  • Papi_Term_Store

Functions

  • papi
  • papi_action_delete_value
  • 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_delete_field
  • papi_delete_option
  • papi_delete_property_meta_value
  • papi_delete_term_field
  • papi_display_page_type
  • papi_doing_ajax
  • papi_entry_type_exists
  • papi_esc_html
  • papi_f
  • papi_field_shortcode
  • papi_field_value
  • papi_filter_conditional_rule_allowed
  • papi_filter_format_value
  • papi_filter_load_value
  • papi_filter_settings_directories
  • papi_filter_settings_only_page_type
  • papi_filter_settings_only_taxonomy_type
  • 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_show_standard_taxonomy_type
  • papi_filter_settings_sort_order
  • papi_filter_settings_standard_page_type_description
  • papi_filter_settings_standard_page_type_name
  • papi_filter_settings_standard_page_type_thumbnail
  • papi_filter_settings_standard_taxonomy_type_name
  • papi_filter_update_value
  • papi_from_property_array_slugs
  • papi_get_all_core_type_files
  • papi_get_all_entry_types
  • papi_get_all_files_in_directory
  • papi_get_all_page_types
  • papi_get_class_name
  • papi_get_core_type_base_path
  • papi_get_core_type_file_path
  • papi_get_entry_type
  • papi_get_entry_type_by_id
  • papi_get_entry_type_by_meta_id
  • papi_get_entry_type_count
  • papi_get_entry_type_css_class
  • papi_get_entry_type_id
  • papi_get_entry_type_template
  • papi_get_field
  • papi_get_file_path
  • papi_get_meta_id
  • papi_get_meta_id_column
  • papi_get_meta_store
  • papi_get_meta_type
  • 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_type_id
  • papi_get_page_type_key
  • papi_get_page_type_name
  • 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_type
  • papi_get_property_type_key
  • papi_get_property_type_key_f
  • papi_get_qs
  • papi_get_sanitized_post
  • papi_get_slugs
  • papi_get_taxonomies
  • papi_get_taxonomy
  • papi_get_taxonomy_label
  • papi_get_taxonomy_type_id
  • papi_get_taxonomy_type_name
  • papi_get_template_file_name
  • papi_get_term_field
  • papi_get_term_id
  • papi_get_term_slugs
  • papi_html_name
  • papi_html_tag
  • papi_include_query_strings
  • papi_include_template
  • papi_is_empty
  • papi_is_json
  • papi_is_method
  • papi_is_option_type
  • papi_is_page_type
  • papi_is_property
  • papi_is_property_type_key
  • papi_is_rule
  • papi_load_page_type_id
  • papi_load_taxonomy_type_id
  • 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_populate_properties
  • papi_property
  • 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_set_taxonomy_type_id
  • papi_slugify
  • papi_sort_order
  • papi_supports_term_meta
  • papi_tab
  • papi_tabs_setup
  • papi_taxonomy_shortcode
  • papi_template
  • papi_template_include
  • papi_to_array
  • papi_to_property_array_slugs
  • papi_underscorify
  • papi_update_field
  • papi_update_option
  • papi_update_property_meta_value
  • papi_update_property_meta_value_cache_delete
  • papi_update_term_field
  • papify
  • the_papi_field
  • the_papi_option
  • the_papi_page_type_name
  • the_papi_taxonomy_type_name
  • the_papi_term_field
  • unpapify
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 
<?php

/**
 * Property that shows which relationships that exists
 * between the current post and other posts.
 */
class Papi_Property_Reference extends Papi_Property {

    /**
     * Get default settings.
     *
     * @return array
     */
    public function get_default_settings() {
        return [
            'slug'      => [],
            'page_type' => []
        ];
    }

    /**
     * Render property html.
     */
    public function html() {
        $post_id  = papi_get_post_id();
        $settings = $this->get_settings();

        // Create query array for every page type.
        $page_types = array_map( function ( $page_type ) {
            return [
                'key'     => papi_get_page_type_key(),
                'value'   => $page_type,
                'compare' => 'LIKE'
            ];
        }, papi_to_array( $settings->page_type ) );

        // Add relation.
        $page_types['relation'] = 'OR';

        // Prepare arguments for WP_Query.
        $args = [
            'post_type'              => 'any',
            'no_found_rows'          => true,
            'update_post_meta_cache' => false,
            'update_post_term_cache' => false,
            'meta_query'             => $page_types
        ];

        $posts = ( new WP_Query( $args ) )->posts;

        $values = [];

        foreach ( papi_to_array( $settings->slug ) as $slug ) {
            foreach ( $posts as $post ) {
                $val = papi_get_field( $post->ID, $slug );

                $val = array_filter( papi_to_array( $val ), function ( $item ) use ( $post_id ) {
                    return is_object( $item ) && $item->ID === $post_id;
                } );

                if ( empty( $val ) ) {
                    continue;
                }

                $page_type = papi_get_entry_type_by_meta_id( $post->ID );

                if ( empty( $page_type ) ) {
                    continue;
                }

                // Create the array
                if ( ! isset( $values[$post->post_type] ) ) {
                    $values[$post->post_type] = [];
                }

                if ( ! isset( $values[$post->post_type][$page_type->name] ) ) {
                    $values[$post->post_type][$page_type->name] = [];
                }

                // Add the post
                if ( ! isset( $values[$post->post_type][$page_type->name][$post->ID] ) && ! empty( $val ) ) {
                    $values[$post->post_type][$page_type->name][$post->ID] = $post;
                }
            }
        }

        ?>
        <ul class="papi-property-reference" data-papi-rule="<?php echo $this->html_name(); ?>">
            <?php if ( empty( $values ) ): ?>
                <p>
                    <?php _e( 'No references exists', 'papi' ); ?>
                </p>
            <?php
            endif;
            ksort( $values ); foreach ( $values as $title => $val ):
                $post_type = get_post_type_object( $title );
                ?>
                <li>
                    <h3><?php echo $post_type->labels->name; ?></h3>
                    <div class="handlediv" title="Click to toggle"><br></div>
                </li>
                <li>
                    <div class="page-types">
                        <ul>
                            <?php ksort( $val ); foreach ( $val as $name => $posts ): ?>
                                <li class="heading-border">
                                    <h4><?php echo $name; ?></h4>
                                    <div class="handlediv" title="Click to toggle"><br></div>
                                </li>
                                <li>
                                    <div class="box">
                                        <?php $i = 0;
                                        foreach ( $posts as $post ): ?>
                                            <a href="<?php echo get_edit_post_link( $post->ID ); ?>"><?php echo $post->post_title; ?></a>
                                        <?php $i++;
                                        endforeach; ?>
                                        <div class="clear"></div>
                                    </div>
                                </li>
                            <?php endforeach; ?>
                        </ul>
                        <div class="clear"></div>
                    </div>
                </li>
            <?php endforeach; ?>
        </ul>
        <?php
    }
}
API documentation generated by ApiGen