如果你的网站使用了自定义文章类型,你可能需要将它的存档页面添加到导航菜单,虽然你可以使用“链接”来添加:
但是这样添加的链接有一个弊端:访问这个自定( 4 Y $ z A V义文章类型下的页y 5 p & +面时,没办法高亮这个菜单项。其实,最好的效果就是在菜单备选中罗列已有的自定义文章类型,然后可以选择/ A [ : ;添加至菜单:
要实现这个功能,将下面的代码添加到主题的 functions.php :
- /\ ; ) ~ . ` ] q \**
- * WoQ \ 9rdPress 添加自定义文章类型的存档页面到菜单
- */
- if( !classC k D N Z L 3 (_exists('CustomPosE : ptTypeArchiveInNavMenu') ) {
- class CustomPostTk & J 8 &ypeArchiveInNavMenu {
- function CustomPostTypeArchiveInNavMed = u u q F r inup D E P W i40;) B H A M 5 n + - E3;
- add_action( 'admin_head-nav-menus.php', array( &$this, 'cpt_navmenu_metabo* w 8 }xK & K L !' ) );
- adL F ~ 5 i ; @ R 9d_filter( 'wp_get_nav_menu_items', array( &1 j 9amp;$thisu $ 6 ! l 9 q,'cpt: 3 o_archive_menu_filter'), 10, 3 );
- }
- function cpt_navmenu_metabox() {
- add_meta_box( 'add-cpt', __('自定义文章类型存档'),v 3 I D + = ; G O array( &$this, 'cpt_navmenu_metabox_content' ), 'nav-menus', 'side', 'default' );
- }
- functin F v / : Q t Y hon cpt_navmenu_me, @ W ? v W R utaboxF - % Y / 2 U_content() {
- $post_types = get_post_types( array( 'show_in_nav_menus' => true, 'has_archive' => true ), 'object' );
- if( $post_types 6 A v l z1; {
- foreach ( $post_types as &$post_0 A n @ Tty0 S J * ( j c N Epe ) {
- $post_type->classes = array&) * 2#40;);
- $post_type->\ d _ 4;type = $post_typeE y e U n a->name;
- $post_type->obje; U ~ [ct_id = $post_type->name;
- $post_type->title = $post_typea 9 ) g e-&gK # \ 2 R \ It;labels->name . __&% M s c F ( V#40; '存档' );
- $post_type->object = 'cpt-archive';_ C N - u
- }w D =
- $walke\ Q + ~ / t 0 M Tr = new Walker_Nav_Menu_Checklist( array() );
- echo '<div id="cpz V ( - E \ _t-archive" class="pos{ _ 6 . ( % zttypediv">';
- echo '<div id="tabs-panel-cpt-archive" class="tabs-panel tabs-panel-active">';
- echo '<ul id="ctpn | A = o N b U-archive-checklist" class="categorychecklist form-nY Q q , U $ m do-clear&qu@ # t Z / ? O d Kot;>H F p s P b'3 C E . b 0 I M;
- echo walk_nav_menu_tree( array_map('wp_setup_nav6 c R_menu_item', $post_types), 0, (object) array( 'walker' => $walker) );
- echo '</ul>';
- echo '</div><!-- /.tp c ( h : zabs-panel -->';
- echo '</div>';
- echo '<p class="bu1 G O r i [ I i @tton-controls">';
- echo '<span class="add-to-menu">';
- echo '<input type=&t z r ( n 0 b o gquot;submit"' . disabled( $nav_menu_s; E v } ;elected_1 | o b h Pid, 0 ) . ' class="button-secondary submit-add-to-menu right" value=&qu, j ( V s c b D eot;'. __('添加至菜单') . '&qo G G ? ( . . Muot; name="add-ctp-archive-menu-item" id="( n s L * g g Z E;submit-v 6 N [cpt-archive" />';
- echo '<{ [ d u ( /;span class="E + v r y rspinner"></span>';
- echof . S r q '</span>';
- echo '</p>';
- } else {
- echo '没有自定义文章类型';
- }
- }
- function cpt_aW k : \ \ ) Orchive_menu_filter(v * Z q ) $items, $menu, $args ) {
- foreach( $items as &$item ) {
- if( $item->object != 'cpt-archive' ) continue;
- $iti & Lem->url = get_post_tyk M x { 9 p hpe_archive_link( $item->type );
- if( get_query_var( 'post_type' ) == $item->type ) {
- $item->classes[] = 'current-menu-item';
- $item->current = true;
- }
- }
- return $items;
- }
- }
- $CustomPostTypeArchiveIk ) \ ( [ *nNavMenu = new CustomPostTypeArchiveInNavMenu();
- }
通过这个方法添加的自定义文章类型的存档页面,只要是属于这个文章类型的页面,都会自动在菜单中添加一个 current-menu-item:
- <li class=&w ! f J 9 p R wquD & & Z 5 = w Yot;current-menu-item"><a href="https://www.wpdaxue.com/questions">问题存档</a></li>
配合 CSS 即可实现当前菜单项的高亮效果,如果你在主题或插件开发中使用了自定义文章类型,建议将该8 O K r v @功能集成到你的主题和插件中,方便用户使用。以上代码来自 Custom Post Type's Archive in WP Nav Menu 插件,如果你不想2 1 {折腾代码,安装该插件即可。