Intereting Posts
Разрешить авторам редактировать только определенные пользователи Переписать адрес конечной точки без? до конечной точки Создайте точку изображения для размещения URL-адреса вместо страницы вложения Подсчитайте все комментарии пользовательского типа сообщения Автоматическая категория для пользовательского типа сообщения Добавить параметр только в первый пост MySQL Query для выбора сообщения Postmeta Количество сообщений или пользовательских типов сообщений за последние 24 часа (или с сегодняшнего дня) Добавить поле в панель мониторинга, чтобы обновить внедренный URL-адрес на главной странице? Загруженные изображения не отображаются в Media Library, если в IPTC есть специальные символы PHP-эхо-текст выводится в неправильном порядке Ajax на странице настроек (update_option не определено) Поиск пользовательского поиска не работает? Имя видеоролика VideoPress и URL-адрес Как обновлять фид только 2-3 раза в неделю (для электронной почты Feedburner)?

Повторяемые поля CPT + Неопределенный индекс

Я использую этот код здесь для повторения полей в CPT (да, я знаю ACF и некоторые другие), и попытался добавить третье поле.

Поле в настоящее время отображается в мета-окне и выводится на переднем конце. Однако внутри поля мета-поля – когда оно пустое – это

«Уведомление о неопределенном индексе: роль … по строке 235» (я укажу, какая строка ниже),

и на лицевой стороне сказано:

"Примечание: Неопределенный индекс: роль … в строке 29"

в моем файле с одним диском-item.php.

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

Любые предложения о том, как решить эту проблему

