如果查询需要可定制,是否应该使用Category y.php和Loop?

时间:2017-02-27 作者:Nadroev

我需要用户能够在查看类别时对帖子进行排序和筛选。创建类别页面的正确方法是使用类别({id}/{slug})。php,但使用它会自动创建一个循环,所以无论我使用什么方法对帖子进行排序和过滤,它都会生成另一个循环。

在这种情况下,我应该创建一个名为category(-id}/{slug})的文件。php并以某种方式将其链接到类别,或者干脆忽略两个循环,不管发生什么,其中一个将不被使用,这样会更好吗?

同样在这种情况下,是否再次使用循环,但使用修改后的查询,是否比get\\u posts()更有效?

2 个回复
最合适的回答,由SO网友:Fayaz 整理而成

是的,即使要自定义查询,也应该使用循环和特定类别模板。为什么?:

即使有自定义页面,也会运行主查询。因此,对于自定义页面,您实际上并不是在回避主查询,而是将其替换为其他查询。

主查询本身是可自定义的。

如果你偏离了默认的WordPress行为,你将来将很难维护它,尤其是对于其他开发人员来说,如果将来有其他人接管你的工作,这将很困难。

如何修改主查询:幸运的是,WordPress是可定制的,这意味着主查询(循环)也是可定制的。您可以使用pre_get_posts 行动挂钩或query_posts() 函数更改主查询。但是,建议使用pre_get_posts

例如,假设您希望根据日期升序更改类别中帖子的顺序。为此,您可以在主题的functions.php 文件:

add_action( \'pre_get_posts\', \'wpse258109_customize_category_query\' );
function wpse258109_customize_category_query( $query ) {
    if( ! is_admin() && $query->is_main_query()  && $query->is_category( \'your-category-slug\' ) ) {
        // get the orderby value from where ever you want and set in the main query
        $query->set( \'orderby\', array( \'date\' => \'ASC\' ) );
    }
}
此代码将更改主查询和类别帖子的默认行为your-category-slug 存档页将按升序加载。当然,您可以使用WP_Query

SO网友:kraftner

首先:太好了,您正在考虑一个浪费的查询!:)

第二:无论你做什么,WP总是运行一个主查询。但您可以做的是更改此查询,而不是忽略它并创建二次循环。可以使用pre get posts

相关推荐

如何将自定义选项添加到wp_Dropdown_Categories?

我需要将自定义选项添加到wp_dropdown_categories. 现在,整个万维网世界还没有找到解决方案。。。因此,我在这里要求一个解决方案……因为我真的无法想象WordPress的开发人员没有考虑到这将永远不需要,对吗?