WordPress添加自定义字段到菜单项

从WordPress5.4开始,新增了wp_nav_menu_item_custom_fields 钩子,让我们可以通过这个钩子添加自定义字段到菜单项。

注意:本文代码只能在 WordPress 5.4+ 的版本中才可用。

WordPress添加自定义字段到菜单项

添加自定义字段

首先,我们将回调函数附加到新的钩子上,并使用它来显示文本输入框。因为Walker显示了多个菜单项,所以我们必须确保输入内容是菜单项的ID:

/**
* 将自定义字段添加到菜单项
*
* 这将使我们能够很好地与添加相同钩子
的任何其他插件一起玩 *
* @param int $item_id
* @params obj $item – 菜单项
* @params数组$args
*/
函数 kia_custom_fields( $item_id, $item ) {wp_nonce_field(“custom_menu_meta_nonce”,“_custom_menu_meta_nonce_name”);
$custom_菜单_元 = get_post_meta( $item_id, ‘_custom_menu_meta’, 真);
?>

<输入类型=“隐藏”名称=“自定义菜单元随机数”值=“<?php echo wp_create_nonce(”自定义菜单元名称“),?>”/
>
<div类=“字段custom_menu_meta描述范围”样式=“边距:5px 0;”>
<跨度类=“描述”><?php _e(“额外字段”,“自定义菜单元”),?></跨度>
<br/>

<输入类型=“隐藏”类=“导航菜单-id”值=“<?php回显$item_id;?>“/>

<div 类=”记录输入持有者“>
<输入类型=”文本“名称=”custom_menu_meta[<?php 回显 $item_id ;?>]“ id=”自定义菜单元<?php echo $item_id ;?>“ 值=”<?php echo esc_attr( $custom_menu_meta); ?>“/
> <标签 for=”自定义菜单元对<?php echo $item_id ;?>“>
<?php _e( ”自定义菜单文本“,”自定义菜单元“); ?>
</标签>
</div>

</div>

<?php
}
add_action(”wp_nav_menu_item_custom_fields“,”kia_custom_fields“,10,2

);

注意:上面的示例用的字段id是 _custom_menu_meta,请注意根据你的实际需要去修改字段的id。下文的代码也一样记得修改为统一的字段id。

保存字段设置

由于菜单项是WordPress的一种自定义文章类型,因此处理数据与添加和检索常规文章或页面的post_meta相同。

/**
* 保存菜单项元
*
* @param 整数 $menu_id*/
函数kia_nav_update($menu_id, $menu_item_db_id ) {

// 验证这来自我们的屏幕并具有适当的授权。
如果 ( ! isset( $_POST[‘_custom_menu_meta_nonce_name’] ) || ! wp_verify_nonce( $_POST[‘_custom_menu_meta_nonce_name’], ‘custom_menu_meta_nonce’ ) {
返回 $menu_id;
}

if ( isset( $_POST[‘custom_menu_meta’][$menu_项_db_id] ) {
$sanitized_数据 = sanitize_text_field( $_POST[‘custom_menu_meta’][$menu_项_db_id] );
update_post_meta( $menu项数据库 id, “_custom_menu_meta”, $sanitized_data );
}否则 {
delete_post_meta( $menu项数据库 id, ‘_custom_menu_meta’ );
}
}
add_action(“wp_update_nav_menu_item”,“kia_nav_update”,10,2

);

如何调用自定义字段的数据

上面的数据可以保存在数据中了,那我们该如何调用呢?

其实,这个和文章的meta是一样的,毕竟菜单就是一种自定义文章类型。我们可以通过get_post_meta()函数获取,比如:

get_post_meta( $item-> ID, “_custom_menu_meta”, 真 );

相信做过WP开发的人,就非常熟悉这个函数了。

下面是一个简单的示例,将我们这个例子的字段值,用作标题后面的一个描述文字:

/**
* 在前端显示文本。
*
* @param字符串$title菜单项的标题。
* @param WP_Post $item 当前菜单项。
* @return字符串
*/
函数 kia_custom_menu_title( $title, $item ) {if( is_object( $item ) && isset( $item->ID ) {

$custom_菜单_元 = get_post_meta( $item-> ID, “_custom_menu_meta”, true );

如果 ( ! 空( $custom_菜单_元 ) {
$title .= ‘ – ‘ . $custom_菜单_元;
}
}
返回$title;
}
add_filter( nav_menu_item_title, kia_custom_menu_title, 10, 2

);

总结

只要你始终记得 菜单 是一种自定义文章类型,那很多逻辑就比较好理解了,毕竟作为WP开发者,对文章的自定义字段应该比较熟悉。

温馨提示:本文最后更新于2022-09-21 12:09:12,某些文章具有时效性,若有错误或已失效,请在下方留言或联系丁塔克博客
© 版权声明
THE END
喜欢就支持一下吧
点赞15打赏 分享
评论 抢沙发

请登录后发表评论