ACF单条关联链接显示为数组?求解决方案
ACF灵活内容关联字段单链接获取问题解决
问题场景
使用ACF灵活内容时,通过关联字段为logo设置单条链接(已将关联字段最大选择数设为1),尝试直接将关联字段值$clnk放入href属性中,结果链接显示为/Array。
错误示例代码:
<a href="' . $clnk . '"><img class="client_logos" src="' . $cl . '" alt="" /></a>
原代码
<h2>Our clients</h2> <div class="services_container" style="display: block;"> <?php // 检查灵活内容字段是否有数据行 if (have_rows('clients')): // 遍历数据行 while (have_rows('clients')) : the_row(); if (get_row_layout() == 'clients'): $tl = get_sub_field('client_group_name'); echo '<h2>' . $tl . '</h2>'; endif; // 检查重复器行 echo '<div class="clients_container">'; if( have_rows('client_details') ): // 遍历重复器行 while( have_rows('client_details') ) : the_row(); // 加载子字段值 $cl = get_sub_field('client_logo'); $cn = get_sub_field('client_name'); $clnk = get_sub_field('client_link'); echo '<a href="' . $clnk . '"><img class="client_logos" src="' . $cl . '" alt="" /></a>'; // 结束重复器循环 endwhile; endif; echo '</div>'; endwhile; endif; ?> </div><!--clients container--> </div>
问题原因
ACF的关联字段即使设置了最大选择数为1,返回的依然是数组类型,直接输出数组会被解析为字符串Array,导致链接异常。
解决方法
需要从关联字段返回的数组中取出单个条目,再通过get_permalink()获取该条目的URL,同时判断是否存在链接,决定是否包裹<a>标签。
最终解决代码
// 检查重复器行 if( have_rows('client_details') ): // 遍历重复器行 while( have_rows('client_details') ) : the_row(); // 加载子字段值 $cl = get_sub_field('client_logo'); $cn = get_sub_field('client_name'); // 将关联字段值转为数组,取出唯一条目 $clnks = ( array ) get_sub_field( 'client_link' ); $clnk = array_pop( $clnks ); // 存在链接时,用a标签包裹logo if( have_rows('client_link') ): echo '<a href="' . get_permalink( $clnk ) . '"><img class="client_logos" src="' . $cl . '" alt="" /></a>'; endif; // 无链接时,仅输出logo图片 if( !have_rows('client_link') ): echo '<img class="client_logos" src="' . $cl . '" alt="" />'; endif; // 结束重复器循环 endwhile; endif;
关键说明
$clnks = ( array ) get_sub_field( 'client_link' );:确保关联字段值转为数组类型,避免非数组情况报错$clnk = array_pop( $clnks );:取出数组中唯一的条目(因最大选择数为1)get_permalink( $clnk ):获取该条目的完整URL- 通过
have_rows('client_link')判断是否存在链接,实现条件渲染
内容的提问来源于stack exchange,提问作者alib0ng0
相关产品推荐
相关产品推荐

