2016-10-17 85 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'以包括當前和以前的所有帖子?

編輯:

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()來檢索鏈接的ID,然後取後:

$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,$後> ID))'。可悲的是一個錯誤的帖子(當前)顯示。也許問題是我的直觀自定義帖子類型順序插件? –

+0

嘗試停用該插件,然後檢查它是否工作 – Cristian

+0

它沒有任何理由,爲什麼這不應該工作... – Cristian

相關問題