WordPress教程

WordPress调用某个分类关联的标签或者标签关联的分类

阿里云

对于 WordPress 站长有时需要实现这样的功能,特别是使用 WordPress 做二次开发的过程中,需要调用 wordpress 网站某个分类下文章的关联标签,也就是该分类下各文章使用过的标签。例如在添加新文章的时候,分类给该文章选择了分类、添加了标签,那么这个标签就是选择的分类下的文章关联的标签。那什么是某个分类的下属标签呢,我们可以这么理解,如下图:

我在 WordPress 后台某篇文章的编辑页面,给这篇文章选择了分类:WordPress,接着同时选择了标签:php、主题制作,这时分类(WordPress)就与标签(php、主题制作)建立了关联,利用这种关联我们实现很多种需求,最典型的是细化 WordPress 文章分类功能,在子分类无法达到我们的需求时,可以使用标签来细化。我只需要提供 WordPress 分类的 id,就可以得到它关联的标签:php、主题制作。

实现代码:

在当前主题的 functions.php 文件中添加以下函数代码:

也想出现在这里?联系我们
创客主机
  1. function ludou_get_category_tags($args) {
  2. 	global $wpdb;
  3. 	$tags = $wpdb->get_results
  4. 	("
  5. 		SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name
  6. 		FROM
  7. 			$wpdb->posts as p1
  8. 			LEFT JOIN $wpdb->term_relationships as r1 ON p1.ID = r1.object_ID
  9. 			LEFT JOIN $wpdb->term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
  10. 			LEFT JOIN $wpdb->terms as terms1 ON t1.term_id = terms1.term_id,
  11.  
  12. 			$wpdb->posts as p2
  13. 			LEFT JOIN $wpdb->term_relationships as r2 ON p2.ID = r2.object_ID
  14. 			LEFT JOIN $wpdb->term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
  15. 			LEFT JOIN $wpdb->terms as terms2 ON t2.term_id = terms2.term_id
  16. 		WHERE
  17. 			t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms1.term_id IN (".$args['categories'].") AND
  18. 			t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
  19. 			AND p1.ID = p2.ID
  20. 		ORDER by tag_name
  21. 	");
  22. 	$count = 0;
  23.  
  24. 	if($tags) {
  25. 	  foreach ($tags as $tag) {
  26. 	    $mytag[$count] = get_term_by('id', $tag->tag_id, 'post_tag');
  27. 	    $count++;
  28. 	  }
  29. 	}
  30. 	else {
  31. 	  $mytag = NULL;
  32. 	}
  33.  
  34. 	return $mytag;
  35. }

然后在其他主题文件中,我们可以调用某个分类或某几个分类关联的标签:

  1. // 12,13是分类ID,多个用半角逗号隔开
  2. $args = array( 'categories' => '12,13');
  3. // 调用上面定义的函数,来获取ID为12,13的分类的关联标签
  4. $tags = ludou_get_category_tags($args);
  5. // 输出我们获取到的关联标签,以列表形式打印
  6. $content .= "<ul>";
  7. if(!empty($tags)) {
  8.   foreach ($tags as $tag) {
  9.     $content .= "<li><a href="".get_tag_link($tag->term_id)."">".$tag->name."</a></li>";
  10.   }
  11. }
  12. $content .= "</ul>";
  13. echo $content;

好了,基本用法就这些,具体其他用法你可以自由地进行扩展。

获取某个标签关联的分类

反过来,我们可能会有这样的需求,既然可以获取某个分类的关联标签,那我能获取某个标签的关联分类吗?答案是可以的,将上面的代码稍微改一下就可以了,在当前主题的 functions.php 文件中添加以下函数代码:

  1. function ludou_get_tag_categories($args) {
  2.     global $wpdb;
  3.     $categories = $wpdb->get_results
  4.     ("
  5.         SELECT DISTINCT terms1.term_id as cat_id
  6.         FROM
  7.             $wpdb->posts as p1
  8.             LEFT JOIN $wpdb->term_relationships as r1 ON p1.ID = r1.object_ID
  9.             LEFT JOIN $wpdb->term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
  10.             LEFT JOIN $wpdb->terms as terms1 ON t1.term_id = terms1.term_id,
  11.             $wpdb->posts as p2
  12.             LEFT JOIN $wpdb->term_relationships as r2 ON p2.ID = r2.object_ID
  13.             LEFT JOIN $wpdb->term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
  14.             LEFT JOIN $wpdb->terms as terms2 ON t2.term_id = terms2.term_id
  15.         WHERE
  16.             t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms2.term_id IN (".$args['tags'].") AND
  17.             t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
  18.             AND p1.ID = p2.ID
  19.         ORDER by cat_id
  20.     ");
  21.     $count = 0;
  22.  
  23.     if($categories) {
  24.       foreach ($categories as $category) {
  25.         $mycategory[$count] = get_term_by('id', $category->cat_id, 'category');
  26.         $count++;
  27.       }
  28.     }
  29.     else {
  30.       $mycategory = NULL;
  31.     }
  32.  
  33.     return $mycategory;
  34. }

调用范例:添加多个标签 ID 就调用多个标签的关联的分类

  1. // 12,13是标签ID,多个用半角逗号隔开
  2. $args = array( 'tags' => '12,13');
  3.  
  4. // 调用上面定义的函数,来获取ID为12,13的标签的关联分类
  5. $categories = ludou_get_tag_categories($args);
  6.  
  7. // 输出我们获取到的关联分类,以列表形式打印
  8. $content .= "<ul>";
  9. if(!empty($categories)) {
  10.   foreach ($categories as $category) {
  11.     $content .= "<li><a href="".get_category_link( $category->term_id )."">".$category->name."</a></li>";
  12.   }
  13. }
  14. $content .= "</ul>";
  15. echo $content;

WordPress 调用某个分类关联的标签或者标签关联的分类

已有 310 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!