2021-09-05 07:30:49
在 WP_Query 中动态设置分类名称需直接引用 ACF 字段变量,避免 PHP 标签嵌套错误,并通过存在性检查确保数据有效性。
一、核心问题:PHP 标签嵌套的误区获取 ACF 字段值根据字段类型选择对应方法:
直接字段:使用 get_field('field_name')。$category_slug_from_acf = get_field('reviews_cat');
组字段子字段:先获取组,再提取子字段。$section_reviews = get_field('section_reviews');$category_slug_from_acf = isset($section_reviews['reviews_cat']) ? $section_reviews['reviews_cat'] : '';
选项页面字段:指定第二个参数为 'option'。$category_slug_from_acf = get_field('reviews_cat', 'option');
动态设置 WP_Query 参数将变量直接赋值给 category_name,确保其值为分类别名(slug)。
$args = array( 'post_type' => 'cpt-a', 'category_name' => $category_slug_from_acf, // 直接引用变量 'posts_per_page' => 99);$loop = new WP_Query($args);变量存在性检查使用 isset() 或 !empty() 避免空值导致查询异常。
if (!empty($category_slug_from_acf)) { $args['category_name'] = $category_slug_from_acf;} else { // 设置默认分类或移除参数 $args['category_name'] = 'default-category';}数据类型验证
确保 ACF 字段返回值为字符串类型(分类别名)。
若字段存储分类 ID,需改用 cat 参数:$args = array('cat' => intval($category_id_from_acf));
多分类筛选如需查询多个分类,改用 category__in 或 category__and 参数:
$category_slugs = ['cat1', 'cat2']; // 从 ACF 获取的数组$args = array( 'category__in' => array_map('sanitize_title', $category_slugs));通过规范变量引用和参数验证,可显著提升 WordPress 内容的动态管理能力。