Intereting Posts
Безопасно ли устанавливать стиль шрифта, не помещая http или https? добавление tax_query в $ query_string Вызвать полный URL-адрес изображения вместо URL-адреса каталога стилей в JS для функции бесконечной прокрутки Как безопасно редактировать functions.php Лучшая практика для отображения категоризированных сообщений на главной странице Описание категории эха в single.php Как изменить pre_get_post для категории, в которой находится пользователь? SQL-запрос для обновления post_date (один пост = одна единственная дата и время) В чем преимущества API настроек? Лучший способ добавить поля пользовательских / магических / флаттеров в RSS-канал Страницы верхнего уровня переадресовываются на главную страницу! Некоторые вопросы о том, как правильно добавить 2 CSS-файла в тему WordPress? Лучший способ запроса сообщений? Автоматическое название мультимедиа по умолчанию и alt Запросить сообщения из идентификатора терминов детской таксономии

Как работать с флажками на странице редактирования?

Я пытаюсь использовать новую терминологию, представленную в 4.4.

У меня есть много флажков, которые представляют функции на экране редактирования пользовательской таксономии.


Моя текущая настройка (обратите внимание, что я использую правильные крючки, я просто разделил их, чтобы сделать код проще):

<?php //Get previous values from db - this is edit page afterall $feature_one = get_term_meta( $term->term_id, 'feature_one', true ); $feature_two = get_term_meta( $term->term_id, 'feature_two', true ); $feature_three = get_term_meta( $term->term_id, 'feature_three', true ); //Imagine that there's over 20 of these ?> <input type="checkbox" name="feature[]" id="feature-one" value="feature_one" <?php if ( $feature_one ) { echo 'checked'; } ?> /> <input type="checkbox" name="feature[]" id="feature-two" value="feature_two" <?php if ( $feature_two ) { echo 'checked'; } ?> /> <input type="checkbox" name="feature[]" id="feature-three" value="feature_three" <?php if ( $feature_three ) { echo 'checked'; } ?> /> <!-- Also over 20 of these --> <?php //Triggers if taxonomy edit button is pressed foreach( $_POST['feature'] as $feature ) { if( isset( $feature ) && '' !== $feature ) { $checked_feature = $feature; update_term_meta( $term_id, $checked_feature, 1 ); } } /* This outputs in database like this if all 3 are checked meta_key meta_value ____________________________________ feature_one | 1 feature_two | 1 feature_three | 1 */ /* How I need to output it in frontend - V is checked icon, X is unchecked | v V features one //have specific feature X feature two //VERY IMPORTANT to also show features that don't apply V feature three //have specific feature */ ?> 

Проблемы:

  1. PHP не возвращает ничего, если флажок не установлен. Если функция была проверена ранее, и она не проверяется, если она была изменена позже , значение не обновляется в базе данных
  2. Представьте себе более 20 флажков. Мне трудно сохранить их в массиве с определенным порядком, чтобы метки и значения были правильно партированы в интерфейсе, также это не будет проблемой, если отмеченные флажки возвращены 0 или что-то еще, и я мог бы сделать массив, где отмечены, 1, не отмечен 0

Как вы решаете эту проблему? Непроверенные флажки не возвращают ничего?

Мне удалось взломать этот орех после нескольких дней экспериментов.

 <!-- Note how name attribute has actual number in brackets --> <input type="checkbox" name="feature[1]" id="feature-one" value="feature_one"<?php if ( $feature_one ) { echo 'checked'; } ?> /> <input type="checkbox" name="feature[2]" id="feature-one" value="feature_one" <?php if ( $feature_one ) { echo 'checked'; } ?> /> <?php //This happens on form submit or when you press edit button //Number or checkboxes goes here which eventually become keys $checkboxes = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23); $features = array(); $p = array_key_exists('feature', $_POST) ? $_POST['feature'] : array(); foreach( $checkboxes as $i ) { if(array_key_exists( $i, $p ) ) { //If is checked $features[$i] = 1; } else { //If is not checked $features[$i] = 0; } } //Save to database as an array where checked are 1 and unchecked are 0 update_term_meta( $term_id, 'features', $features ); ?>