Intereting Posts
wp_mail () не работает, но ответ показывает true Как переопределить add_filter плагина? Добавить информацию о категории после публикации? Страница пользовательского обслуживания Сортировка пользователей в get_users () в пользовательском порядке Можно ли отключить функцию родительской темы? Добавление страницы администратора – подход ООП не работает Могу ли я создать две таблицы за один раз при установке пользовательского плагина? Показывать последние сообщения в одной странице wp_mail работает с add_action ('save_post', …), но не является ajax-действием Ссылка «Подробнее» Как перенести базу данных с сервера на другой Может ли WordPress автоматически менять ссылки? Ограничить форму поиска только 4 пользовательскими типами сообщений Могу ли я иметь два файла single.php и иметь один дисплей только для сообщений и других комментариев для этого конкретного сообщения?

Как я могу получить несколько значений get_post_meta эффективно?

Я ищу решение для возврата нескольких значений get_post_meta …

Current Я использую массив мета-полей следующим образом:

$meta_boxes[] = array( 'id' => 'setlist', 'title' => 'Setlist Information', 'pages' => array('post'), 'fields' => array( array( 'name' => 'Setlist 1', // field name 'desc' => 'Entry 1', // field description, optional 'id' => $prefix . 'setlist_1', // field id, ie the meta key 'type' => 'text', // text box 'std' => '', // default value, optional 'style' => 'width: 100px', // custom style for field, added in v3.1 ), array( 'name' => 'Setlist 2', 'desc' => 'Entry 2', 'id' => $prefix . 'setlist_2', 'type' => 'text', 'std' => '', 'style' => 'width: 100px', ), 

и т. д. (т. е. setlist_3,4,5,6,7,8 ….)

В моем single.php у меня есть:

 <?php if ( get_post_meta( $post->ID, 'rw_setlist_1', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_1', true ); echo "</li>"; ?> <?php endif; ?> <?php if ( get_post_meta( $post->ID, 'rw_setlist_2', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_2', true ); echo "</li>"; ?> <?php endif; ?> <?php if ( get_post_meta( $post->ID, 'rw_setlist_3', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_3', true ); echo "</li>"; ?> <?php endif; ?> <?php if ( get_post_meta( $post->ID, 'rw_setlist_4', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_4', true ); echo "</li>"; ?> <?php endif; ?> <?php if ( get_post_meta( $post->ID, 'rw_setlist_5', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_5', true ); echo "</li>"; ?> 

Значения заданных значений могут быть от 2 до 30 …

Назовите меня сумасшедшим, но я чувствую, что этот метод вызывает ненужные и длительные нагрузки, верно? Итак, как я мог бы создать более эффективный скрипт для этого, который бы проверил все значения в массиве «более простым способом».

Способ настройки вашего кода просто неверен, вы делаете два вызова базы данных для каждого настраиваемого поля, и если у вас есть от 2 до 30 полей, то это означает, что вы делаете более 60 вызовов в базу данных, которые могут выполняться одним вызовом используя get_post_custom() для ex:

 $custom_fields = get_post_custom($post->ID); for ($i = 1; $i <= 30; $i++) { if(isset($custom_fields["rw_setlist_$i"])){ echo "<li>"; echo $custom_fields["rw_setlist_$i"]; echo "</li>"; } } 

Я считаю, get_post_meta() (или, точнее, get_metadata() он вызывает) извлекает все метаданные для сообщения в одном запросе и затем кэширует его для последующих вызовов. Что касается многословия вашего кода, если им не нужно явно указывать, вы можете просто сохранить их все под одним ключом и захватить их как массив.