获取图库图像描述不适用于某些图像ID

时间:2020-03-19 作者:sialfa

我正在使用此代码从帖子或页面获取图像,以便在自定义滑块中使用它们。

<?php $section_content = get_page_by_path( \'partners\', OBJECT, \'post\' ); ?>
<?php $images_gallery = get_post_gallery_images( $section_content->ID ); //var_dump( $images_gallery ); ?>

      <div class="swiper-container post-slider" style="height:300px;">
        <div class="swiper-wrapper">
          <?php if( $images_gallery ): foreach( $images_gallery as $image ): ?>
          <?php  //get the id of the image post.
             $image_id = attachment_url_to_postid( $image );
             var_dump( $image_id );
             //get the image "post" information
             $attached_image = get_post( $image_id );
             //get the image title
             $image_title = $attached_image->post_title;
             //get the image caption
             $image_caption = $attached_image->post_excerpt;
             //var_dump($image_id, $attached_image);
            ?>
            <div class="swiper-slide" style="background-image:url(\'<?php echo $image; ?>\');background-size:cover;">
              <!-- <img class="img-fluid w-100" src="" > -->
              <small class="text-white m-4 d-none d-md-block" style="position:absolute;top:0;"><?php echo $image_title; ?></small>
            </div>
          <?php endforeach; ?>
          <?php endif; ?>
        </div>
        <div class="swiper-scrollbar"></div>
      </div>
在这里搜索之后,我找到了一个快速的解决方案,可以获取图库图像信息,如标题、描述和标题,但我对标题和id有问题。一些图像id没有返回,如果我使用var_dump() 我可以看到从函数返回的id值attachment_url_to_postid()int(0).

我发现wordpress将加载一个在url末尾附加了维度的图像。我已经检查了媒体库中的图像permalink,但url没有问题,没有附加用于显示文件的维度:http://myasite.com/wp-content/uploads/2020/03/my-image-1024x683.jpg. 据我所知,获取id需要一个如下url:http://myasite.com/wp-content/uploads/2020/03/my-image.jpg.<有解决方法吗?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

而不是使用get_post_gallery_images()attachment_url_to_postid(), 你可以使用get_post_gallery() 当第二个参数为false, 为您提供一个包含两个项目/键的数组:1)src &mdash;图像URL数组,以及2)ids &mdash;附件ID(逗号分隔)。

所以你可以$images_gallery = get_post_gallery( $section_content, false ); 然后:

<div class="swiper-container post-slider" style="height:300px;">
    <div class="swiper-wrapper">
        <?php if ( $images_gallery ) :
            $ids = wp_parse_id_list( $images_gallery[\'ids\'] );
            foreach ( $images_gallery[\'src\'] as $i => $image ) :
                $image_id = $ids[ $i ];

                //get the image "post" information
                $attached_image = get_post( $image_id );

                // $image contains the image URL for the specified image size (e.g. \'large\'),
                // but you can really use functions like wp_get_attachment_image_src() to get
                // a different image URL.
                // ... your code.
                ?>
                    ... your HTML
                <?php
            endforeach;
        endif; ?>
    </div>
    <div class="swiper-scrollbar"></div>
</div>

更新

因此,作为对您评论的回复:

我想了解为什么WordPress只会将图像大小附加到某些图像的链接中。

因为有些图像(在维度上)比那些没有附加图像大小的图像大也就是说,当您上传图像时,WordPress会根据您网站中定义的每种图像大小制作一份图像大小调整后的副本&mdash;默认大小为缩略图(150px x 150px), 中等(300px x 300px) 和大型(1024px x 1024px) 正如您在“媒体设置”页面(设置媒体)上看到的那样。每个图像副本的名称都在末尾附加了维度(<original name>-<resized width>x<resized height>.<ext>) 就像my-image-1024x683.jpg.

例如,如果您上载了一个维度为620px (宽度)&次;430px (高度),则WordPress只会创建两个调整大小的图像,一个用于缩略图大小,另一个用于中等大小。WordPress不会创建“大”图像,因为original image 小于“大”尺寸。

如果你把[gallery ids="1,2,3" size="large" /] 在您的帖子内容中,其中一幅图像是上面的示例图像(620px x 430px), WordPress会尝试查找每个画廊图像的“大”图像URL,如果找不到,则查找原始图像URL(例如。my-image.jpg) 将使用。

在问题中,您问:

据我所知,要获取ID,需要一个如下URL:http://myasite.com/wp-content/uploads/2020/03/my-image.jpg. 有解决方案吗?

是的,您需要原始图像URL或相对于uploads 文件夹这是因为WordPress将路径保存在名为_wp_attached_file, 和attachment_url_to_postid() 将运行如下SQL命令:

SELECT post_id FROM wp_postmeta
WHERE meta_key = \'_wp_attached_file\'
AND meta_value = \'2020/03/my-image.jpg\'
但是关于“有修复方法吗?”,没有,这里没有什么可修复的。但是,如果您想创建自己的函数,从调整大小的图像URL获取附件ID,那么这取决于您自己。

但是,如果您只想检索post gallery中图像的ID(短代码),那么正如我前面提到的,使用get_post_gallery(). 这很简单。:)

相关推荐