web-dev-qa-db-ja.com

Wordpressのナビゲートメニューにカスタムフィールドを追加する

ナビゲーションメニュー項目に新しいカスタムチェックボックスフィールドを追加しました。チェックボックスは問題なく追加されていますが、チェックを外したときには機能しません。チェックされた状態のままになります。

以下のコードは、チェックボックスカスタムフィールドを作成する手順を示しています>

エラーがありますか?

最初にデータベース内にチェックボックスキーを作成しました

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');

それから私はそれのために更新値を作成しました

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);

それから私は新しい(Walker_Nav_Menu_Edit_Custom)クラスを作成しました

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);

それから私は私の新しいクラス(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
Shwan Namiq

この問題を解決するための検索の後、他のHTML入力とは少し異なるチェックボックスでメタボックスの値を更新することで、この問題を解決するための正しい答えが見つかりました。私たちテキストのようなタグ、タグを選択

checkedチェックボックスにupdate_post_metaボックスの値を使用した場合。同時にチェックボックスの値のチェックを外すためにupdate_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);
1
Shwan Namiq