Intereting Posts
Как пользователи могут сделать «Плейлист» сообщений? WordPress bootstrap menue с уровнем 3. Получить категории дочерних категорий пользовательской таксономии? Плагин, чтобы получить результат на основе формы. Пользовательский обход шаблона для пейджера для index.php Плагины и способы назначения URL-адресов для контента Эхо-строка в нижнем колонтитуле панели администратора рядом с версией нет Преобразование вывода элементов nav_menu в древовидный многомерный массив Получить теги для текущего пользователя Как разбивать список пользовательских терминов таксономии? 404 ошибок на каждой странице (включая главную страницу) После перехода с IIS на Apache Изображения, не отображаемые после пути, указанного в header.php Как получить 5 последних комментариев и каждого комментария 5 последних ответов (детей) Ссылки по теме – с других сайтов Проблемы с производительностью: index.php vs taxonomy- $ taxonomy.php

как установить значение по умолчанию для флажка в wordpress

Я столкнулся с проблемой установки значения по умолчанию для поля флажка в WordPress. У меня есть поле ввода флажка (metabox) в настраиваемом сообщении. Я хочу, чтобы флажок был установлен по умолчанию. и если пользователь снимет его, то он должен быть сохранен и снят и не снят, если страница обновлена. Моя проблема в том, что я не могу установить значение по умолчанию для этого флажка. У меня есть только два значения для работы. Основная проблема возникает из-за того, что функция savemetadata запускается, когда я нажимаю «добавить новую» запись, поэтому значение по умолчанию автоматически сохраняется в базе данных без сохранения нового сообщения. Я пробовал уже 3 дня. Я попытался сохранить значение по умолчанию «да», когда пользователь не установил флажок.

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

// for displaying metabox function aps_add_meta_box() { add_meta_box( 'aps_metabox', __( 'Slider Settings & Shortcode Generator', APS_TEXTDOMAIN ), 'aps_metabox_cb', // callback 'apspostslider', // screen or posttype 'normal' );} add_action( 'add_meta_boxes', 'aps_add_meta_box' ); function aps_metabox_cb( $post ) { wp_nonce_field( 'aps_meta_save', 'aps_meta_save_nounce' ); // nounce $aps_display_post_title = get_post_meta( $post->ID, 'aps_display_post_title', true ); <input type="checkbox" name="aps_display_post_title" value="yes" <?php checked( $aps_display_post_title, 'yes'); /> } 

Код для сохранения данных метабокса в save fucntion:

 function aps_meta_save( $post_id ) { // Perform checking for before saving $is_autosave = wp_is_post_autosave($post_id); $is_revision = wp_is_post_revision($post_id); $is_valid_nonce = (isset($_POST['aps_meta_save_nounce']) && wp_verify_nonce( $_POST['aps_meta_save_nounce'], 'aps_meta_save' )? 'true': 'false'); if ( $is_autosave || $is_revision || !$is_valid_nonce ) return; // Is the user allowed to edit the post or page? if ( !current_user_can( 'edit_post', $post_id )) return; $aps_display_post_title = (isset($_POST['aps_display_post_title']))? sanitize_text_field( $_POST["aps_display_post_title"] ): '' ; update_post_meta($post_id, "aps_display_post_title", $aps_display_post_title); } // save only when aps post slider posttype is saved add_action( 'save_post_apspostslider', 'aps_meta_save'); 

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

  $aps_display_post_title = (isset($_POST['aps_display_post_title']))? sanitize_text_field( $_POST["aps_display_post_title"] ): 'yes' ; update_post_meta($post_id, "aps_display_post_title", $aps_display_post_title); 

UPDATE: теперь все работает после смены крючка. крюк save_post выполняется, когда сообщение создается или обновляется. SO, функция сохранения метаданных будет выполняться при создании сообщения и, таким образом, значение по умолчанию будет сохранено в базе данных. Однако теперь, изменив привязку на «edit_post», теперь все работает. Спасибо брату майки, который помог мне. Весь рабочий код приведен ниже:

 //Show meta box function aps_add_meta_box() { add_meta_box( 'aps_metabox', __( 'Slider Settings & Shortcode Generator', APS_TEXTDOMAIN ), 'aps_metabox_cb', 'apspostslider', 'normal' ); } add_action( 'add_meta_boxes', 'aps_add_meta_box' ); /** * Prints the box content. */ function aps_metabox_cb( $post ) { // Add a nonce field so we can check for it later. wp_nonce_field( 'aps_meta_save', 'aps_meta_save_nounce' ); $aps_display_post_title = get_post_meta( $post->ID, 'aps_display_post_title', true ); <input type="checkbox" name="aps_display_post_title" value="yes" <?php if ($aps_display_post_title != 'no') { echo 'checked'; }?>/> } // Save or Update metabox data function aps_meta_save( $post_id, $post ) { if ($post->post_type != 'apspostslider') {return;} // Perform checking for before saving $is_autosave = wp_is_post_autosave($post_id); $is_revision = wp_is_post_revision($post_id); $is_valid_nonce = (isset($_POST['aps_meta_save_nounce']) && wp_verify_nonce( $_POST['aps_meta_save_nounce'], 'aps_meta_save' )? 'true': 'false'); if ( $is_autosave || $is_revision || !$is_valid_nonce ) return; // Is the user allowed to edit the post or page? if ( !current_user_can( 'edit_post', $post_id )) return; if ( (isset($_POST['aps_display_post_title'])) && ($_POST['aps_display_post_title'] == 'yes') ) { $aps_display_post_title = 'yes'; } else {$aps_display_post_title = 'no';} update_post_meta($post_id, "aps_display_post_title", $aps_display_post_title); add_action( 'edit_post', 'aps_meta_save', 10, 2); 

Solutions Collecting From Web of "как установить значение по умолчанию для флажка в wordpress"

Я думаю, что проблема может быть логикой с использованием checked

  <input type="checkbox" name="aps_display_post_title" value="yes" <?php if ($aps_display_post_title != 'no') {echo 'checked';} ?> /> 

… с другой стороны, тогда запуск sanitize_text_field по значению флажка также может вызвать проблему.

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

 if ( (isset($_POST['aps_display_post_title'])) && ($_POST['aps_display_post_title'] == 'yes') ) { $aps_display_post_title = 'yes';} } else {$aps_display_post_title = 'no';} update_post_meta($post_id, "aps_display_post_title", $aps_display_post_title); 

ОБНОВИТЬ

Чтобы предотвратить срабатывание функции метаданных при создании почты, edit_post в edit_post вместо save_post (и выполните внутреннюю проверку типа сообщения, используя второй аргумент, который передается в $post ) …

 add_action( 'edit_post', 'aps_meta_save', 10, 2); function aps_meta_save($post_id, $post) { if ($post->post_type != 'apspostslider') {return;} ... 

Ваш код сделает значение yes только тогда, когда пользователь заполнит форму. Вы можете проверить, нет ли там мета, затем установите флажок или попробуйте следующее:

 $aps_display_post_title = get_post_meta( $post->ID, 'aps_display_post_title', true ); $aps_display_post_title = ! ( 'off' == (string) $aps_display_post_title ); ?> <input type="checkbox" name="aps_display_post_title" <?php checked( $aps_display_post_title ); ?> /> <?php // updating the meta $aps_display_post_title = ! empty($_POST['aps_display_post_title'])? 'on' : 'off'; // call this only when the checkbox is in the screen update_post_meta( $post_id, "aps_display_post_title", $aps_display_post_title ); 

Думаю, он должен работать. НО не вызывайте скрипт обновления, если флажок не находится в форме на экране, что позволяет снять флажки, даже если они отмечены.