NEXT craftinamerica.org. Base setup for headless wordpress https://www.craftinamerica.org
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

related-items.php 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. include(formats.php);
  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. $unfiltered = array_merge($related_to_ids, $related_from_ids);
  11. $deduped = array_unique($unfiltered);
  12. return array_diff( $deduped, array($id_to_remove) );
  13. }
  14. function prepare_related_items($post_ids) {
  15. // Rearrange what fields get shown
  16. $collection = array();
  17. // Use IDs to get posts from the wpdb
  18. $args = array(
  19. 'numberposts' => -1,
  20. 'post_type' => 'any',
  21. 'include' => $post_ids
  22. );
  23. $related_items = get_posts($args);
  24. forEach( $related_items as $item ) {
  25. $collection[$item->ID] = default_post_format($item, false);
  26. }
  27. return $collection;
  28. }
  29. function p2p_related_to($id, $type) {
  30. global $wpdb;
  31. $sql = $wpdb->prepare(
  32. "SELECT * FROM wp_p2p
  33. WHERE p2p_from = %d
  34. OR p2p_to = %d",
  35. $id, $id
  36. );
  37. $res = $wpdb->get_results($sql);
  38. $related_posts_ids = grab_ids_related_to_and_from($id, $res);
  39. // wp_reset_postdata();
  40. $related_posts = prepare_related_items($related_posts_ids);
  41. if(empty($related_posts_ids)) {
  42. return [];
  43. } else {
  44. return $related_posts;
  45. }
  46. }
  47. ?>