问题描述

有没有办法 (除了添加自定义链接) 以添加自定义帖子类型归档到 WordPress 中的菜单?如果使用自定义链接添加 (例如/cpt-archive-slug /),则 WordPress 不会将类 current-menu-item 应用于列表元素,这在样式化菜单时会带来挑战。

如果自定义链接包含整个 URL(例如 http://site.com/cpt-archive-slug/),则会添加这些类。但是,这可能不是’best practice’ 。

最佳解决方案

您最好的选择是自定义链接与完整的 url 作为自定义帖子类型归档是不同形式的基于分类法的档案 (类别,标签,任何自定义分类法) 和基于日期的档案,拥有自己的档案。

次佳解决方案

我知道这是旧的,但我也有这个问题,我发现一个相当干净的方法来处理它是使用自定义菜单步行者

class KB_Custom_Menu_Walker extends Walker_Nav_Menu {

  protected static $custom_post_types = array();

  public function start_el(&$output, $item, $depth=0, $args=array(), $id=0) {
    if (isset( self::$custom_post_types[ $item->url ] )) {
      $item->url = get_post_type_archive_link( self::$custom_post_types[$item->url] );
    }
    parent::start_el($output, $item, $depth, $args, $id);
  }

  public static function custom_post_types($type=null) {
    if ($type) {
      self::$custom_post_types[ '#post_type_'.$type ] = $type;
    }
    return self::$custom_post_types;
  }
}

拥有 #post_type_album 网址的自定义链接菜单项,您可以使用它:

# Where you defined your custom post type (could be anywhere anyway)
KB_Custom_Menu_Walker::custom_post_types('album');

# And display the menu
wp_nav_menu(array(
  'theme_location' => 'primary-nav',
  'walker' => new KB_Custom_Menu_Walker(),
));

注意:这假设你的帖子类型的 slug 和名称是一样的。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。