Лучший способ отобразить изображения на основе 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>';
        }

    }
}
?>

Но это решение является неоптимальным, поскольку отношения родитель-потомок между публикацией и изображением могут быть нарушены, только если изображение удалено из библиотеки мультимедиа. Так:

  1. Изображение, удаленное из исходного поста, но оставленное в библиотеке для дальнейшего использования, будет по-прежнему выводиться с помощью вышеуказанного кода в исходном посте.
  2. Если вы измените назначение изображения в поле Pod другого поста, приведенный выше код не будет печатать его в новой записи.
  3. Система вложений не записывает отношения на уровне поля. Таким образом, если у вас есть более одного поля 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>';
}
?>

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

Другие вопросы по тегам