You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP从WordPress缩略图获取原图URL并动态同步文章图片

解决WordPress动态获取文章内全尺寸图片的方案

要解决你遇到的两个问题,核心思路是从文章内容里提取真实的附件ID,再通过ID获取全尺寸原图,同时验证图片是否仍存在于文章中,具体实现如下:

核心实现代码

function get_post_full_size_images($post_id = null) {
    // 默认取当前文章ID
    if (!$post_id) {
        $post_id = get_the_ID();
    }
    // 获取文章内容
    $post_content = get_post_field('post_content', $post_id);
    $full_size_images = [];

    // 提取文章中所有带data-id属性的图片(WordPress插入的图片自带这个属性,关联附件ID)
    preg_match_all('/<img[^>]+data-id="(\d+)"[^>]+>/i', $post_content, $matches);
    if (empty($matches[1])) {
        return $full_size_images;
    }

    // 去重,避免重复处理同一图片ID
    $attachment_ids = array_unique($matches[1]);

    foreach ($attachment_ids as $attach_id) {
        // 验证:附件属于当前文章,且是图片类型
        $attach_post = get_post($attach_id);
        if ($attach_post && $attach_post->post_parent == $post_id && wp_attachment_is_image($attach_id)) {
            // 二次验证:该图片ID确实还在文章内容里(防止用户删除图片但HTML残留的情况)
            if (strpos($post_content, 'data-id="' . $attach_id . '"') !== false) {
                // 获取全尺寸图片URL
                $full_url = wp_get_attachment_image_url($attach_id, 'full');
                if ($full_url) {
                    $full_size_images[] = $full_url;
                }
            }
        }
    }

    return $full_size_images;
}

代码说明

  • 正则提取data-id:WordPress后台插入的图片会自动添加这个属性,直接关联附件的ID,比提取src更可靠
  • 双重验证:先确认附件属于当前文章,再检查文章内容中是否还存在该图片ID,彻底解决“删除图片仍显示”的问题
  • 获取原图:通过wp_get_attachment_image_url指定'full'参数,直接拿到全尺寸图片的URL

使用方法

在你的文章模板(比如single.php)里调用即可:

// 获取当前文章的所有全尺寸图片
$post_images = get_post_full_size_images();

if (!empty($post_images)) {
    echo '<div class="post-full-images">';
    foreach ($post_images as $img_url) {
        echo '<img src="' . esc_url($img_url) . '" alt="文章图片">';
    }
    echo '</div>';
}

内容的提问来源于stack exchange,提问作者ifempty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:14:55