#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; ?>