PHP检查WordPress的WP_Term对象数组中是否存在指定值
检查WordPress WP_Term数组中是否存在指定值
没问题,我来帮你搞定这个需求!你的$terms变量是包含WP_Term对象的数组,不能直接用普通的in_array()检查,因为每个元素是对象而非简单值。下面给你几种实用的实现方式:
1. 快速检查单一字段值(推荐)
如果只是要验证某个字段(比如name、term_id、slug)是否存在,可以用array_column()提取对应字段的所有值,再结合in_array()判断:
示例:检查是否存在名称为"Tshirts"的术语
// 从WP_Term对象数组中提取所有name字段值 $all_term_names = array_column($terms, 'name'); // 检查指定值是否存在 if (in_array('Tshirts', $all_term_names)) { echo "存在名称为Tshirts的术语!"; } else { echo "未找到该术语"; }
示例:检查是否存在term_id为30的术语
$all_term_ids = array_column($terms, 'term_id'); if (in_array(30, $all_term_ids)) { // 存在时的业务逻辑 echo "找到term_id为30的术语"; }
2. 灵活匹配复杂条件(如需获取匹配对象)
如果你需要更灵活的判断(比如同时检查分类法和slug),或者要获取匹配的WP_Term对象本身,可以用array_filter():
// 查找slug为"pants"且分类法为"clothes"的术语 $matched_terms = array_filter($terms, function($term) { // 这里可以自定义匹配条件 return $term->slug === 'pants' && $term->taxonomy === 'clothes'; }); // 判断是否存在匹配结果 if (!empty($matched_terms)) { echo "找到匹配的术语!"; // 获取第一个匹配的对象(如果有多个) $first_matched_term = reset($matched_terms); echo "匹配术语的ID:" . $first_matched_term->term_id; } else { echo "未找到符合条件的术语"; }
补充说明
array_column()可以直接从对象数组中提取属性值,是PHP 5.5+支持的函数,WordPress环境一般都满足要求。- 如果你的PHP版本较低,也可以用
array_map()替代array_column():$all_term_names = array_map(function($term) { return $term->name; }, $terms);
内容的提问来源于stack exchange,提问作者user13286
相关产品推荐
相关产品推荐

