2016-02-09 2 views
0

В приведенной ниже функции данные в текстовом вводе сохраняются в базе данных так же, как предполагается. Однако флажки не проверяются и, похоже, ничего не сохраняют в базе данных. (Код из плагина WordPress, который я изменяю, чтобы показывать или скрывать пункты меню на основе местоположения пользователя.)Флажки не сохраняются в базе данных

Что я делаю неправильно?

function option($fields, $item_id) { 
    ob_start(); ?> 
     <p class="field-visibility description description-wide"> 
      <label for="edit-menu-item-visibility-<?php echo $item_id; ?>"> 
       <?php _e('Enter country code(s) separated by commas') ?>: 
       <input 
        type="text" 
        class="widefat code" 
        id="edit-menu-item-visibility-<?php echo $item_id; ?>" 
        name="menu-item-visibility[<?php echo $item_id; ?>]" 
        value="<?php echo esc_html(get_post_meta($item_id, 'locations', true)); ?>" /></br> 
       <input 
        type="radio" 
        id="edit-menu-item-visibility-<?php echo $item_id;?>" 
        name="menu-item-show-hide[<?php echo $item_id; ?>]" 
        value="hide" <?php checked(get_post_meta($item_id, 'hide_show', true), 'hide', true); ?> 
       />Hide from these locations.</br> 
       <input 
        type="radio" 
        id="edit-menu-item-visibility-<?php echo $item_id; ?>" 
        name="menu-item-show-hide[<?php echo $item_id; ?>]" 
        value="show" <?php checked(get_post_meta($item_id, 'hide_show', true), 'show', true); ?> 
       />Only show to these locations.</br> 
      </label> 
     </p> 
    <?php 
    $fields[] = ob_get_clean(); 
    return $fields; 
} 

Вот что я использую, чтобы обновить данные в базе данных:

function update_option_text($menu_id, $menu_item_db_id, $args) { 
    $meta_value = get_post_meta($menu_item_db_id, 'locations', true); 
    $new_meta_value = stripcslashes($_POST['menu-item-visibility'][$menu_item_db_id]); 

    if('' == $new_meta_value) { 
     delete_post_meta($menu_item_db_id, 'locations', $meta_value); 
    } 
    elseif($meta_value !== $new_meta_value) { 
     update_post_meta($menu_item_db_id, 'locations', $new_meta_value); 
    } 
} 

    function update_option_hide_show($menu_id, $menu_item_db_id, $args) { 
    $meta_value = get_post_meta($menu_item_db_id, 'hide_show', true); 
    $new_meta_value = stripcslashes($_POST['menu-item-visibility'][$menu_item_db_id]); 

    if('' == $new_meta_value) { 
     delete_post_meta($menu_item_db_id, 'hide_show', $meta_value); 
    } 
    elseif($meta_value !== $new_meta_value) { 
     update_post_meta($menu_item_db_id, 'hide_show', $new_meta_value); 
    } 
} 

и конструктор:

function __construct() { 
    if(is_admin()) { 
     add_filter('wp_edit_nav_menu_walker', array(&$this, 'edit_nav_menu_walker')); 
     add_filter('wp_nav_menu_item_custom_fields', array(&$this, 'option'), 12, 2); 
     add_action('wp_update_nav_menu_item', array(&$this, 'update_option_text'), 10, 3); 
     add_action('wp_update_nav_menu_item', array(&$this, 'update_option_hide_show'), 10, 3); 
     add_action('delete_post', array(&$this, 'remove_visibility_meta'), 1, 3); 
    } else { 
     add_filter('wp_get_nav_menu_items', array(&$this, 'visibility_check'), 10, 3); 
     add_action('init', array(&$this, 'clear_gantry_menu_cache')); 
    } 
} 
+2

Где код, который вставляется в базу? –

+0

@ Томас: Просто добавил. – j8d

ответ

0

$new_meta_value = stripcslashes($_POST['menu-item-visibility'][$menu_item_db_id]); Изменение к $new_meta_value = stripcslashes($_POST['menu-item-show-hide'][$menu_item_db_id]); сделал трюк. Теперь он работает отлично!

Спасибо @Thomas за то, что заставило меня переосмыслить, как это было отправлено в базу данных.

Смежные вопросы