根据wordpress codexpre_get_posts() 不适用于任何地方。
is_font_page()
不起作用,但is_home()
将所以你的情况is_front_page() && is_home()
每次都会失败。但是,“is\\u home()”应该单独起作用。
让别人知道你到底想做什么可能会有帮助。通常,pre\\u get\\u posts用于更改查询,但来自您共享的代码片段。我能告诉你的是,你想为一个有帖子列表的页面获取一个帖子id?
还有一件事。我在我正在处理的一个主题中加载了你的函数,该函数在不同的地方激发了大约5次,在这些地方会产生新的查询,如导航菜单和侧边栏。因此,您还需要了解您所处的查询。您可能应该使用它来确保您位于主查询中。
if ( $wp_query->is_main_query() ) {
//check if home or else where here
}
我看到你在你的问题的评论中添加了更多的信息,我现在无法评论,因为我的声誉太低了。
如果我是你,我会以不同的方式定位主页。可能是一个自定义模板文件,然后使用query_posts($args) 并构建自己的循环。
Added Working Function Accepted in Chat:
function show_id ( $wp_query ) {
// lets make sure we are in the main query
if ( $wp_query->is_main_query() ) {
if ( is_home() ) {
// Default homepage or blog Archive
$id = $id = get_option( \'page_for_posts\' );;
} elseif ( !is_single() && !empty($wp_query->query_vars[\'page_id\'])) {
// static homepage aka front page
$id = $wp_query->query_vars[\'page_id\'];
} else {
//everything else
$id = get_queried_object_id();
}
}
// Debug
echo \'<pre>\';
var_dump($id);
//var_dump($wp_query->query_vars[\'page_id\']);
//var_dump($wp_query);
echo \'</pre>\';
}
add_action ( \'pre_get_posts\', \'show_id\' );