- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用自定义帖子类型存档作为网站的首页,这样
http://the_site.com/
是根据我的archive-{post-type}.php
文件显示的自定义帖子类型存档。
理想情况下,我想在我的 functions.php
文件中使用 is_front_page()
来更改查询。我尝试了以下方法,将一个名为“主页”的页面作为我的首页:
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;
}
但首页正在返回“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
。)
这导致以下解决方案 as suggested by 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", "");
}
}
您可能需要更改一些条件标签以确保所有插件仍然有效,具体取决于查询更改的严重程度。
希望这对某人有帮助。
更新:如前所述below , 添加 !is_admin()
到 if
-statement 以确保函数仅在前端运行。如果您只想为初始查询运行此操作,您还可以添加主查询检查 $wp_query->is_main_query()
.
关于php - 如何在 WordPress 中使用自定义帖子类型存档作为首页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734647/
我是一名优秀的程序员,十分优秀!