web-dev-qa-db-fra.com

Ajout de champs personnalisés aux menus de navigation de Wordpress

J'ai ajouté un nouveau champ de case à cocher personnalisé aux éléments de menu de navigation. la case à cocher ajoutée sans aucun problème lorsque je vérifie que cela fonctionne, mais lorsque je veux décocher cela ne fonctionne pas et rester dans l'état coché.

le code ci-dessous montre les étapes pour créer le champ personnalisé de la case à cocher>

c'est contient aucune erreur?

d'abord j'ai créé la clé de case à cocher dans la base de données

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

alors j'ai créé la valeur de mise à jour pour elle

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

alors j'ai créé la nouvelle classe (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);

alors j'ai ajouté la case à cocher dans ma nouvelle classe (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

Après quelques recherches pour résoudre ce problème, j’ai trouvé la bonne réponse pour résoudre ce problème dans les valeurs de la boîte de méta de mise à jour spécialement dans la case à cocher un peu différente des autres entrées HTML. balises telles que nous texte, sélectionnez balises

lorsque nous utilisons les valeurs de la case update_post_meta pour la case à cocher checked. doit utiliser dans le même temps update_post_meta pour décocher la valeur de la case à cocher

j'ai résolu mon problème comme ci-dessous. seulement j'ai supprimé post meta quand je décoche la valeur de la case à cocher

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