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

2019-10-2309:20:54网站建设与开发Comments4,854 views字数 3251阅读模式

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

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

在functions.php中添加如下代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

  1. //自定义分类法
  2. add_action( 'init', 'create_color' );
  3. function create_color() {
  4. $labels = array(
  5. 'name' => _x( 'color', 'taxonomy general name' ),
  6. 'singular_name' => _x( 'color', 'taxonomy singular name' ),
  7. 'search_items' => __( 'Search color' ),
  8. 'all_items' => __( 'All colors' ),
  9. 'parent_item' => __( 'Parent color' ),
  10. 'parent_item_colon' => __( 'Parent color:' ),
  11. 'edit_item' => __( 'Edit color' ),
  12. 'update_item' => __( 'Update color' ),
  13. 'add_new_item' => __( 'Add New color' ),
  14. 'new_item_name' => __( 'New color Name' ),
  15. );
  16. register_taxonomy('color','post',array(
  17. 'hierarchical' => false,
  18. 'labels' => $labels
  19. ));
  20. }

register_taxonomy这个wordpress函数就是用来创建一个分类法,先解释一下传递给这个函数的参数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

color是这个分类法的内部名(这个可以自己命名)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

post告诉wordpress哪个文章类型将使用这个分类法,在这个例子里,我们用的是wordpress默认的post文章类型,你也可以将它替换成page或者你自定义的文章类型,这样就可以将分类法用在一般的文章和页面上。也可以同时运用在多个文章类型上(通过数组)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

array(…)是传递给register_taxonomy的最后一个参数,它告诉wordpress分类法如何运行。具体来解释一下array里面的内容:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

hierarchical是一个布尔值,用来确定分类法是否有等级,即是否有子分类。对于颜色(color)分类这个例子而言,我没有设置子分类,所以我设置false文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

labels是输出这个分类法的一些相关信息(由create_color函数的$labels来定义)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

add_action( ‘init’, ‘create_color’ )是指wordpress初始化时,会调用create_color这个函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

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

颜色(color)这个分类法已经创建完成了,现在登陆到wordpress的后台,在文章下(之前用的是post类型,所以默认会在文章下),可以看到一个新的链接color,点击它就可以进入如下图的页面,你可以在此进行新增、编辑、删除color等操作。
wordpress通过自定义分类法实现筛选功能
下图是我添加的颜色分类,由于展示的特殊性,名称处我直接用的颜色代码
wordpress通过自定义分类法实现筛选功能
发布新文章的时候,在标签的下方,就会出现你自定义的分类目录,如下图
wordpress通过自定义分类法实现筛选功能文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

Step 3:调用方法

不带链接,直接输出自定义分类名称文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

  1. <?php
  2. //sort是分类法别名
  3. $terms = get_terms("sort");
  4. $count = count($terms);
  5. if ( $count > 0 ){
  6. echo "<ul>";
  7. foreach ( $terms as $term ) {
  8. echo "<li>" . $term->name . "</li>";
  9. }
  10. echo "</ul>";
  11. }
  12. ?>

带链接和描述的分类法分类列表文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

  1. <?php
  2. $terms = get_terms("sort");//sort是分类法别名
  3. $count = count($terms);
  4. if ( $count > 0 ){
  5. echo '<ul>';
  6. foreach ( $terms as $term ) {
  7. echo '<li>';
  8. echo '<h2><a href="' . get_term_link( $term ) . '" >' . $term->name . '</a></h2>';
  9. //判断分类描述,非空则输出描述
  10. if (!empty($term->description)) { echo '<p>' . $term->description . '</p>'; }
  11. echo '</li>';
  12. }
  13. echo '</ul>';
  14. }
  15. ?>

带文章列表的分类法所有分类
很多时候我们在调用所有分类的时候也希望每个分类后都能显示最近的几篇文章,以下这个案例就实现调用自定义分类法所有分类的时候同时显示每个分类10篇文章。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

  1. <?php
  2. //自定义分类法名称
  3. $taxonomy = 'sort';
  4. // 得到自定义分类法所有分类列表
  5. $terms = get_terms($taxonomy);
  6. // 循环自定义分类法所有分类
  7. foreach ($terms as $cat) {
  8. // 得到自定义分类法分类ID
  9. $catid = $cat->term_id;
  10. $args = array(
  11. 'showposts' => 10, //输出的文章数量
  12. 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'terms' => $catid ) )
  13. );
  14. $query = new WP_Query($args);
  15. if( $query->have_posts() ) { ?>
  16. <ul>
  17. <li><h2><a href="<?php echo get_term_link( $cat ); ?>" ><?php echo $cat->name; ?></a></h2>
  18. <ul>
  19. <?php while ($query->have_posts()) : $query->the_post();?>
  20. <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
  21. <?php endwhile; ?>
  22. </ul>
  23. </li>
  24. </ul>
  25. <?php } wp_reset_query(); //重置query查询?>
  26. <?php } ?>

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

  1. <?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); ?>

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

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

替换成文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

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

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

  1. while ( have_posts() ) : the_post();

下方添加文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

  1. query_posts(array( 'post_type'=>'post', 'color'=>$term->slug));

保存,再到前台你调用的地方,点击,就会出来以这种链接http://www.w3cways.com/color/black形式的页面(类似tag.php)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16935.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/cms/16935.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定