2014-04-22 64 views
0

我有一個插件可以自動將帖子過期並在某個日期將帖子狀態更改爲「存檔」。在單個模板上顯示當前帖子

然後,我們有一個存檔部分,其中包含所有這些帖子。我仍然想顯示帖子的數據,但是它沒有找到頁面。

我可以更改查詢以在單個模板上顯示此帖嗎?

我試過以下,但它提取所有歸檔的帖子,而不僅僅是網頁你的。

<?php 
$my_query = new WP_Query('post_status=archive'); 
?> 
<div> 
    <?php 
    if ($my_query->have_posts()) : while ($my_query->have_posts()) : 
     $my_query->the_post(); 
     ?> 
     <ul> 
      <li> 
      <?php the_title(); ?> 
      </li> 
     </ul> 
    <?php endwhile; else: ?> 
     <div> 
     <ul> 
      <li><?php _e('No upcoming Posts'); ?></li> 
     </ul> 
     </div> 
    <?php endif; ?> 
</div> 
+0

你想存檔的帖子仍然可以被公衆訪問,那是你想要的嗎?默認情況下,WordPress只會向公衆顯示''post_status'=>'發佈'。 – josephting

+0

@josephting是的,但通過將我的代碼放在它中循環遍歷所有帖子,而不是僅顯示當前發佈的帖子。 – Rob

回答

0

感謝@josephting & @ bodi0讓我以不同的方式思考,實際上解決了它,而無需調整原始循環中的單個模板(我在另一個站點上使用了此功能以獲取將來的帖子以顯示):

add_filter('the_posts', 'show_future_posts'); 
function show_future_posts($posts) 
{ 
    global $wp_query, $wpdb; 
    if(is_single() && $wp_query->post_count == 0) 
    { 
     $posts = $wpdb->get_results($wp_query->request); 
    } 
    return $posts; 
} 

與所有其他解決方案,它仍然說沒有找到頁面或沒有完全顯示數據。

1

發佈狀態允許用戶在WordPress中爲帖子設置工作流狀態。

有8個默認狀態,WordPress使用。它們是published,future,draft,pending,trash, auto-draftinherit

一個帖子也可能有new狀態,如果它剛剛創建,並沒有任何先前的狀態。

WordPress主題和插件還可以爲更復雜的網站定義自定義發佈狀態。這些狀態允許用戶在管理面板中組織他們的帖子。它們對於具有多個作者的網站或複雜的編輯流程尤其有用。

即發佈狀態允許有些事情是用戶對文章不發佈,並將其保存爲草稿的工作。這樣他們可以稍後返回並完成它。它還允許用戶安排發佈帖子的狀態爲future,或發佈帖子爲私人。附件的帖子狀態爲inherit。對於多作者博客,pending狀態可能很有用,因爲貢獻者可以在發佈前提交審閱帖子。

對於你的情況,你必須100%確定你的歸檔文章的狀態爲archive,否則你的WP查詢將不起作用,所以檢查你使用的這個插件是否設置了這個文章類型(簡單的方法是直接看在MySQL數據庫中,表wp_posts,或者如果您沒有通過PHPMyAdmin訪問MySQL服務器,請查看插件本身的源代碼。)。

編輯:您可以嘗試,只是爲了測試,改變你的WP這樣的查詢:

$my_query = new WP_Query(array('post_status' => array('pending', 'archive', 'publish')));和看到的結果?

1

爲什麼你所有歸檔的帖子的原因是因爲你查詢與post_status=archive一個全新的查詢。

爲了解決這個問題,我一直在嘗試使用一些代碼來利用WordPress的Action API,比如pre_get_posts,但它不能正常工作,主要是因爲WordPress已經拋出了404錯誤。

所以它可能是一個更好的主意在single.php覆蓋此模板等。

<?php 
$post_id = get_query_var('p'); 
$args = array(
    'p' => $post_id, 
    'post_status' => array('publish', 'archive') 
); 
$my_query = new WP_Query($args); 
?> 

我可能會建議先嚐試一下。正如我所提到的,你正在獲取檔案中的所有帖子。在這種情況下,您將獲取帖子ID並將其添加到查詢中。因此,您將會看到當前帖子以及publisharchive post_status,以便查詢包含post_status的所有帖子。

不幸的是,在我的測試,它只是沒有在未登錄誰遊客的工作。它會爲你的工作誰登錄的用戶。

讓我聽到結果的評論。

0
Display post by ID: 
$query = new WP_Query('post_status=archive&p=7'); 

Display page by ID: 
$query = new WP_Query('post_status=archive&page_id=7'); 
相關問題