| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- <?php
-
- function grab_ids_related_to_and_from($id_to_remove, $p2p_res) {
- $related_to_ids = array_map(function($post) {
- return (int)$post->p2p_to;
- }, $p2p_res);
- $related_from_ids = array_map(function($post) {
- return (int)$post->p2p_from;
- }, $p2p_res);
-
- $unfiltered = array_merge($related_to_ids, $related_from_ids);
- $deduped = array_unique($unfiltered);
-
- return array_diff( $deduped, array($id_to_remove) );
- }
-
- function prepare_related_items($args) {
- // Rearrange what fields get shown
- $collection = array();
-
- forEach( get_posts($args) as $item ) {
- $filtered = array();
- $filtered[id] = $item->ID;
- $filtered[slug] = $item->post_name;
- $filtered[type] = $item->post_type;
- $filtered[title] = $item->post_title;
- $filtered[excerpt] = $item->post_excerpt;
- $filtered[date] = $item->post_date;
- $filtered[content] = $item->post_content;
- $filtered[hero] = get_post_meta( $item->ID, 'hero_header', true );
- $collection[$item->ID] = $filtered;
- };
- wp_reset_postdata();
-
- return $collection;
- }
-
- function p2p_related_to($id, $type) {
- global $wpdb;
- $to_type = '%_to_' . $type;
- $from_type = $type . '_to_%';
-
- $res = $wpdb->get_results($wpdb->prepare(
- "SELECT * FROM wp_p2p
- WHERE p2p_from = %d
- OR p2p_to = %d",
- $id, $id
- ));
-
- $related_posts_ids = grab_ids_related_to_and_from($id, $res);
-
- // Use IDs to get posts from the wpdb
- $args = array(
- 'numberposts' => -1,
- 'post_type' => 'any',
- 'include' => $related_posts_ids
- );
- wp_reset_postdata();
- return prepare_related_items($args);
- }
-
- ?>
|