“我的网站”的主菜单显示在除自定义帖子类型存档之外的所有位置;对象;。
这是由以下原因造成的pre_get_posts
回调。如果我将其删除,菜单将显示:
add_action(\'pre_get_posts\', array($this, \'frontend_pre_get_posts_handler\'), 99);
// ....
public function frontend_pre_get_posts_handler($query){
if (is_admin()) {
return;
}
// Tweak which posts to display on frontpage, and order them by "unsold first".
if ((is_front_page() && $query->is_main_query()) || is_post_type_archive(\'objet\')) {
$query->set(\'post_type\', array(
\'objet\', \'nav_menu_item\'
));
$query->set(\'meta_key\', \'wpcf-objet-disponibilite\');
$query->set(\'orderby\', array(\'meta_value\' => \'ASC\', \'date\' => \'DESC\'));
$query->set( \'posts_per_page\', 30);
}
}
我添加了
nav_menu_item
帖子类型,如我在
other similar issues, 并且还将优先级更改为99,以确保它在钩子的末端运行。
不过,没有骰子。有什么想法吗?
最合适的回答,由SO网友:Jacob Peattie 整理而成
因为当你使用is_post_type_archive( \'object\' )
条件您正在检查主查询是否为post类型存档,而不是检查此查询是否为post类型存档。这意味着您的代码将应用于post类型存档上的所有查询,包括菜单查询。
您需要使用$query->is_post_type_archive()
检查当前正在筛选的特定查询。您已经为正确执行了此操作$query->is_main_query()
.
if ((is_front_page() && $query->is_main_query()) || $query->is_post_type_archive(\'objet\')) {
// etc.
}