get_adjacent_post – в том же сроке или категории не работает

Я создаю следующую и предыдущую навигацию для моих страниц «Одно сообщение» внутри плагина. То, что я пытаюсь сделать, это получить сообщение Prev / Next в той же категории пользовательского типа сообщений.

Итак, у меня есть CPT «Кино» с таксономией «Жанр» с терминами «Драма, Триллер» , «Триллер» – дитя срока драмы. У меня есть несколько сообщений, которые имеют категории «Драма -> Триллер». Если я просмотрю один из этих сообщений, я хотел бы остаться в категории «Триллер», когда я перемещаюсь по Prev / Next.

Мой код ниже пытается достичь этого, но в конечном итоге для get_adjacent_post () – пустые строки .

Разбивка кода:

  1. Подключиться к фильтру wp_link_pages, чтобы обновить логику навигации
  2. Найти $ post текущую таксономию
  3. Сначала добавьте все «term_id» в $ exclude_ids
  4. Найти первый термин, который имеет родительский термин
  5. Настройка текущей таксономии
  6. Удалить $ выбранный термин из $ excluded_ids
  7. вырваться из цикла

Я теперь жестко закодировал $ excluded_ids с '9' (9 = Драма), потому что я знаю, что это термин id, который мне нужно исключить, позволяя использовать только идентификатор термина Thriller для поиска Prev / Next posts.

Я открыт для любых предложений, исправляя этот код или придумывая кого-то, совершенно другого для достижения этого.

Цените свое время,

add_filter('wp_link_pages', array( $this, 'replace_paginated_posts'), 10, 2); public function replace_paginated_posts( $output, $args ) { global $wp_query, $post, $page, $numpages; // Get all taxonomies for current post $chosen = 0; $tax = ''; $excluded_ids; $taxonomies = get_the_taxonomies($post); foreach ($taxonomies as $key => $value) { // Get post terms $terms = wp_get_object_terms( $post->ID, $key ); // Get all the term id's $excluded_ids = wp_list_pluck( $terms , 'term_id' ); foreach ($terms as $key => $term) { // get the first term that has a parent and select its term if ($term->parent > 0) { $chosen = $term->term_id; $tax = $term->taxonomy; } if ($chosen != 0) { // Remove $chosen term from $excluded_ids; $excluded_ids = array_diff($excluded_ids, array($chosen) ); break; } } } if ($chosen == 0) { $excluded_ids = ''; } $prev_post_link = get_permalink( get_adjacent_post(true, '9', true, $tax) ); $next_post_link = get_permalink( get_adjacent_post(true, '9', false, $tax) ); ob_start(); echo '<nav class="post-navigation">'; echo '<a href="'.$prev_post_link.'">Previous Post</a>'; echo '<a href="'.$next_post_link.'">Next Post</a>'; echo '</nav>'; $output = ob_get_contents(); ob_end_clean(); return $output; } 

EDIT: я получаю ошибку SQL

 WordPress database error: [] SELECT p.ID FROM wp_posts AS p INNER JOIN wp_term_relationships AS tr ON p.ID = tr.object_id INNER JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE p.post_date > '2016-04-04 23:21:34' AND p.post_type = 'movies' AND tt.taxonomy = 'genre' AND tt.term_id IN (12,13,14,10) AND p.ID NOT IN ( SELECT tr.object_id FROM wp_term_relationships tr LEFT JOIN wp_term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) WHERE tt.term_id IN (9) ) AND ( p.post_status = 'publish' OR p.post_status = 'private' ) ORDER BY p.post_date ASC LIMIT 1