使用get_term_by在WordPress中通过ID、slug或名称检索术语
WordPress get_term_by
函数用于根据给定的字段和值从特定分类法中检索单个术语。此功能可用于根据自定义条件获取特定术语,例如按名称获取类别或按 slug 获取标签。
通过使用该get_term_by
功能,开发人员可以轻松检索所需的术语,而无需手动查询数据库或循环遍历分类法中的所有术语来找到所需的术语。
推荐:[最新版]WordPress SEO插件Rank Math Pro
get_term_by()基本语法
描述
WordPress PHP get_term_by()函数根据术语字段和数据从数据库中获取所有术语数据
用法
get_term_by($field,$value,$taxonomy,$output,$filter);
- $field (string):必需。可以是“slug”、“name”、“term_id”(或“id”、“ID”)或“term_taxonomy_id”。
- $value (string|int):必需。搜索此术语值。
- $taxonomy (string):可选。分类法名称。如果 $field 为“term_taxonomy_id”,则为可选。默认值:“”。
- $output (string):可选。必需的返回类型。OBJECT、ARRAY_A 或 ARRAY_N 之一,分别对应 WP_Term 对象、关联数组或数值数组。默认值:OBJECT。
- $filter (string):可选。如何过滤术语字段。默认为 ‘raw’。默认值:’raw’。
get_term_by 函数成功时会返回一个 WP_Term 实例或数组,具体取决于 $output 的值。如果指定的 $taxonomy 不存在或未找到 $term,则返回 false。
get_term_by()函数
get_term_by()
是 WordPress 中用于通过指定字段获取分类项(term)的核心函数,(源文件可参考这里)
function get_term_by( $field, $value, $taxonomy = '', $output = OBJECT, $filter = 'raw' ) {
// 'term_taxonomy_id' lookups don't require taxonomy checks.
if ( 'term_taxonomy_id' !== $field && ! taxonomy_exists( $taxonomy ) ) {
return false;
}
// No need to perform a query for empty 'slug' or 'name'.
if ( 'slug' === $field || 'name' === $field ) {
$value = (string) $value;
if ( 0 === strlen( $value ) ) {
return false;
}
}
if ( 'id' === $field || 'ID' === $field || 'term_id' === $field ) {
$term = get_term( (int) $value, $taxonomy, $output, $filter );
if ( is_wp_error( $term ) || null === $term ) {
$term = false;
}
return $term;
}
$args = array(
'get' => 'all',
'number' => 1,
'taxonomy' => $taxonomy,
'update_term_meta_cache' => false,
'orderby' => 'none',
'suppress_filter' => true,
);
switch ( $field ) {
case 'slug':
$args['slug'] = $value;
break;
case 'name':
$args['name'] = $value;
break;
case 'term_taxonomy_id':
$args['term_taxonomy_id'] = $value;
unset( $args['taxonomy'] );
break;
default:
return false;
}
$terms = get_terms( $args );
if ( is_wp_error( $terms ) || empty( $terms ) ) {
return false;
}
$term = array_shift( $terms );
// In the case of 'term_taxonomy_id', override the provided `$taxonomy` with whatever we find in the DB.
if ( 'term_taxonomy_id' === $field ) {
$taxonomy = $term->taxonomy;
}
return get_term( $term, $taxonomy, $output, $filter );
}
推荐:使用wp_set_post_tags()为WordPress帖子设置标签
如何使用get_term_by
如何通过 ID 获取术语,该代码片段使用函数根据 ID 从特定分类法中检索术语get_term_by
。它将术语分配给变量$term
。
<?php
$term_id = 5;
$taxonomy = 'category';
$term = get_term_by('id', $term_id, $taxonomy);
?>
如何通过 slug 获取术语,此代码片段使用 函数根据 slug 从特定分类法中获取术语get_term_by
。它将检索到的术语存储在变量 中$term
。
<?php
$term_slug = 'news';
$taxonomy = 'category';
$term = get_term_by('slug', $term_slug, $taxonomy);
?>
如何在检索之前检查术语是否存在,此代码片段首先使用 函数检查指定分类法中是否存在名为“Technology”的术语term_exists
。如果存在,则使用get_term_by
函数检索该术语并将其赋值给变量$term
。
<?php
$term_name = 'Technology';
$taxonomy = 'category';
if (term_exists($term_name, $taxonomy)) {
$term = get_term_by('name', $term_name, $taxonomy);
}
按类别分类法中的名称获取术语
$category = get_term_by('name', 'news', 'category');
在标签分类法中按名称获取术语
$tag = get_term_by('name', 'news', 'post_tag');
在自定义分类法中按名称获取术语
$term = get_term_by('name', 'news', 'my_custom_taxonomy');
从主题的导航菜单中按名称获取术语
$menu = get_term_by('name', 'Default Menu', 'nav_menu');
根据类别分类法中的ID获取术语
get_term_by('id', 12, 'category');
结论
get_term_by
函数是一个实用的组件,用于从 WordPress 数据库中检索术语数据。它允许开发人员根据各种参数(例如术语的名称、slug 或 ID)轻松访问特定的术语信息。通过了解此函数可用的不同参数和选项,开发人员可以高效地检索项目所需的精确术语数据。
使用该get_term_by
函数时,务必考虑潜在的返回值并在代码中对其进行相应的处理。此外,开发人员在使用此函数时应注意潜在的性能影响,尤其是在处理大型数据集或频繁查询时。get_term_by
功能提供了一种与 WordPress 中的术语数据交互的宝贵方法,并且通过正确的使用和理解,它可以极大地增强 WordPress 项目的开发过程。
推荐:[最新版]WP Speed of Light Pro插件WordPress速度优化插件