В приведенной ниже функции данные в текстовом вводе сохраняются в базе данных так же, как предполагается. Однако флажки не проверяются и, похоже, ничего не сохраняют в базе данных. (Код из плагина 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'));
}
}
Где код, который вставляется в базу? –
@ Томас: Просто добавил. – j8d