PHP/WordPress新手:转主题遇数组偏移访问布尔值警告如何解决?
警告含义与修复方案
警告含义
Warning: Trying to access array offset on value of type bool 这个提示的核心问题是:你在第13行尝试读取$gallery['ids'],但此时$gallery的值是布尔值false,而非预期的数组。
出现这个情况的原因是:get_post_gallery()函数仅能识别文章内容中用WordPress原生[gallery]短代码插入的画廊。即便你把文章格式设为gallery,只要文章里没有嵌入这个短代码,该函数就会返回false,后续访问它的数组下标自然会触发警告。
修复步骤
1. 增加有效性判断
在使用$gallery变量之前,先判断它是否为有效数组,避免直接访问布尔值的下标。同时,用get_the_ID()替代$post变量,避免全局变量未正确初始化的问题。
2. 处理无画廊的情况
当未找到画廊时,可以输出替代内容(比如默认图、提示文字),或者直接跳过当前画廊模块的输出。
修改后的完整代码片段
<?php /** * -- Gallery Post Format */ if ( has_post_format( 'gallery' ) ) { ?> <div id="post-<?php the_ID(); ?>" <?php post_class('gallery'); ?>> <?php $gallery = get_post_gallery( get_the_ID(), false ); // 新增:判断gallery是否有效 if ( !$gallery ) { echo '<div class="inner-box"><p>暂无画廊内容</p></div>'; echo '</div>'; // 闭合外层div return; } $att_ids = wp_parse_id_list( $gallery['ids'] ); //***This is line 13*** ?> <div class="inner-box"> <div id="post-gallery-<?php the_ID(); ?>" <?php post_class('news-carousel owl-carousel owl-theme owl-dots-none'); ?>> <?php for ( $i = 0; $i < count( $gallery['src'] ); $i++ ) { ?> <figure class="image-box"> <img class="" src="<?php echo esc_url( $gallery['src'][ $i ] ); ?>" /> <span class="category"><?php the_category( ', ' ); ?></span> </figure> <?php } ?> </div><!-- /.news-carousel owl-carousel owl-theme owl-dots-none --> <div class="lower-content"> <ul class="post-info clearfix"> <li> <i class="far fa-user"></i><a href="<?php echo get_author_posts_url(get_the_author_meta('ID')); ?>"><?php the_author(); ?></a> </li> <li><i class="far fa-calendar-alt"></i><?php the_time('F jS, Y') ?></li> <li><i class="far fa-comment-alt"></i> <?php //comments_popup_link(); comments_popup_link( 'No Comment', '1 Comment', '% Comments', '', 'Comments Off' ); ?> </li> <li> <i class="far fa-folder"></i> <?php $categories = get_the_category(); $separator = ', '; $output = ''; if ( $categories ) { foreach ( $categories as $category) { $output .= '<a href="' . get_category_link( $category->term_id ) . '">' . $category->cat_name . '</a>' . $separator; } echo trim($output, $separator); } ?> </li> </ul> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <p> <?php the_excerpt(); ?> </p> <div class="read-more-link"> <a href="<?php the_permalink(); ?>"> <i class="fas fa-arrow-right"></i> <span><?php _e('Read More'); ?></span> </a> </div> </div><!-- /.lower-content --> </div><!-- /.inner-box --> </div> <?php } ?>
额外提示
- WordPress的gallery文章格式只是一个内容类型标记,和文章内是否存在画廊没有强制关联,必须手动在文章中插入
[gallery]短代码才能被get_post_gallery()识别。 - 如果需要更灵活的画廊管理,可以考虑使用自定义字段上传图片集,或者使用专门的画廊插件。
内容的提问来源于stack exchange,提问作者Hatem Frere
相关产品推荐
相关产品推荐

