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

WordPress自定义主题中get_post_galleries_images返回空数组问题求助

解决get_post_galleries_images返回空数组的问题

这个坑我之前踩过!get_post_galleries_images()这个函数有个很容易忽略的限制——它只识别文章内容里的传统[gallery]短代码,如果你的文章是用Gutenberg块编辑器添加的图库(也就是现在WordPress默认的图库块),它根本读不到这些图片,所以才会返回空数组,哪怕文章里明明有5张图。

下面给你两种针对性的解决方案,还有兼容新旧图库的通用写法:

1. 针对Gutenberg块编辑器的图库获取

块编辑器的图库是用JSON格式的块结构存在文章内容里的,我们可以用parse_blocks()函数解析出这些块,再提取图片:

<?php
$post = get_page_by_title('aaa', OBJECT, 'post');
if ($post) {
    $gallery_images = array();
    // 解析文章中的所有块
    $blocks = parse_blocks($post->post_content);
    
    foreach ($blocks as $block) {
        // 定位到核心图库块
        if ($block['blockName'] === 'core/gallery') {
            // 遍历图库中的所有图片ID
            foreach ($block['attrs']['ids'] as $image_id) {
                // 获取指定尺寸的图片URL,这里用'full'可以换成'thumbnail'等自定义尺寸
                $image_url = wp_get_attachment_image_url($image_id, 'full');
                if ($image_url) {
                    $gallery_images[] = $image_url;
                }
            }
        }
    }

    echo '<ul>';
    if (empty($gallery_images)) {
        echo "Empty gallery $post->ID";
    } else {
        foreach ($gallery_images as $image_url) {
            // 用esc_url确保URL安全
            echo '<li><img src="' . esc_url($image_url) . '"></li>';
        }
    }
    echo '</ul>';
}
?>

2. 兼容短代码和块编辑器的通用方法

如果你的网站同时存在旧的短代码图库和新的块图库,可以把两种获取方式结合起来,确保所有图片都能被抓取到:

<?php
$post = get_page_by_title('aaa', OBJECT, 'post');
if ($post) {
    $gallery_images = array();
    
    // 先尝试获取传统短代码图库的图片
    $shortcode_galleries = get_post_galleries_images($post->ID);
    if (!empty($shortcode_galleries)) {
        foreach ($shortcode_galleries as $gallery) {
            $gallery_images = array_merge($gallery_images, $gallery);
        }
    }
    
    // 再获取块编辑器中的图库图片
    $blocks = parse_blocks($post->post_content);
    foreach ($blocks as $block) {
        if ($block['blockName'] === 'core/gallery' && isset($block['attrs']['ids'])) {
            foreach ($block['attrs']['ids'] as $image_id) {
                $image_url = wp_get_attachment_image_url($image_id, 'full');
                // 避免重复添加同一张图片
                if ($image_url && !in_array($image_url, $gallery_images)) {
                    $gallery_images[] = $image_url;
                }
            }
        }
    }

    echo '<ul>';
    if (empty($gallery_images)) {
        echo "Empty gallery $post->ID";
    } else {
        foreach ($gallery_images as $image_url) {
            echo '<li><img src="' . esc_url($image_url) . '"></li>';
        }
    }
    echo '</ul>';
}
?>

额外需要排查的点

  • 先确认get_page_by_title('aaa')拿到的是不是你真正想要的文章,有时候标题重复会导致获取到错误的post,可以加一行var_dump($post)来验证post的ID和内容是否正确。
  • 如果你的图库是用第三方插件添加的,那上面两种方法都不管用,需要去查插件的官方文档,用插件提供的专属函数来获取图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:48:59