在内容比较丰富的站点里面,我们经常会用到 WordPress 的自定义分类方法来管理内容。因为某种需要,我们可能需要按文章所在的自定义分类方法筛选内容。比如我的一个文章类型是“学校”,该文章类型关联了一个“省份”的自定义分类方法,现在我想按省份筛选所有的学校。就需要用到本文中介绍的方法了。
WordPress 按分类法过滤内容的函数
function state_taxonomy_dropdown( $taxonomy, $orderby = 'date', $order = 'DESC', $limit = '-1', $name, $show_option_all = null ) {
$args = array(
'orderby' => $orderby,
'order' => $order,
'number' => $limit,
);
$term_now = get_query_var('term');
$terms = get_terms( $taxonomy, $args );
$name = ( $name ) ? $name : $taxonomy;
if ( $terms ) {
printf( '<select name="%s" onchange="location=this.value" class="postform">', esc_attr( $name ) );
if ( $show_option_all ) {
printf( '<option value="' . get_bloginfo("url") . '/school/">%s</option>', esc_html( $show_option_all ) );
}
foreach ( $terms as $term ) {
if ($term_now == $term->slug) {
$selected = "selected";
} else {
$selected = "";
}
printf( '<option value="' . get_bloginfo("url") . '/state/%s"' . $selected . '>%s</option>', esc_attr( $term->slug ), esc_html( $term->name ) );
}
print( '</select>' );
}
}
按分类法过滤内容函数的参数和使用方法
该函数有几个参数,可以让我们按照需要输出下拉筛选表单。
- $taxonomy:需要作为筛选条件使用的自定义分类法的别名
- $orderby :排序方式,默认为发布日期
- $order :升序还是降序排列,默认为降序
- $limit:显示的分类项目的数量,默认为全部显示。
- $name:显示的筛选表单的标签名称,必填项
- $show_option_al:是否显示“全部” 链接,默认为不显示。
例如,我们需要显示所有省份作为筛选条件,直接把下面代码放到自定义文章类型的存档页面或者分类方法的存档页面就可以了。
<?php state_taxonomy_dropdown( 'state', 'date', 'DESC', '5', 'state', '显示所有' ); ?>