自定义页面模板显示帖子环(WordPress的查询)

问题描述:

这已经不是我第一次被困在此与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年以来没有更新过,并且已经损坏。 +:我确定应该有一个简单的方法来做到这一点。

非常感谢!

最后,我最后直接在模板中使用自定义查询。

可以通过添加查询参数,将其使用分页功能get_next_posts()get_previous_posts(),在这里看到:

Wordpress pagination (next_posts_link) on custom wp_query not showing

谢谢!