【教程】wordpress判断某文章的分类和父级分类的ID是否等于某个值

WP资源海 WordPress评论6字数 2807阅读9分21秒阅读模式
【教程】wordpress判断某文章的分类和父级分类的ID是否等于某个值

WordPress 有一个自带函数 in_category() ,但是这个函数有两个非常显著的缺点↓↓↓

  1. 仅支持单一分类: in_category() 函数一次只能检查文章是否属于一个分类,不能同时检查多个分类。
  2. 不支持子分类: 默认情况下,in_category() 函数不会检查文章是否属于子分类。如果需要检查子分类,需要使用额外的参数。

所以 in_category() 只能用于检查文章是否直接属于某个分类,当一个文章包含于一个多级嵌套的分类中而又只勾选了一个子分类时,则无法用该函数检测某文章是否属于上级分类或主分类。所以就有了此篇可以递归判断文章多层嵌套分类归属函数的教程。文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

示例函数

要在 WordPress 中判断一篇文章的分类及其所有父级分类的 ID 是否等于某个值(比如1314),您可以使用以下代码示例:文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

function is_article_in_category_hierarchy($post_id, $category_id) {
// 获取文章的所有分类
$categories = get_the_category($post_id);

// 循环检查每个分类以及其父级分类
foreach ($categories as $category) {
    // 获取当前分类及其所有父级分类的 ID
    $category_ids = get_ancestors($category->term_id, 'category');
    $category_ids[] = $category->term_id;

    // 检查是否包含目标分类的 ID(1314)
    if (in_array($category_id, $category_ids)) {
        return true;
    }
}

// 如果没有匹配的分类,返回 false
return false;

}

// 使用示例:
$post_id = get_the_ID(); // 获取当前文章的 ID
$category_id_to_check = 1314; // 要检查的分类 ID

if (is_article_in_category_hierarchy($post_id, $category_id_to_check)) {
// 文章属于指定分类及其父级分类
echo "文章属于分类 1314 。";
} else {
// 文章不属于指定分类及其父级分类
echo "文章不属于分类 1314 。";
}

代码解释

get_ancestors()

get_ancestors() 是 WordPress 中的一个函数,用于获取指定分类或页面的所有父级分类或页面的 ID 列表。该函数可以用于检查给定分类或页面的层次结构,查找其父级元素。文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

函数签名如下:文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

get_ancestors( $object_id, $object_type, $resource_type )
  • $object_id:表示要获取祖先的分类或页面的 ID。
  • $object_type:表示 $object_id 是分类还是页面。通常是 'category'(分类)或 'page'(页面)。
  • $resource_type:可选参数,表示要获取的祖先的资源类型。通常可以不指定,使用默认值即可。

该函数返回一个包含祖先 ID 的数组,从最近的祖先到最远的祖先。如果没有找到祖先,返回一个空数组。文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

例如,如果您有一个分类 "子分类",它属于 "父分类",而 "父分类" 又属于 "顶级分类",您可以使用 get_ancestors 来获取这些分类的 ID:文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

$child_category_id = get_term_by('name', '子分类', 'category')->term_id;
$ancestors = get_ancestors($child_category_id, 'category');

在这个示例中,$ancestors 变量将包含一个数组,其中的元素顺序是 "子分类"、"父分类" 和 "顶级分类" 的 ID。文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

get_ancestors() 对于构建动态的导航或确定分类或页面在层次结构中的位置非常有用。文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

$category_ids[] = $category->term_id;

代码片段 $category_ids[] = $category->term_id; 的作用是将 $category 变量中的分类 ID(术语 ID)添加到名为 $category_ids 的数组中。让我为您详细解释一下:文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

  • $category:这是一个表示文章分类的对象。通常,它是在 WordPress 主题中使用 get_the_category() 函数获取的。该对象包含有关特定分类的信息,包括其 ID、名称、父级分类等。
  • $category->term_id:这是从 $category 对象中提取的分类 ID。term_id 是分类对象的属性,用于存储分类的唯一标识符。
  • $category_ids[]:这是一个名为 $category_ids 的数组,用于存储文章的所有分类及其父级分类的 ID。[] 表示将新的分类 ID 添加到数组的末尾。这是一种常见的方式,用于在循环中逐个添加元素到数组中。

通过在循环中使用 $category_ids[] = $category->term_id;,您可以逐个获取文章的每个分类及其父级分类的 ID,并将它们添加到 $category_ids 数组中。这使您能够以后在代码中使用这些 ID,例如用于判断文章是否属于特定分类层次结构中的任何分类。文章源自 吾爱分享 吾爱分享网-https://www.wuaishare.cn/2930.html

实际使用场景

is_article_in_category_hierarchy() 这个函数主要用于 WordPress 中的文章分类管理和显示。以下是一些实际的使用场景:

  1. 定制文章模板: 您可以使用此函数来自定义文章模板,以根据文章的分类及其父级分类的层次结构显示不同的内容或样式。例如,您可以根据文章是否属于某个特定主分类(以及其子分类)来选择显示不同的侧边栏或广告。
  2. 导航菜单高亮: 如果您使用 WordPress 导航菜单来显示网站的主导航,您可以使用此函数来确定当前文章所属的分类及其父级分类,并在导航菜单中高亮显示相应的分类或子菜单项。
  3. 相关文章显示: 在相关文章功能中,您可以根据当前文章的分类及其父级分类,选择显示与之相关的其他文章。这可以提高用户的导航体验,并帮助用户找到与其兴趣相关的内容。
  4. SEO 优化: 对于 SEO 优化,您可以根据文章的分类及其父级分类来优化页面的元标签(如标题和描述)。这有助于改善网页在搜索引擎中的排名。
  5. 内容过滤/筛选: 您可以使用此函数来过滤/筛选特定分类及其父级分类的文章。例如,您可能希望某些广告或通知仅显示在特定分类或其子分类的文章中。
  6. 分类公告或提示:您可以使用此函数来找到某个主分类下的所有文章,然后你可以在这些文章页面中的任意位置显示一段该分类文章特有的提示或公告或其他自定义内容。

总之,is_article_in_category_hierarchy() 函数允许您根据文章的分类及其父级分类在不同的情境下自定义和管理内容显示。这对于提供更好的用户体验、增加网站交互性和定制化内容非常有用。

WP资源海

发表评论