PHP中get_field()的If-Else逻辑失效,ACF特色字段不生效
问题解决思路
1. 修复IF分支不执行的问题
你的IF分支不执行,核心是get_field('featured')返回值与'yes'的匹配逻辑出了问题,常见原因及修复方案:
- 去除前后空格:输入字段时可能误加空格,导致返回值为
' yes'或'yes ',和'yes'严格相等不成立,修改代码:$featured = trim(get_field('featured')); // 清除返回值前后空格 if ($featured == 'yes'): - 统一大小写:若输入的是
'Yes'或'YES',小写'yes'的比较会失败,改成不区分大小写的判断:$featured = strtolower(trim(get_field('featured'))); if ($featured == 'yes'): - 验证返回值:临时添加代码查看实际返回内容,快速定位问题:
$featured = get_field('featured'); var_dump($featured); // 查看具体返回值,测试完成后删除
2. 实现特色资源优先显示
当前代码仅区分样式,未改变资源的显示顺序。要让特色资源排在最前面,需修改WordPress查询逻辑:
方法1:直接修改自定义查询参数
如果是自定义循环,在WP_Query中添加排序规则:
$args = array( 'post_type' => '你的资源文章类型', // 替换为实际的资源类型 'meta_key' => 'featured', 'orderby' => 'meta_value', 'order' => 'DESC', // 让'yes'排在非特色资源前 // 其他查询参数... ); $query = new WP_Query($args); while ($query->have_posts()) : $query->the_post(); // 你的循环代码 wp_reset_postdata();
方法2:用钩子全局修改查询
在主题functions.php中添加钩子,针对目标页面调整查询:
add_action('pre_get_posts', 'prioritize_featured_resources'); function prioritize_featured_resources($query) { if (is_front_page() && $query->is_main_query()) { // 替换为你的目标页面条件 $query->set('meta_key', 'featured'); $query->set('orderby', 'meta_value'); $query->set('order', 'DESC'); } }
3. 额外优化:修复分类输出逻辑
你代码中$terms = the_terms(...)的写法错误,the_terms()是直接输出内容的函数,不会返回值给变量,正确写法是用get_the_terms()获取后循环输出:
$taxonomies = array('building_type', 'lease_phase', 'topic', 'building_stakeholder'); $terms = get_the_terms(get_the_ID(), $taxonomies); if ($terms && !is_wp_error($terms)) { $term_links = array(); foreach ($terms as $term) { $term_links[] = '<a href="' . get_term_link($term) . '">' . $term->name . '</a>'; } echo implode(', ', $term_links); }
内容的提问来源于stack exchange,提问作者jinha
相关产品推荐
相关产品推荐

