Kaynağa Gözat

feat: refactored sql calls for p2p handling | prep p2p posts with custom keys | added p2p rest endpoints

tags/0.9.0
J 6 yıl önce
ebeveyn
işleme
91314ef4fd

+ 2
- 2
plugins/cia-endpoints/includes/class.make-endpoint.php Dosyayı Görüntüle

1
 <?php
1
 <?php
2
 
2
 
3
 include('reformat-blocks.php');
3
 include('reformat-blocks.php');
4
+include('related-items.php');
4
 
5
 
5
 class Make_Endpoint_For extends WP_REST_Controller {
6
 class Make_Endpoint_For extends WP_REST_Controller {
6
     private $post_type;
7
     private $post_type;
61
         $filtered[content] = $item->post_content;
62
         $filtered[content] = $item->post_content;
62
         $filtered[blocks] = get_rearrange_blocks($item->blocks);
63
         $filtered[blocks] = get_rearrange_blocks($item->blocks);
63
         $filtered[hero] = get_post_meta( $item->ID, 'hero_header', true );
64
         $filtered[hero] = get_post_meta( $item->ID, 'hero_header', true );
64
-        
65
+        $filtered[relatedto] = p2p_related_to($item->ID, $item->post_type);
65
         // Log the request with PHP Console
66
         // Log the request with PHP Console
66
         if ( class_exists( 'PC' ) ) PC::debug( $item, 'Blocks' );
67
         if ( class_exists( 'PC' ) ) PC::debug( $item, 'Blocks' );
67
         
68
         
68
         return $filtered;
69
         return $filtered;
69
-        // return $item;
70
     }
70
     }
71
 }
71
 }
72
 
72
 

+ 62
- 0
plugins/cia-endpoints/includes/related-items.php Dosyayı Görüntüle

1
+<?php
2
+
3
+function grab_ids_related_to_and_from($id_to_remove, $p2p_res) {
4
+    $related_to_ids = array_map(function($post) { 
5
+        return (int)$post->p2p_to;
6
+    }, $p2p_res);
7
+    $related_from_ids = array_map(function($post) { 
8
+        return (int)$post->p2p_from;
9
+    }, $p2p_res);
10
+
11
+    $unfiltered = array_merge($related_to_ids, $related_from_ids);
12
+    $deduped = array_unique($unfiltered);
13
+
14
+    return array_diff( $deduped, array($id_to_remove) );
15
+}
16
+
17
+function prepare_related_items($args) {
18
+    // Rearrange what fields get shown
19
+    $collection = array();
20
+    
21
+    forEach( get_posts($args) as $item ) {
22
+        $filtered = array();
23
+        $filtered[id] = $item->ID;
24
+        $filtered[slug] = $item->post_name;
25
+        $filtered[type] = $item->post_type;
26
+        $filtered[title] = $item->post_title;
27
+        $filtered[excerpt] = $item->post_excerpt;
28
+        $filtered[date] = $item->post_date;
29
+        $filtered[content] = $item->post_content;
30
+        $filtered[hero] = get_post_meta( $item->ID, 'hero_header', true );
31
+        $collection[$item->ID] = $filtered;
32
+    };
33
+    wp_reset_postdata();
34
+    
35
+    return $collection;
36
+}
37
+
38
+function p2p_related_to($id, $type) {
39
+    global $wpdb;
40
+    $to_type = '%_to_' . $type;
41
+    $from_type = $type . '_to_%';
42
+
43
+    $res = $wpdb->get_results($wpdb->prepare(
44
+        "SELECT * FROM wp_p2p
45
+        WHERE p2p_from = %d
46
+        OR p2p_to = %d",
47
+        $id, $id
48
+    ));
49
+    
50
+    $related_posts_ids = grab_ids_related_to_and_from($id, $res);
51
+
52
+    // Use IDs to get posts from the wpdb
53
+    $args = array(
54
+        'numberposts' => -1,
55
+        'post_type' => 'any',
56
+        'include' => $related_posts_ids
57
+    );
58
+    
59
+    return prepare_related_items($args);
60
+}
61
+
62
+?>

Loading…
İptal
Kaydet