add_action('admin_init', 'add_meta_boxes', 1); function add_meta_boxes() { add_meta_box( 'repeatable-fields', 'Personnel Listing:', 'awc_discog_meta_two', 'discog-item', 'normal', 'high'); } function awc_discog_meta_two() { global $post; $repeatable_names = get_post_meta($post->ID, 'repeatable_names', true); wp_nonce_field( 'repeatable_meta_box_nonce', 'repeatable_meta_box_nonce' ); ?> <script type="text/javascript"> //THE JS WORKS FINE </script> <table id="repeatable-fieldset-one" width="100%"> <thead> <tr> <th width="2%"></th> <th width="30%">Name</th> <th width="20%">Role</th> <th width="40%">URL</th> <th width="2%"></th> </tr> </thead> <tbody> <?php if ( $repeatable_names ) : foreach ( $repeatable_names as $field ) { ?> <tr> <td><a class="button remove-row" href="#" title="Remove This Item">-</a></td> <td><input type="text" class="widefat" name="name[]" value="<?php if($field['name'] != '') echo esc_attr( $field['name'] ); ?>" placeholder="Charles Mingus"/></td> //THE NEXT LINE IS LINE 235 <td><input type="text" class="widefat" name="role[]" value="<?php if($field['role'] != '') echo esc_attr( $field['role'] ); ?>" placeholder="guitar/oud"/></td> <td><input type="text" class="widefat" name="url[]" value="<?php if ($field['url'] != '') echo esc_attr( $field['url'] ); ?>" placeholder="http://"/></td> <td><a class="sort">Sort</a></td> </tr> <?php } else : // show a blank one ?> <tr> <td><a class="button remove-row" href="#" title="Remove This Item">-</a></td> <td><input type="text" class="widefat" name="name[]" placeholder="Charles Mingus"/></td> <td><input type="text" class="widefat" name="role[]" placeholder="guitar/oud" /></td> <td><input type="text" class="widefat" name="url[]" placeholder="http://" /></td> <td><a class="sort">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[]" placeholder="Charles Mingus"/></td> <td><input type="text" class="widefat" name="role[]" placeholder="guitar/oud" /></td> <td><input type="text" class="widefat" name="url[]" placeholder="http://" /></td> <td><a class="sort">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_names', true); $new = array(); $names = $_POST['name']; $roles = $_POST['role']; $urls = $_POST['url']; $count = count( $names ); for ( $i = 0; $i < $count; $i++ ) { if ( $roles[$i] != '' ) $new[$i]['role'] = stripslashes( strip_tags( $roles[$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 endif; } if ( !empty( $new ) && $new != $old ) update_post_meta( $post_id, 'repeatable_names', $new ); elseif ( empty($new) && $old ) delete_post_meta( $post_id, 'repeatable_names', $old ); } 

это из single-discog-item.php

 <?php $args = array( 'post_type' => 'discog-item', 'posts_per_page' => -1 ); $loop = new WP_Query( $args ); $repeatable_names = get_post_meta($post->ID, 'repeatable_names', true); while ( $loop->have_posts() ) : $loop->the_post(); the_title(); echo '<div class="entry-content"> if (!empty($repeatable_names)) { echo '<ul class="personnel">'; foreach ($repeatable_names as $field) { $the_name = $field['name']; //THE NEXT LINE IS LINE 29 $the_role = $field['role']; $the_url = $field['url']; echo '<li>'; if (!empty($the_name)) { echo $the_name; } if (!empty($the_role)) { echo $the_role; } if (!empty($the_url)) { echo '<a href="' . $the_url . '" target="_blank">Visit Website</a>'; } echo '</li>'; } echo '</ul>'; } else { echo "Nothing to see here..."; } the_content(); echo '</div>'; endwhile; ?> 

Solutions Collecting From Web of "Повторяемые поля CPT + Неопределенный индекс"

Из ваших комментариев это происходит только тогда, когда поля остаются пустыми. Это означает, что конкретное поле не устанавливается.

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

 <td><input type="text" class="widefat" name="name[]" value="<?php if($field['name'] != '') echo esc_attr( $field['name'] ); ?>" placeholder="Charles Mingus"/></td> <td><input type="text" class="widefat" name="role[]" value="<?php if($field['role'] != '') echo esc_attr( $field['role'] ); ?>" placeholder="guitar/oud"/></td> <td><input type="text" class="widefat" name="url[]" value="<?php if ($field['url'] != '') echo esc_attr( $field['url'] ); ?>" placeholder="http://"/></td> 

Для сохранения сбой вы должны проверить все три поля, если они установлены с помощью isset перед их отображением. Чтобы исправить ваш сервер ошибок, измените эти три строки на

 <td><input type="text" class="widefat" name="name[]" value="<?php if( isset( $field['name'] ) ) echo esc_attr( $field['name'] ); ?>" placeholder="Charles Mingus"/></td> <td><input type="text" class="widefat" name="role[]" value="<?php if( isset( $field['role'] ) ) echo esc_attr( $field['role'] ); ?>" placeholder="guitar/oud"/></td> <td><input type="text" class="widefat" name="url[]" value="<?php if( isset( $field['url'] ) ) echo esc_attr( $field['url'] ); ?>" placeholder="http://"/></td> 

Вам нужно сделать то же самое на одной странице (второй блок кода). Как указано в комментариях, у вас есть синтаксическая ошибка, я не знаю, является ли это просто копией и вставкой ошибки, но

 echo '<div class="entry-content"> 

должно быть

 echo '<div class="entry-content">'; 

Также

 $repeatable_names = get_post_meta($post->ID, 'repeatable_names', true); 

должен находиться в вашей петле, а не снаружи

Вот как выглядит ваш код в шаблоне одной страницы.

 <?php $args = array( 'post_type' => 'discog-item', 'posts_per_page' => -1 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) { $loop->the_post(); the_title(); echo '<div class="entry-content">'; $repeatable_names = get_post_meta($post->ID, 'repeatable_names', true); if (!empty($repeatable_names)) { echo '<ul class="personnel">'; foreach ($repeatable_names as $field) { echo '<li>'; if(isset($field['name'])){ echo $field['name']; } if(isset($field['role'])){ echo $field['role']; } if(isset($field['url'])){ echo '<a href="' . $field['url'] . '" target="_blank">Visit Website</a>'; } echo '</li>'; } echo '</ul>'; } else { echo "Nothing to see here..."; } the_content(); echo '</div>'; } ?>