我想使用自定义帖子类型存档作为网站的首页,以便
http://the_site.com/
Run Code Online (Sandbox Code Playgroud)
是根据我的archive-{post-type}.php文件显示的自定义帖子类型存档.
理想情况下,我想is_front_page()在我的functions.php文件中使用更改查询.我尝试了以下操作,将一个名为"Home"的页面作为我的首页:
add_filter('pre_get_posts', 'my_get_posts');
function my_get_posts($query){
global $wp_the_query;
if(is_front_page()&&$wp_the_query===$query){
$query->set('post_type','album');
$query->set('posts_per_page',-1);
}
return $query;
}
Run Code Online (Sandbox Code Playgroud)
但首页返回"Home"的内容,似乎忽略了自定义查询.
我究竟做错了什么?总的来说,还有更好的方法吗?
注意:我确实在WordPress Answers中发布了这个,但该社区相对较小.
将最终解决方案作为答案发布(Isaac将其作为评论)仅供所有仍在寻找的人使用.
Isaac在正确的轨道上添加了过滤器functions.php.他做错了是调用is_front_page(),因为我们已经进入pre_get_posts并且查询尚未执行,因此无法正常工作.
但是,我们确实拥有当前页面ID.所以我们仍然可以通过查看一个名为的选项的WordPress选项寄存器来解决这个问题,该选项page_on_front返回用户设置为首页的页面的ID.
(有关所有WordPress选项的概述,请访问<yourwordpressinstallation>/wp-admin/options.php您的浏览器.)
这构成了Ijaas建议的以下解决方案:
add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query) {
// Compare queried page ID to front page ID.
if(!is_admin() && $wp_query->get("page_id") == get_option("page_on_front")) {
// Set custom parameters (values based on Isaacs question).
$wp_query->set("post_type", "album");
$wp_query->set("posts_per_page", -1);
// WP_Query shouldn't actually fetch the page in our case.
$wp_query->set("page_id", "");
}
}
Run Code Online (Sandbox Code Playgroud)
您可能必须更改一些条件标记以确保所有插件仍然有效,具体取决于查询的更改程度.
希望这有助于某人.
更新:如注意以下,添加!is_admin()到if语句来确保该功能只能运行在前端.如果您只想为初始查询运行此操作,则还可以添加主查询检查$wp_query->is_main_query().
| 归档时间: |
|
| 查看次数: |
4257 次 |
| 最近记录: |