最近有个朋友问了一个这样的问题,他需要实现的效果是在wordpress模板中调用某个分类目录下面的标签列表。对于这样的定制化功能实现起来并不是很困难,只要你善用百度或各种搜索引擎,即使不了解php语言也是完全可以实现的,以下就是我总结的实现此功能的方法,在此记录,随取随用。
交代实现原理:
我们在编辑文章的时候会插入文章标签,而文章页需要隶属一个分类目录,这样因为文章的关系,我们就把分两类目录和标签建立起了联系。所以我们就可以利用这种联系单独调用某个分类目录里面的标签了的。
wordpress调用某个分类内的标签实现方法:
1、在模板函数文件functions.php中添加以下代码:
- function ludou_get_category_tags($args) {
- global $wpdb;
- $tags = $wpdb->get_results
- (”
- SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name
- FROM
- $wpdb->posts as p1
- LEFT JOIN $wpdb->term_relationships as r1 ON p1.ID = r1.object_ID
- LEFT JOIN $wpdb->term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
- LEFT JOIN $wpdb->terms as terms1 ON t1.term_id = terms1.term_id,
- $wpdb->posts as p2
- LEFT JOIN $wpdb->term_relationships as r2 ON p2.ID = r2.object_ID
- LEFT JOIN $wpdb->term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
- LEFT JOIN $wpdb->terms as terms2 ON t2.term_id = terms2.term_id
- WHERE
- t1.taxonomy = ‘category’ AND p1.post_status = ‘publish’ AND terms1.term_id IN (“.$args[‘categories’].“) AND
- t2.taxonomy = ‘post_tag’ AND p2.post_status = ‘publish’
- AND p1.ID = p2.ID
- ORDER by tag_name
- “);
- $count = 0;
- if($tags) {
- foreach ($tags as $tag) {
- $mytag[$count] = get_term_by(‘id’, $tag->tag_id, ‘post_tag’);
- $count++;
- }
- }
- else {
- $mytag = NULL;
- }
- return $mytag;
- }
2、在其他模板文件中如首页,找到index.php文件,添加以下代码进行调用:
- <?php $args = array( ‘categories’ => ‘12,13’);
- $tags = ludou_get_category_tags($args);
- $content .= “<ul>”;
- if(!emptyempty($tags)) {
- foreach ($tags as $tag) {
- $content .= “<li><a href=\””.get_tag_link($tag->term_id).“\”>”.$tag->name.“</a></li>”;
- }
- }
- ?>
- $content .= “</ul>”;
- echo $content;
注意:其中的12,13是你需要调用的某个分类目录的ID,修改即可。
声明:本站分享的WordPress主题/插件均遵循 GPLv2 许可协议(免费开源),相关介绍资料仅供学习参考,实际版本可能会因版本迭代或开发者调整而产生变化,如程序中涉及有第三方原创图像、设计模板、远程服务等内容,应获得作者授权后方可使用。本站不提供该程序/软件的产品授权与技术服务,亦不收取相关费用。
评论(0)