WordPress教程

WordPress 菜单添加自定义选项打造超级菜单

阿里云

最近疫情期间静止在家,终于有时间研究这个超级菜单,上篇是 用小工具创建 WordPress 超级菜单 ,再介绍一个通过为 WordPress 菜单添加自定义选项,再利用短代码打造超级菜单的方法,废话不说直接上代码。

将代码添加到当前主题函数模板 functions.php 中:

  1.     // 设置添加字段
  2.     function zm_menu_custom_fields( $item_id, $item ) {
  3.     	$menu_code = get_post_meta( $item_id, 'zm_menu_code_checkbox', true );
  4.     	$menu_shortcode = get_post_meta( $item_id, 'zm_menu_shortcode', true );
  5.     	?>
  6.  
  7.     	<p class="zm-menu-code-label description" style="margin: 10px 0">
  8.     		<label for="zm-menu-code-<?php echo $item_id; ?>" >
  9.     			<input type="checkbox" id="zm-menu-code-<?php echo $item_id; ?>" name="zm_menu_code[<?php echo $item_id; ?>]" <?php checked( $menu_code, true ); ?> />
  10.     			为顶级菜单添加CSS类(仅在顶级菜单勾选)
  11.     		</label>
  12.     	</p>
  13.  
  14.     	<p class="zm-menu-shortcode-label description">
  15.     		<label for="zm-menu-shortcode-<?php echo $item_id; ?>">
  16.     			输入短代码(仅在菜单子项目中使用)
  17.     		</label>
  18.     		<input type="hidden" class="nav-menu-id" value="<?php echo $item_id; ?>" />
  19.     		<div class="logged-input-holder">
  20.     			<input type="text" name="zm_menu_shortcode[<?php echo $item_id; ?>]" id="zm-menu-shortcode-<?php echo $item_id ;?>" value="<?php echo esc_attr( $menu_shortcode ); ?>" style="width: 100%;">
  21.     		</div>
  22.     	</p>
  23.     	<?php
  24.     }
  25.  
  26.     add_action( 'wp_nav_menu_item_custom_fields', 'zm_menu_custom_fields', 10, 2 );
  27.  
  28.     // 保存字段
  29.     function zm_save_menu_custom_item_meta( $menu_id, $menu_item_db_id ) {
  30.     	$button_value = ( isset($_POST['zm_menu_code'][$menu_item_db_id] ) && $_POST['zm_menu_code'][$menu_item_db_id] == 'on' ) ? true : false;
  31.     	update_post_meta( $menu_item_db_id, 'zm_menu_code_checkbox', $button_value );
  32.  
  33.     	if ( isset( $_POST['zm_menu_shortcode'][$menu_item_db_id] ) ) {
  34.     		$sanitized_data = sanitize_text_field( $_POST['zm_menu_shortcode'][$menu_item_db_id] );
  35.     		update_post_meta( $menu_item_db_id, 'zm_menu_shortcode', $sanitized_data );
  36.     	} else {
  37.     		delete_post_meta( $menu_item_db_id, 'zm_menu_shortcode' );
  38.     	}
  39.     }
  40.  
  41.     add_action( 'wp_update_nav_menu_item', 'zm_save_menu_custom_item_meta', 10, 2 );
  42.  
  43.     // 前端输出
  44.     function zm_menu_custom_output( $title, $item ) {
  45.     	if( is_object( $item ) && isset( $item->ID ) ) {
  46.     		$menu_shortcode = get_post_meta( $item->ID, 'zm_menu_shortcode', true );
  47.  
  48.     		// 输出菜单标题,可以删除
  49.     		if ( ! empty( $menu_shortcode ) ) {
  50.     			$title = '<span class="zm-menu-custom-title">'.$title.'</span>';
  51.     		}
  52.  
  53.     		// 输出短代码
  54.     		if ( ! empty( $menu_shortcode ) ) {
  55.     			$title .= '<span class="show-menu-shortcode">' . do_shortcode( $menu_shortcode ) . '</span>';
  56.     		}
  57.     	}
  58.  
  59.     	return $title;
  60.     }
  61.  
  62.     add_filter( 'nav_menu_item_title', 'zm_menu_custom_output', 10, 2 );
  63.  
  64.     // 添加CSS类
  65.     function zm_menu_custom_add_class( $classes, $menu_item ) {
  66.     	$menu_code = get_post_meta( $menu_item->ID, 'zm_menu_code_checkbox', true );
  67.     	$menu_shortcode = get_post_meta( $menu_item->ID, 'zm_menu_shortcode', true );
  68.  
  69.     	// 为顶级菜单添加CSS类
  70.     	if ( ! empty( $menu_code ) ) {
  71.     		$classes[] = 'zm-menu-code';
  72.     	}
  73.     	// 为子菜单添加CSS类
  74.     	if ( ! empty( $menu_shortcode ) ) {
  75.     		$classes[] = 'zm-menu-shortcode';
  76.     	}
  77.  
  78.     	return $classes;
  79.     }
  80.     add_filter( 'nav_menu_css_class', 'zm_menu_custom_add_class', 10, 2 );
也想出现在这里?联系我们
创客主机

之后,会在菜单选项设置中增加一个复选表单,用于为顶级菜单添加特定 CSS 类,一个文本框为菜单子项添加短代码并添加 CSS 类,方便编写配套样式。

上述,只是基本代码,并加了简单的注释,还需要编写短代码及相应的样式。

举一反三,能添加短代码,当然也能添加更多的自定义选项设置。具体效果可以参阅我主题的超级菜单。如果不想折腾代码可以安装相似功能的插件:WP Menu Custom Fields

不过用插件,最后也需要折腾代码,因为在原菜单中强行加入自定义内容,不重写样式是肯定不行的。

WordPress 菜单添加自定义选项打造超级菜单

已有 306 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!