2014-02-27 262 views
0

這已經不是我第一次被困在此與WordPress ... 事情是這樣的:我想有一個自定義頁面模板顯示帖子環(WordPress的查詢)

  • 一個「投資組合「頁面(設置爲首頁)顯示最後16個帖子的標籤組合
  • 顯示最後XX(WP默認)帖子的」博客「頁面。

我讀了很多關於查詢,頭版,家庭等,我的結論是,我應該

  • 構建兩頁
  • 分配一個不同的模板,他們每個人,用定製設計
  • 不爲此做一個custom query in my template;因爲它會打破 分頁:next_posts_link(),例如,將顯示 什麼也沒有,因爲它基於主查詢,而不是自定義查詢。

強烈建議您使用pre_get_posts過濾 代替query_posts(),並通過檢查is_main_query

所以,as recommanded in the codex改變主查詢,所以我決定過濾function.php中的pre_get_posts,而不是直接在投資組合模板中使用wp_query(...)。

add_action('pre_get_posts', 'cargo_portfolio'); 

然後我設置一些條件來檢查我在正確的網頁上:

function cargo_portfolio($query) { 
    if (!$query->is_main_query()) return; 
    if ($query->get('page_id') && ($query->get('page_id') == 128)){ //128 is my portfolio page 
     //edit query here 
     } 
} 

我不想用一個靜態的數字(128),所以我發現這個代替(對於投資組合代碼/頭版)

function cargo_portfolio($query) { 
    if (!$query->is_main_query()) return; 
    //check is static home page, since is_front_page() is not working yet at this level 
    if ($query->get('page_id') && ($query->get('page_id') == get_option('page_on_front'))){ 
     //edit query here 
     } 
} 

我開始編輯與此代碼查詢:

$query->set('page_id', null); 
$query->set('post_type', 'post'); 
$query->set('tag', 'portfolio'); 
$query->set('showposts', 16); 

所以我結束了此功能:

function cargo_portfolio($query) { 
    if (!$query->is_main_query()) return; 
    //check is static home page, since is_front_page() is not working yet at this level 
    if ($query->get('page_id') && ($query->get('page_id') == get_option('page_on_front'))){ 
    $query->set('page_id', null); 
    $query->set('post_type', 'post'); 
    $query->set('tag', 'portfolio'); 
    $query->set('showposts', 16); 
    } 
} 

WELL。感謝您閱讀... :)

這裏的問題是,我取消設置PAGE_ID,改變post_type瓦爾(因爲我想取個),而且它打破了查詢。現在我登陸404頁面。

有沒有人有一個很好的解決方案來實現這一目標?之前,我使用的是The Loops plugin,但是它自2年以來沒有更新過,並且已經損壞。 +:我確定應該有一個簡單的方法來做到這一點。

非常感謝!

回答

相關問題