我在导航菜单项中添加了新的自定义复选框字段。当我选中它的工作状态,但当我想取消选中它不工作并保持选中状态时,该复选框添加时没有任何问题。
下面的代码显示了创建复选框自定义字段>
它是否包含任何错误?
first i created check box key within database
function YPE_setup_custom_fields($item) {
$item->divider = get_post_meta($item->ID, \'_menu_item_divider\', true);
}
add_filter(\'wp_setup_nav_menu_item\', \'YPE_setup_custom_fields\');
then i created the update value for it
function YPE_update_custom_fields($menu_id, $menu_item_db_id, $menu_item_data) {
if (is_array($_REQUEST[\'menu-item-divider\'])) {
$YPE_divider_value = $_REQUEST[\'menu-item-divider\'][$menu_item_db_id];
update_post_meta($menu_item_db_id, \'_menu_item_divider\', $YPE_divider_value);
}
add_action(\'wp_update_nav_menu_item\', \'YPE_update_custom_fields\', 10, 3);
then i created the new (Walker_Nav_Menu_Edit_Custom) class
function YPE_edit_custom_walker($walker, $item_id) {
return \'Walker_Nav_Menu_Edit_Custom\';
}
add_filter(\'wp_edit_nav_menu_walker\', \'YPE_edit_custom_walker\', 10, 2);
then i added the check box within my new class (Walker_Nav_Menu_Edit_Custom)
<p class="field-link-divider description">
<label for="edit-menu-item-divider-<?php echo $item_id; ?>">
<input type="checkbox" id="edit-menu-item-divider-<?php echo $item_id; ?>" value="_blank" name="menu-item-divider[<?php echo $item_id; ?>]"<?php checked( $item->divider, \'_blank\' ); ?> />
<?php _e( \'Show divider\' ); ?>
</label>
</p>
最合适的回答,由SO网友:Shwan Namiq 整理而成
在对解决此问题进行了一些搜索之后,我在更新元框值中找到了解决此问题的正确答案,特别是在checkbox 与其他Html输入标记(如us)略有不同text , select 标签
当我们使用update_post_meta
框值checked
复选框。必须同时使用update_post_meta
用于取消选中复选框值
我解决了如下问题。只有在取消选中复选框值时,我才删除了post meta
function YPE_update_custom_fields($menu_id, $menu_item_db_id, $menu_item_data) {
if (is_array($_REQUEST[\'menu-item-divider\'])) {
$YPE_divider_value = ;
update_post_meta($menu_item_db_id, \'_menu_item_divider\', $_REQUEST[\'menu-item-divider\'][$menu_item_db_id]);
} else {
delete_post_meta($menu_item_db_id, \'_menu_item_divider\');
}
add_action(\'wp_update_nav_menu_item\', \'YPE_update_custom_fields\', 10, 3);