主菜单未显示在自定义开机自检类型档案中

时间:2021-12-09 作者:pixeline

“我的网站”的主菜单显示在除自定义帖子类型存档之外的所有位置;对象;。

这是由以下原因造成的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,以确保它在钩子的末端运行。

不过,没有骰子。有什么想法吗?

1 个回复
最合适的回答,由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.
}

相关推荐