详解wordpress通过自定义分类法实现筛选功能

2014-05-20阅读(29614)评论(27)牵着狗狗看MM

W3Cways.com 微信公众号

最近在用wordpress建站。要求对某个分类下的文章再进行筛选,普通的标签功能已经满足不了这个需求。查阅了很多,最终找到用wordpress的自定义分类法来实现对文章的筛选功能。下面详细讲解。
先看图:这个图是我想要实现的功能,即对文章除了分类,标签外,增加一个按颜色来筛选的功能。
wordpress-filter

Step 1:创建一个自定义分类法

在functions.php中添加如下代码:

[js]//自定义分类法
add_action( ‘init’, ‘create_color’ );
function create_color() {
$labels = array(
‘name’ => _x( ‘color’, ‘taxonomy general name’ ),
‘singular_name’ => _x( ‘color’, ‘taxonomy singular name’ ),
‘search_items’ => __( ‘Search color’ ),
‘all_items’ => __( ‘All colors’ ),
‘parent_item’ => __( ‘Parent color’ ),
‘parent_item_colon’ => __( ‘Parent color:’ ),
‘edit_item’ => __( ‘Edit color’ ),
‘update_item’ => __( ‘Update color’ ),
‘add_new_item’ => __( ‘Add New color’ ),
‘new_item_name’ => __( ‘New color Name’ ),
);

register_taxonomy(‘color’,’post’,array(
‘hierarchical’ => false,
‘labels’ => $labels
));
}
[/js]

register_taxonomy这个wordpress函数就是用来创建一个分类法,先解释一下传递给这个函数的参数。

color是这个分类法的内部名(这个可以自己命名)

post告诉wordpress哪个文章类型将使用这个分类法,在这个例子里,我们用的是wordpress默认的post文章类型,你也可以将它替换成page或者你自定义的文章类型,这样就可以将分类法用在一般的文章和页面上。也可以同时运用在多个文章类型上(通过数组)。

array(…)是传递给register_taxonomy的最后一个参数,它告诉wordpress分类法如何运行。具体来解释一下array里面的内容:

hierarchical是一个布尔值,用来确定分类法是否有等级,即是否有子分类。对于颜色(color)分类这个例子而言,我没有设置子分类,所以我设置false

labels是输出这个分类法的一些相关信息(由create_color函数的$labels来定义)。

add_action( ‘init’, ‘create_color’ )是指wordpress初始化时,会调用create_color这个函数。

Step 2:将自定义分类法添加到文章

颜色(color)这个分类法已经创建完成了,现在登陆到wordpress的后台,在文章下(之前用的是post类型,所以默认会在文章下),可以看到一个新的链接color,点击它就可以进入如下图的页面,你可以在此进行新增、编辑、删除color等操作。
wordpress-filter-2
下图是我添加的颜色分类,由于展示的特殊性,名称处我直接用的颜色代码
wordpress-filter-3
发布新文章的时候,在标签的下方,就会出现你自定义的分类目录,如下图
wordpress-filter-4

Step 3:调用方法

不带链接,直接输出自定义分类名称

[php]<?php
//sort是分类法别名
$terms = get_terms("sort");
$count = count($terms);
if ( $count > 0 ){
echo "<ul>";
foreach ( $terms as $term ) {
echo "<li>" . $term->name . "</li>";
}
echo "</ul>";
}
?>
[/php]

带链接和描述的分类法分类列表

[php]<?php
$terms = get_terms("sort");//sort是分类法别名
$count = count($terms);
if ( $count > 0 ){
echo ‘<ul>’;
foreach ( $terms as $term ) {
echo ‘<li>’;
echo ‘<h2><a href="’ . get_term_link( $term ) . ‘" >’ . $term->name . ‘</a></h2>’;
//判断分类描述,非空则输出描述
if (!empty($term->description)) { echo ‘<p>’ . $term->description . ‘</p>’; }
echo ‘</li>’;
}
echo ‘</ul>’;
}
?>
[/php]

带文章列表的分类法所有分类
很多时候我们在调用所有分类的时候也希望每个分类后都能显示最近的几篇文章,以下这个案例就实现调用自定义分类法所有分类的时候同时显示每个分类10篇文章。

[php]<?php
//自定义分类法名称
$taxonomy = ‘sort’;
// 得到自定义分类法所有分类列表
$terms = get_terms($taxonomy);
// 循环自定义分类法所有分类
foreach ($terms as $cat) {
// 得到自定义分类法分类ID
$catid = $cat->term_id;
$args = array(
‘showposts’ => 10, //输出的文章数量
‘tax_query’ => array( array( ‘taxonomy’ => $taxonomy, ‘terms’ => $catid ) )
);
$query = new WP_Query($args);
if( $query->have_posts() ) { ?>
<ul>
<li><h2><a href="<?php echo get_term_link( $cat ); ?>" ><?php echo $cat->name; ?></a></h2>
<ul>
<?php while ($query->have_posts()) : $query->the_post();?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
</li>
</ul>
<?php } wp_reset_query(); //重置query查询?>
<?php } ?>
[/php]

