1: <?php
2:
3: 4: 5: 6:
7: class Papi_Property_Reference extends Papi_Property {
8:
9: 10: 11: 12: 13:
14: public function get_default_settings() {
15: return [
16: 'slug' => [],
17: 'page_type' => []
18: ];
19: }
20:
21: 22: 23:
24: public function html() {
25: $post_id = papi_get_post_id();
26: $settings = $this->get_settings();
27:
28:
29: $page_types = array_map( function ( $page_type ) {
30: return [
31: 'key' => papi_get_page_type_key(),
32: 'value' => $page_type,
33: 'compare' => 'LIKE'
34: ];
35: }, papi_to_array( $settings->page_type ) );
36:
37:
38: $page_types['relation'] = 'OR';
39:
40:
41: $args = [
42: 'post_type' => 'any',
43: 'no_found_rows' => true,
44: 'update_post_meta_cache' => false,
45: 'update_post_term_cache' => false,
46: 'meta_query' => $page_types
47: ];
48:
49: $query = new WP_Query( $args );
50: $posts = $query->get_posts();
51:
52: $values = [];
53:
54: foreach ( papi_to_array( $settings->slug ) as $slug ) {
55: foreach ( $posts as $post ) {
56: $val = papi_get_field( $post->ID, $slug );
57:
58: $val = array_filter( papi_to_array( $val ), function ( $item ) use ( $post_id ) {
59: return is_object( $item ) && $item->ID === $post_id;
60: } );
61:
62: if ( empty( $val ) ) {
63: continue;
64: }
65:
66: $page_type = papi_get_page_type_by_post_id( $post->ID );
67:
68: if ( empty( $page_type ) ) {
69: continue;
70: }
71:
72:
73: if ( ! isset( $values[$post->post_type] ) ) {
74: $values[$post->post_type] = [];
75: }
76:
77: if ( ! isset( $values[$post->post_type][$page_type->name] ) ) {
78: $values[$post->post_type][$page_type->name] = [];
79: }
80:
81:
82: if ( ! isset( $values[$post->post_type][$page_type->name][$post->ID] ) && ! empty( $val ) ) {
83: $values[$post->post_type][$page_type->name][$post->ID] = $post;
84: }
85: }
86: }
87:
88: ?>
89: <ul class="papi-property-reference" data-papi-rule="<?php echo $this->html_name(); ?>">
90: <?php if ( empty( $values ) ): ?>
91: <p>
92: <?php _e( 'No references exists', 'papi' ); ?>
93: </p>
94: <?php
95: endif;
96: ksort( $values ); foreach ( $values as $title => $val ):
97: $post_type = get_post_type_object( $title );
98: ?>
99: <li>
100: <h3><?php echo $post_type->labels->name; ?></h3>
101: <div class="handlediv" title="Click to toggle"><br></div>
102: </li>
103: <li>
104: <div class="page-types">
105: <ul>
106: <?php ksort( $val ); foreach ( $val as $name => $posts ): ?>
107: <li class="heading-border">
108: <h4><?php echo $name; ?></h4>
109: <div class="handlediv" title="Click to toggle"><br></div>
110: </li>
111: <li>
112: <div class="box">
113: <?php $i = 0;
114: foreach ( $posts as $post ): ?>
115: <a href="<?php echo get_edit_post_link( $post->ID ); ?>"><?php echo $post->post_title; ?></a>
116: <?php $i++;
117: endforeach; ?>
118: <div class="clear"></div>
119: </div>
120: </li>
121: <?php endforeach; ?>
122: </ul>
123: <div class="clear"></div>
124: </div>
125: </li>
126: <?php endforeach; ?>
127: </ul>
128: <?php
129: }
130: }
131: