我的代码在我的页面上得到了我想要的结果,我正在获取另一篇文章,我的主题正在按预期在页面上输出我需要的所有相关数据。
function replaceQuery( $query ) {
if ( !is_admin() && $query->is_main_query() && $query->is_page ) {
$childQuery = get_post(13);
$query->queried_object->ID = $childQuery->ID;
$query->queried_object->post_content = $childQuery->post_content;
$query->queried_object->post_title = $childQuery->post_title;
$query->queried_object->post_name = $childQuery->post_name;
$query->queried_object->queried_object_id = $childQuery->post_name;
$query->query_vars[\'page_id\'] = $childQuery->ID;
$query->query_vars[\'p\'] = $childQuery->ID;
}
}
// I\'ve also used the "parse_query" hook
add_action( \'pre_get_posts\', \'replaceQuery\');
问题是,我收到了所有的警告和通知
Notice: Indirect modification of overloaded property WP_Query::$queried_object has no effect in mycode.php on line 47
Warning: Creating default object from empty value in mycode.php on line 47
我在这里发现了类似的问题
is_category in pre_get_posts results in php notices似乎我试图对WP查询对象进行更改太早或(在上面的情况下)太迟。我尝试用作条件的属性消除了许多错误,但当我添加任何其他内容时,它似乎破坏了代码。
我是否可以使用其他条件或其他挂钩来摆脱这些通知&;警告?
SO网友:KUMAR
不要修改queryed\\u object属性,而是使用set方法修改查询以获得所需的输出。下面的示例将起作用。仅使用查询中的一个,即page\\u id(设置页面id时)或post\\u in/p(分别设置post\\u id的数组或post\\u id时)。
function replaceQuery( $query ) {
if ( !is_admin() && $query->is_main_query() && $query->is_page ) {
$childQuery = get_post(13);
//to set/query multiple post ids
$query->set( \'post__in\', array( $childQuery->ID ) );
//to set/query only a single post id
$query->set( \'p\', $childQuery->ID );
//to set/query page id
$query->set( \'page_id\', $childQuery->ID );
}
}
add_action( \'pre_get_posts\', \'replaceQuery\');