WordPress如何判断文章自定义复选框勾选状态并按条件显示预设标记
WordPress 判断自定义复选框勾选状态显示视频标记的实现
原代码无法运行的核心问题
- 查询初始化缺失:仅定义了查询参数数组,没有用
new WP_Query()实例化查询对象,后续循环方法根本无法调用 - 排序参数非法:
'orderby' => 'publish_date'不是WP_Query支持的合法排序字段,正确对应发布时间排序的参数值是date - 字段判断逻辑完全错位:
- ACF复选框字段默认返回数组类型,你的代码先将数组用
implode()转成逗号拼接字符串,再传入in_array()做匹配,函数入参类型不匹配 in_array()函数参数顺序写反:正确语法为in_array(要查找的目标值, 被检索的数组),你的代码把拼接后的字符串作为查找目标,把单个字符串'video'作为被检索的数组,逻辑完全颠倒
- ACF复选框字段默认返回数组类型,你的代码先将数组用
- 输出语法错误:
echo {'style="display:block"'}是不符合PHP语法规则的写法,会触发解析报错 - 模板混写边界错误:开启循环后没有正确闭合PHP标签就直接写HTML结构,会导致PHP解析器把HTML代码当成PHP语法处理,触发全页报错
- 缺失循环重置逻辑:自定义循环结束后没有调用
wp_reset_postdata()重置全局文章数据,容易导致页面后续的文章内容查询出现串扰
修正后的可直接运行代码
适配场景:使用ACF插件创建名为
additional_category的复选框字段,其中值为video的选项对应“文章包含视频”的勾选状态,匹配成功时让默认隐藏的#media1元素显示Video标记
<?php // 正确初始化自定义查询 $new_query = new WP_Query( array( 'posts_per_page' => 100, 'orderby' => 'date', 'order' => 'DESC', ) ); if ( $new_query->have_posts() ) { while ( $new_query->have_posts() ) { $new_query->the_post(); // 获取复选框字段值,增加类型判断避免未勾选时的PHP报错 $adcat = get_field('additional_category'); ?> <div id="news"> <a id="s1ustlink" href="<?php the_permalink();?>" target="_blank"> <div id="up"> <div id="left"> <img src="<?php the_field('image'); ?>"/> </div> <div id="right"> <p id="article"><?php the_title();?></p> <!-- 匹配复选框值命中时,输出行内样式覆盖默认的display:none --> <p id="media1" <?php if ( is_array($adcat) && in_array('video', $adcat) ) { echo 'style="display:block;"'; } ?> >Video</p> <p id="media2">Photo</p> <p id="media3">Updated</p> </div> </div> </a> <div id="down"> <div id="time"> <i class='fa fa-clock-o' style='font-size:90%'></i> <p><?php the_time();?> | <?php echo get_the_date('d.m.Y', get_the_ID()) ?></p> </div> <div id="post-view"><?php pvc_post_views(); ?></div> </div> </div> <?php } // 循环结束后重置全局文章数据 wp_reset_postdata(); } ?>
上线前检查要点
- 核对ACF复选框的选项存储值是否和判断条件一致:很多人配置时只设置了显示标签(比如“视频内容”),但存储值留空或写成了其他字符串,会导致匹配失败
- 如果使用的是WordPress原生自定义字段(非ACF),需要用
get_post_meta(get_the_ID(), '你的复选框字段标识', true)获取字段值,只要判断返回值等于预设的video标记,就可以同样输出显示样式 - 保持CSS中
#media1的默认display: none规则不变,命中时通过行内样式覆盖默认值即可实现显示效果
内容的提问来源于stack exchange,提问作者Bəxtiyar Əli Ağayar
相关产品推荐
相关产品推荐

