Intereting Posts
Почему wp / admin перенаправляется на wordpress.com/log-in? Удаление отображаемого изображения из галереи? Кнопка «Внешняя ссылка» под заголовком «Post Expression» на Index.php Редактировать структуру Permalink для пользовательского типа сообщения или изменить .htaccess? Проблема с вращением изображения (горизонтальная загрузка изображения по вертикали) – проблема с Exif? Как импортировать файл WP XML автоматически при установке? MarketPress против других решений электронной коммерции WP Динамическая страница вне WordPress Как передать массив Чтобы get_the_category_by_ID () и получить массив назад? Перенаправление на пользовательскую переменную Пользовательский тип сообщения с вложенными таксономиями и файлами шаблонов несколько текстовых областей комментариев Сообщение и страница с таким же слизнем Отображение выбранных категорий на странице сообщений Показывать категорию только определенным уровням пользователя без плагина

Если установлен флажок Meta Checkbox, сделайте что-нибудь?

Я создал пользовательский флажок, который, когда я проверяю, хочу, чтобы он отображал немного другое содержимое (особенно специальный стиль css). По какой-то причине он работает неправильно.

В моих функциях:

add_action( 'add_meta_boxes', 'add_special_checkbox' ); function add_special_checkbox() { add_meta_box( 'special-checkbox', 'Special Box', 'special_checkbox_func', 'post', 'side', 'high' ); } function special_checkbox_func( $post ) { $values = get_post_custom( $post->ID ); $check = isset( $values['special_box_check'] ) ? esc_attr( $values['special_box_check'][0] ) : ''; wp_nonce_field( 'my_special_box_nonce', 'special_box_nonce' ); ?> <p> <input type="checkbox" name="special_box_check" id="special_box_check" <?php checked( $check, 'on' ); ?> /> <label for="special_box_check">Is this post 'special?'</label> </p> <?php } add_action( 'save_post', 'special_checkbox_save' ); function special_checkbox_save( $post_id ) { // Bail if we're doing an auto save if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // if our nonce isn't there, or we can't verify it, bail if( !isset( $_POST['special_box_nonce'] ) || !wp_verify_nonce( $_POST['special_box_nonce'], 'my_special_box_nonce' ) ) return; // if our current user can't edit this post, bail if( !current_user_can( 'edit_post' ) ) return; // now we can actually save the data $allowed = array( 'a' => array( // on allow a tags 'href' => array() // and those anchords can only have href attribute ) ); // This is purely my personal preference for saving checkboxes $chk = ( isset( $_POST['special_box_check'] ) && $_POST['special_box_check'] ) ? 'on' : 'off'; update_post_meta( $post_id, 'special_box_check', $chk ); } ?> 

В моей петле:

 <?php if (get_post_meta($post->ID, 'special_box_check', true)) { ?> //add special styling <? } else { ?> //dont add special styling <?php } ?> 

Когда я сохраняю некоторые сообщения, у них есть особый стиль, хотя я не проверял их. И когда я сниму флажок, я бы хотел, чтобы специальный стиль ушел, но это не значит, что ящик не установлен.

Я уверен, что я делаю что-то неправильно здесь. Заранее спасибо.

Solutions Collecting From Web of "Если установлен флажок Meta Checkbox, сделайте что-нибудь?"

Вы устанавливаете значение, независимо от того, проверена она или нет:

 $chk = ( isset( $_POST['special_box_check'] ) && $_POST['special_box_check'] ) ? 'on' : 'off'; 

Значение будет либо on либо off , поэтому условие if всегда истинно, так как оно всегда имеет значение.

Вы можете изменить его, чтобы сохранить, только если он установлен, или удалить его, если это не так. Таким образом, ваше состояние будет работать, и у вас не будет дополнительных мета-записей, чтобы сохранить состояние выключено.

 if ( isset( $_POST['special_box_check'] ) && $_POST['special_box_check'] ) { add_post_meta( $post_id, 'special_box_check', 'on', true ); } else { delete_post_meta( $post_id, 'special_box_check' ); } 

Код совершенно в порядке ничего не удаляет, просто нужно иметь условное место

 // check against the custom field has a value if ( get_post_meta($post->ID, 'special_box_check', true) == 'on' ) ) { $class = 'highlight'; } else{ $class = 'normal'; } 

Поместите переменную $class в свою обертку div. Ваш стиль будет выглядеть следующим образом:

 .highlight{ color:#FF0000; } .normal{ color:#000; }