Лучший способ отобразить изображения на основе Pod в вашем файле шаблона
Я относительно новичок в WordPress CMS и решил использовать стручки для реализации пользовательских полей, включая несколько полей изображения. В то время как я люблю интерфейс администратора, я был немного взволнован, пытаясь вывести изображения в мой файл шаблона поста.
После долгих исследований и экспериментов я хотел бы поделиться техникой, которую использовал. Очевидно, если есть лучший способ, который я хотел бы знать.
1 ответ
Первое, что я узнал от форума Pods, - то, что Pods сохраняет изображения в базу данных как сообщения "Вложения". Таким образом, к ним можно получить доступ так же, как к обычному старому приложению WordPress.
Вложения имеют отношение родитель-потомок к их сообщению, что означает, что вы можете программно получить все вложения для данного сообщения, используя этот фрагмент, адаптированный для начинающих WP:
<?php
if ( $post->post_type == 'post-type' && $post->post_status == 'publish' ) {
$attachments = get_posts( array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_parent' => $post->ID,
'exclude' => get_post_thumbnail_id()
) );
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
$class = "post-attachment mime-" . sanitize_title( $attachment->post_mime_type );
$thumbimg = wp_get_attachment_image( $attachment->ID, 'thumbnail');
echo '<li class="' . $class . ' data-design-thumbnail">' . $thumbimg . '</li>';
}
}
}
?>
Но это решение является неоптимальным, поскольку отношения родитель-потомок между публикацией и изображением могут быть нарушены, только если изображение удалено из библиотеки мультимедиа. Так:
- Изображение, удаленное из исходного поста, но оставленное в библиотеке для дальнейшего использования, будет по-прежнему выводиться с помощью вышеуказанного кода в исходном посте.
- Если вы измените назначение изображения в поле Pod другого поста, приведенный выше код не будет печатать его в новой записи.
- Система вложений не записывает отношения на уровне поля. Таким образом, если у вас есть более одного поля Pod на основе изображения в сообщении, вышеприведенный код распечатает их все независимо от того, есть ли в них поле.
Тем не менее, я обнаружил, что лучший вариант для вывода данных изображений на основе Pod по полям - это объединить функцию 'get_post_meta', описанную здесь на форумах поддержки WordPress, с функцией 'wp_get_attachment_image', как показано ниже.
<?php
if ( get_post_meta( get_the_ID(), 'image_field', false ) ){
$image_array = get_post_meta( get_the_ID(), 'image_field', false );
}
if ( $image_array ) {
echo '<ul>';
foreach ( $image_array as $image ) {
$class = "post-attachment mime-" . sanitize_title( $image->post_mime_type );
$thumbimg = wp_get_attachment_image( $image['ID'], 'thumbnail');
echo '<li class="' . $class . ' data-design-thumbnail">' . $thumbimg . '</li>';
}
echo '</ul>';
}
?>
Первая функция дает вам объект только с текущими изображениями. Последний отображает эти изображения с размером и дополнительной информацией, ограниченными системой вложений.