在PHP echo的HTML代码中添加ACF字段判断报错,求助
问题分析与修正方案
你的代码问题
- 语法错误:你在
echo输出的字符串中直接插入了if( get_field('delivery_date') ):和endif;这类PHP控制语句。PHP会把这些内容当成普通字符串处理,再加上引号拼接混乱,直接导致语法报错。 - 逻辑嵌入错误:PHP的控制语句(如
if)不能直接嵌套在字符串里,必须跳出当前的echo上下文,单独执行逻辑后再继续输出HTML。
修正方案1:拆分echo与PHP逻辑(推荐)
这种写法把HTML输出和PHP判断分开,结构更清晰,便于维护,同时加入WordPress安全转义的最佳实践:
<?php $link = get_permalink(); $availability = get_field('availability'); $delivery_date = get_field('delivery_date'); $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID) ); if ( has_post_thumbnail() ) { // 输出开头的HTML结构 echo '<a href="' . esc_url($link) . '"> <div class="thumbnail" style="background: url(' . esc_url($url) . ')"> <div class="tags one"> <span class="availability">' . esc_html($availability) . '</span>'; // 单独判断delivery_date字段,不为空才输出对应内容 if ( !empty($delivery_date) ) { echo '<span class="delivery-date">' . esc_html($delivery_date) . '</span>'; } // 输出剩余的HTML结构 echo ' </div> </div> </a>'; } ?>
补充说明:
esc_url()和esc_html()用于转义输出内容,避免XSS安全问题,是WordPress开发的标准做法。!empty($delivery_date)能覆盖字段为空、false、null等多种空值场景,比直接调用get_field()判断更可靠。
修正方案2:使用三元运算符拼接字符串
如果想保持echo的连贯性,可以提前用三元运算符处理好要输出的内容:
<?php $link = get_permalink(); $availability = get_field('availability'); $delivery_date = get_field('delivery_date'); $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID) ); if ( has_post_thumbnail() ) { // 用三元运算符生成delivery_date的HTML内容,为空则输出空字符串 $delivery_html = !empty($delivery_date) ? '<span class="delivery-date">' . esc_html($delivery_date) . '</span>' : ''; echo '<a href="' . esc_url($link) . '"> <div class="thumbnail" style="background: url(' . esc_url($url) . ')"> <div class="tags one"> <span class="availability">' . esc_html($availability) . '</span> ' . $delivery_html . ' </div> </div> </a>'; } ?>
内容的提问来源于stack exchange,提问作者Jordan Kellet
相关产品推荐
相关产品推荐

