提问者:小点点

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


这不是我第一次被Wordpress困住了。。。事情是这样的:我想要一个

  • “公文包”页面(设置为首页),显示最后16篇包含标签公文包的帖子
  • 一个“博客”页面,显示最近XX篇(WP默认)文章

我读了很多关于查询、头版、主页等的文章,我的结论是我应该

  • 建立两个页面
  • 为每个模板分配不同的模板,并使用自定义设计
  • 不要在我的模板中对此进行自定义查询;因为它会破坏分页:例如,next_posts_link()将不显示任何内容,因为它是基于主查询,而不是自定义查询。

强烈建议您使用pre_get_posts筛选器而不是query_posts(),并通过检查is_main_query来更改主查询

因此,正如法典中建议的那样,我决定在函数中过滤pre_get_post。php而不是使用wp_查询(…)直接在公文包模板中。

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 );
    }
}

好感谢阅读……:)

这里的问题是,我取消设置页面id并更改post类型变量(因为我想获取post),这会中断查询。现在我登陆到404页面。

有没有人有一个好的解决方案来实现这一点?以前,我使用的是Loops插件,但它已经两年没有更新了,现在已经坏了我相信应该有一个简单的方法来做到这一点。

非常感谢!!!


共1个答案

匿名用户

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

通过向分页函数get_next_posts()和get_previous_posts()添加查询参数,可以使用分页函数,请参见此处:

自定义wp_查询上的Wordpress分页(下一个发布链接)未显示。

谢谢