向WordPress导航菜单添加自定义域

时间:2015-12-30 作者:Shwan Namiq

我在导航菜单项中添加了新的自定义复选框字段。当我选中它的工作状态,但当我想取消选中它不工作并保持选中状态时,该复选框添加时没有任何问题。

下面的代码显示了创建复选框自定义字段>

它是否包含任何错误?

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>

1 个回复
最合适的回答,由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);