如果想用http://www.w3cways.com/color/black这种形式的链接来显示,那就需要重新制作一个对应自定义分类的页面来展示。
这里我们使用tag的展现方式(这里以twentytwelve为例)
首先我们复制一份tag.php文件,重新命名为taxonomy-color.php(color为我们之前命名的分类名)。
get_header(); ?>下方添加代码

[php]<?php $term = get_term_by( ‘slug’, get_query_var( ‘term’ ), get_query_var( ‘taxonomy’ ) ); ?>
[/php]

[php]<h1 class="archive-title"><?php printf( __( ‘Tag Archives: %s’, ‘twentytwelve’ ), ‘<span>’ . single_tag_title( ”, false ) . ‘</span>’ ); ?></h1>
[/php]

替换成

[php]<h1 class="archive-title"><?php printf( __( ‘Tag Archives: %s’, ‘twentytwelve’ ), ‘<span>’ . $term->name . ‘</span>’ ); ?></h1>
[/php]

[php]while ( have_posts() ) : the_post();
[/php]

下方添加

[php]query_posts(array( ‘post_type’=>’post’, ‘color’=>$term->slug));
[/php]

保存,再到前台你调用的地方,点击,就会出来以这种链接http://www.w3cways.com/color/black形式的页面(类似tag.php)。

转载请注明来源:Web前端(W3Cways.com) - Web前端学习之路 » 详解wordpress通过自定义分类法实现筛选功能
分享到: 更多 (0)

评论 27

评论前必须登录!

 

  1. #0

    看了一下 其实也没有那么复杂可以尝试给一个大分类 之后分配到小分类筛选的过程可能就是CSS动画过程

    帅气小小琦10年前 (2016-11-02)
  2. #0

    不是很懂wordpress ,该代码放不了同本站主题上吧,请指点要怎么改?

    卢一文10年前 (2015-11-13)
  3. #0

    能否多给一些例子?比如:只输出分类如何排序(按统计数量由多到少)?只输出分类如何控制数量?输出分类极其内容的,能否控制指定的字段ID来显示??

    搁浅11年前 (2015-09-17)
    • 这个我只是把我用到的地方贴出来,我自己本身不是学PHP的,上面评论中有个网址,你可以去看看

  4. #0

    请教怎么才能做到筛选功能不重新加载整页,而是文章列表刷新

    im无忌11年前 (2015-09-14)
  5. #0

    大神,能否提供下这个案例的源码学习下,非常感谢

    于洋11年前 (2015-04-23)
  6. #0

    请教一下你这个代码高亮的插件是什么?

  7. #0

    你最上面的代码是自定义标签法

    徐磊12年前 (2014-09-06)
  8. #0

    多重筛选如何实现呢?

    蒼茫去遠航12年前 (2014-08-14)
  9. #0

    这个可以多重筛选么?

    言冬12年前 (2014-06-17)
  10. #0

    我的qq是910592680,邮箱也是这个。希望能得到你的帮助。谢谢。

    bacon12年前 (2014-05-28)
  11. #0

    找了很多wp 筛选的文章 ,只有你的最靠谱。请教下我现在做的没有你的那么复杂,也就不需要自定义分类,通过标签就可以了。我现在困惑的是,应该如何提交查询。我现在的思路是:分类查询页面是 domain/abc通过选择分类条件然后拼接参数 ,得到doman/abc?a=1&b=2&c=3,然后通过a标签访问这个URL最后通过这个页面获取a,b,c参数,然后通过query查询得到。我这样思路对吗?现在最纠结的就是url提交到哪里,如何提交。不知道方法对不对求指导。

    bacon12年前 (2014-05-28)
    • 我对PHP不熟的,你说的是通过标签来查询么,就是多个标签查询

      • 我对PHP也不熟,哈哈。已经在群里问过怎么做了。对了,这个贴子不是你写的么?反正很好啊,我已经收藏了。等以后做颜色分类时,借鉴下~

        bacon12年前 (2014-05-30)
        • 是我写的,例子都是我实际用到然后截图出来的

          • 今天才开始做筛选,我现在自定义了一个文章分类,但是不知道如何展示出来。以前的访问分类为:domain/分类别名父类/分类别名子类/例如:domain/xinwen/hangye/ 就是访问的默认文章类型的新闻分类下的行业新闻现在自定义了一个文章类型project不知道怎昂访问了和如何建立页面了。我的网站 http://www.aomeivs.com 结构你可以看下,方便加QQ吗?

            bacon12年前 (2014-06-12)
          • 自定义文章类型,网上有很多教程,百度一下

            牵着狗狗看MM12年前 (2014-06-16)