Intereting Posts
Настройки адаптера в массивах Функция поиска в 'taxonomy postbox' на странице редактирования сообщений Autologin работает только второй раз Получить изображения галереи из идентификатора страницы Пользовательский запрос работает, но возвращает «Undefined Offset: 0» 2 Петли на одной странице – разбиение на две части петли игнорирует массив исключенных должностей Изменение домена с новыми размерами изображений не правильно сформированный (недопустимый токен) в строке 15, столбец 51, байт 720 при попытке разобрать вызов XMLRPC шаблон страницы категории для пользовательского типа сообщения Выполнить функцию при сохранении настроек register_activation_hook на multisite Как создать настраиваемый маршрут с помощью какой-либо строки-части / число-части, указывающей на существующую страницу? Включение тестового плагина PHPUnit Расширьте список MIME-типов, поддерживаемых встроенным загрузчиком в 3.3 Можно ли хранить массивы в настраиваемом поле?

Сортировка настраиваемых мета-значений не сохраняет флажки правильно

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

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

Я уверен, что проблема связана с этим битом кода, который я добавил, чтобы справиться с сохранением значений флажка:

if ( $available_for_purchase[$i] == true ) $new[$i]['available_for_purchase'] = true; 

Я также пробовал это с другим …

 if ( $available_for_purchase[$i] == true ) $new[$i]['available_for_purchase'] = true; else $new[$i]['available_for_purchase'] = false; 

… но это делает то же самое.

Кто-нибудь знает, как я могу спасти их в правильном порядке?

Вот мой код в полном объеме:

 add_action('admin_init', 'add_meta_boxes', 1); function add_meta_boxes() { add_meta_box( 'repeatable-fields', 'Songs', 'repeatable_meta_box_display', 'albums', 'normal', 'high'); } function repeatable_meta_box_display() { global $post; $repeatable_fields = get_post_meta($post->ID, 'repeatable_fields', true); wp_nonce_field( 'repeatable_meta_box_nonce', 'repeatable_meta_box_nonce' ); ?> <script type="text/javascript"> jQuery(document).ready(function($) { $('.metabox_submit').click(function(e) { e.preventDefault(); $('#publish').click(); }); $('#add-row').on('click', function() { var row = $('.empty-row.screen-reader-text').clone(true); row.removeClass('empty-row screen-reader-text'); row.insertBefore('#repeatable-fieldset-one tbody>tr:last'); return false; }); $('.remove-row').on('click', function() { $(this).parents('tr').remove(); return false; }); $('#repeatable-fieldset-one tbody').sortable({ opacity: 0.6, revert: true, cursor: 'row-resize', handle: '.sort' }); }); </script> <table id="repeatable-fieldset-one" width="100%"> <thead> <tr> <th width="2%"></th> <th width="20%">Name</th> <th width="30%">Image</th> <th width="30%">Link</th> <th width="10%">Available for purchase</th> <th width="2%"></th> </tr> </thead> <tbody> <?php if ( $repeatable_fields ) : foreach ( $repeatable_fields as $field ) { ?> <tr> <td><a class="button remove-row" href="#">-</a></td> <td><input type="text" class="widefat" name="name[]" value="<?php if($field['name'] != '') echo esc_attr( $field['name'] ); ?>" /></td> <td><input type="text" class="widefat" name="image[]" value="<?php if($field['image'] != '') echo esc_attr( $field['image'] ); ?>" /></td> <td><input type="text" class="widefat" name="url[]" value="<?php if ($field['url'] != '') echo esc_attr( $field['url'] ); else echo 'http://'; ?>" /></td> <td style="text-align: center;"><input type="checkbox" name="available_for_purchase[]" <?php if( $field['available_for_purchase'] == true ) { ?>checked="checked"<?php } ?> /></td> <td><a class="button sort">|||</a></td> </tr> <?php } else : // show a blank one ?> <tr> <td><a class="button remove-row" href="#">-</a></td> <td><input type="text" class="widefat" name="name[]" /></td> <td><input type="text" class="widefat" name="image[]" /></td> <td><input type="text" class="widefat" name="url[]" value="http://" /></td> <td style="text-align: center;"><input type="checkbox" name="available_for_purchase[]" /></td> <td><a class="button sort">|||</a></td> </tr> <?php endif; ?> <!-- empty hidden one for jQuery --> <tr class="empty-row screen-reader-text"> <td><a class="button remove-row" href="#">-</a></td> <td><input type="text" class="widefat" name="name[]" /></td> <td><input type="text" class="widefat" name="image[]" /></td> <td><input type="text" class="widefat" name="url[]" value="http://" /></td> <td style="text-align: center;"><input type="checkbox" name="available_for_purchase[]" /></td> <td><a class="button sort">|||</a></td> </tr> </tbody> </table> <p><a id="add-row" class="button" href="#">Add another</a> <input type="submit" class="metabox_submit" value="Save" /> </p> <?php } add_action('save_post', 'repeatable_meta_box_save'); function repeatable_meta_box_save($post_id) { if ( ! isset( $_POST['repeatable_meta_box_nonce'] ) || ! wp_verify_nonce( $_POST['repeatable_meta_box_nonce'], 'repeatable_meta_box_nonce' ) ) return; if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; if (!current_user_can('edit_post', $post_id)) return; $old = get_post_meta($post_id, 'repeatable_fields', true); $new = array(); $names = $_POST['name']; $urls = $_POST['url']; $available_for_purchase = $_POST['available_for_purchase']; $count = count( $names ); for ( $i = 0; $i < $count; $i++ ) { if ( $names[$i] != '' ) : $new[$i]['name'] = stripslashes( strip_tags( $names[$i] ) ); if ( $urls[$i] == 'http://' ) $new[$i]['url'] = ''; else $new[$i]['url'] = stripslashes( $urls[$i] ); // and however you want to sanitize if ( $available_for_purchase[$i] == true ) $new[$i]['available_for_purchase'] = true; endif; } if ( !empty( $new ) && $new != $old ) update_post_meta( $post_id, 'repeatable_fields', $new ); elseif ( empty($new) && $old ) delete_post_meta( $post_id, 'repeatable_fields', $old ); }