Отображение нескольких настраиваемых полей с одним и тем же именем в содержимом публикации

#php #wordpress #post #custom-fields

#php #wordpress #Публикация #пользовательские поля

Вопрос:

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

Все эти изображения имеют одно и то же имя настраиваемого поля: project_photo_photo

Проблема, с которой я столкнулся, заключается в том, что в новой теме, как я могу сохранить импортированные данные и использовать существующее пользовательское имя поля и отобразить несколько изображений проекта для каждой записи в шаблоне цикла публикации?

Ниже приведен пример кода, показывающий, как далеко я продвинулся в своей попытке отобразить это содержимое, он отображает только один результат изображения, добавление кратных одному и тому же блоку кода приводит только к отображению дубликата первого изображения:

 <?php if ( get_post_meta( get_the_ID(), 'project_photo_photo' ) ) : ?>
            <div class="grid_gallery clearfix">
                <div class="grid_gallery_inner">
                    <figure class="gallery_item featured-thumbnail thumbnail single-gallery-item">
                        <a href="/wp-content/files_mf/<?php echo get_post_meta( get_the_ID(), 'project_photo_photo', true ); ?>" class="image-wrap" rel="prettyPhoto[gallery]">
                            <img class="project_photo_photo" width="260" src="/wp-content/files_mf/<?php echo get_post_meta( get_the_ID(), 'project_photo_photo', true ); ?>" alt="<?php the_title(); ?>" />
                        <span class="zoom-icon"></span>
                        </a>
                    </figure>
                </div>
                <!--END .slider -->
            </div>
        <?php endif; ?>
 

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

Ответ №1:

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

get_post_meta( get_the_ID(), 'project_photo_photo' )

но вы получите только первое значение, если вы используете true в качестве последнего параметра как

get_post_meta( get_the_ID(), 'project_photo_photo', true ) .

Вы можете получить более подробную информацию здесь: http://codex.wordpress.org/Function_Reference/get_post_meta

Вот почему вы каждый раз получаете один и тот же результат.

Кроме того, вы должны просто запросить мета-поле один раз. вы запрашивали его 3 раза, что требует действий и времени БД. Вызовите один раз, сохраните в переменной и используйте столько, сколько захотите.

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

Я изменил ваш код, надеюсь, я разместил forloop его в нужном месте, если нет, разместите в соответствующем месте.

 <?php  $project_photos = get_post_meta( get_the_ID(), 'project_photo_photo' );
    if ( $project_photos ) : ?>
            <div class="grid_gallery clearfix">
                <?php foreach( $project_photos as $project_photo ) { ?>
                <div class="grid_gallery_inner">
                    <figure class="gallery_item featured-thumbnail thumbnail single-gallery-item">
                        <a href="/wp-content/files_mf/<?php echo $project_photo; ?>" class="image-wrap" rel="prettyPhoto[gallery]">
                            <img class="project_photo_photo" width="260" src="/wp-content/files_mf/<?php echo $project_photo; ?>" alt="<?php the_title(); ?>" />
                        <span class="zoom-icon"></span>
                        </a>
                    </figure>
                </div>
                <?php } ?>
                <!--END .slider -->
            </div>
    <?php endif; ?>