WordPress PHP代码异常:链接文本应显示Testing 1却输出字母h
问题分析与修复方案
问题根源
你遇到的仅输出字母"h"的问题,核心是错误地将字符串类型的URL字段当作数组来访问。当你用$link_to_blogs['more_blogs_title']时,PHP会把非数字索引强制转换为整数0,最终取到的是URL字符串的第一个字符(比如https://...的首字母"h")。
另外代码还有两处小问题:
<p>标签未正确闭合,写成了<p>而非</p><ul>标签嵌套在循环内部,导致每个链接生成单独的列表,而非统一列表下的多个列表项
修正后的完整代码
<section> <?php if ( have_rows( 'blog_layout' ) ): ?> <?php while ( have_rows( 'blog_layout' ) ) : the_row(); ?> <?php if ( get_row_layout() == 'blog_structure' ) : ?> <?php $hero_image = get_sub_field( 'hero_image' ); ?> <?php if ( $hero_image ) : ?> <img src="<?php echo esc_url( $hero_image['url'] ); ?>" alt="<?php echo esc_attr( $hero_image['alt'] ); ?>" /> <?php endif; ?> <div class="wrapper"> <h1><?php the_sub_field( 'blog_title' ); ?></h1> <?php if ( have_rows( 'blog_body_copy' ) ) : ?> <?php while ( have_rows( 'blog_body_copy' ) ) : the_row(); ?> <p><?php the_sub_field( 'blog_body_copy_area' ); ?></p> <?php endwhile; ?> </div> <?php else : ?> <?php // No rows found ?> <?php endif; ?> <div class="wrapper"> <h2><?php the_sub_field( 'more_blogs_header' ); ?></h2> <?php if ( have_rows( 'more_blogs_links' ) ) : ?> <ul> <?php while ( have_rows( 'more_blogs_links' ) ) : the_row(); ?> <?php $blog_url = get_sub_field( 'link_to_blogs' ); $blog_title = get_sub_field( 'more_blogs_title' ); ?> <?php if ( $blog_url && $blog_title ) : ?> <li><a href="<?php echo esc_url( $blog_url); ?>"><?php echo esc_html( $blog_title ); ?></a></li> <?php endif; ?> <?php endwhile; ?> </ul> <?php else : ?> <?php // No rows found ?> <?php endif; ?> <?php endif; ?> <?php endwhile; ?> <?php else: ?> <?php // No layouts found ?> <?php endif; ?> </div> </section>
关键修正点说明
- 拆分字段获取:分别获取
link_to_blogs(URL字段)和more_blogs_title(标题字段)两个独立子字段,避免字符串转数组的错误访问逻辑 - 修复标签闭合:修正
<p>标签的闭合错误,避免HTML结构混乱 - 调整列表结构:将
<ul>标签移到more_blogs_links循环外部,确保所有链接都在同一个列表容器下
内容的提问来源于stack exchange,提问作者Rebecca Westcott
相关产品推荐
相关产品推荐

