2016-10-17 9 views
0

Я пытаюсь получить следующее сообщение с той же категорией, что и текущее сообщение в WP. Я не пытаюсь получить ссылку следующего сообщения (next_post_link()), но сам пост.Wordpress WP_Query получить следующее сообщение с той же категорией

В настоящее время я получаю последнее сообщение с той же категорией, что не является самой записью.

$query = new WP_Query(array('category_name' => $maincat_slug, 'posts_per_page' => 1, 'post__not_in' => array($post->ID))); 
if ($query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post(); 
     get_template_part('template-parts/content', 'teaser'); 
    endwhile; 
endif; 

$maincat_slug включает в себя (первый) категория слаг текущего сообщения (get_the_category()).

Возможно, мы сможем изменить 'post__not_in', чтобы включить текущий и все предыдущие сообщения?

EDIT:

get_next_post_link не имеет категории фильтра, так что это не будет работать здесь, я думаю.

Или мы можем использовать offset для запуска после текущего сообщения. Не уверен, как вычислить индекс текущей должности в цикле, хотя.

ответ

0

Это, как я снял его с помощью WP_Query offset

  1. Выполнить цикл в первый раз проверить индекс текущей позиции в цикле
  2. Установить смещение для второго цикла на индекс текущей страницы (+1)
  3. Запустите второй цикл со смещением от первого контура.

Таким образом, во втором цикле игнорируются все сообщения, которые приходили до текущего сообщения, и отображает первое сообщение, которое приходит после текущего.

Код:

// Get current category (first cat if multiple are set) 
$category = get_the_category(); 
$maincat_slug = $category[0]->slug; 

// Get current Post ID 
$current_id = $post->ID; 

// Reset offset 
$offset = 0; 

// Calculate offset 
$query = new WP_Query(array('category_name' => $maincat_slug)); 
if ($query->have_posts()) : 
    while ($query->have_posts()) : 
     $query->the_post(); 
     $test_id = $post->ID; 
     if ($test_id == $current_id) : 
      // Set offset to current post 
      $offset = $query->current_post + 1; 
     endif; 
    endwhile; 
endif; 

// Display next post in category 
$query = new WP_Query(array('category_name' => $maincat_slug, 'posts_per_page' => 1, 'offset' => $offset)); 
if ($query->have_posts()) : 
    while ($query->have_posts()) : 
     $query->the_post(); 
     get_template_part('template-parts/content', 'teaser'); 
    endwhile; 
else : 
    // Fallback 
endif; 
0

Вы можете использовать функцию url_to_postid(), чтобы получить идентификатор из ссылки, а затем принести пост:

$link = next_post_link(); 
$postid = url_to_postid($link); 

$query = new WP_Query(array('category_name' => $maincat_slug, 'posts_per_page' => 1, 'p' => $postid); 
if ($query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post(); 
     get_template_part('template-parts/content', 'teaser'); 
    endwhile; 
endif; 
+0

Хороший метод, я получил такой же результат с ' 'post__not_in' => диапазон (0, $ post-> ID))'. К сожалению, был показан неправильный пост (текущий). Может быть, проблема в моем интуитивном настраиваемом плагине заказа на заказ? –

+0

попытайтесь отключить плагин, затем проверьте, работает ли он – Cristian

+0

У этого нет никакой причины, почему это не должно работать ... – Cristian