应大家要求,本文介绍的功能已做成插件,请转到本站开发的WordPress多条件筛选插件-Wizhi Multi Filters 查看介绍。
在做一些内容比较丰富的 CMS 站点、产品站点或在线商店的时候,我们需要对网站的内容进行筛选过滤,比较通用的方法就是以产品分类或产品属性作为过滤条件(产品属性也可以看成具有某种共同属性的分类)。
对数码产品比较关注的朋友对下面的功能应该很熟悉,这是中关村在线的产品列表页面的截图。
下面这一个是我为客户定制的一个明星过滤的截图,前台过滤条件中的所有分类都可以在后台添加。过滤条件在后台以自定义分类项目或自定义字段的形式出现。
上面的效果看似复杂,实现起来其实也不困难,这主要得益于 WordPress 灵活的数据结构和丰富的功能函数,下面我们就来看看如何实现上面的功能。
添加查询参数,构造查询 URL
实现上面的功能主要通过 WordPress 的自定义查询和 add query var 函数。
第一步,我们需要列出自定义分类里面的所有分类项目作为查询条件,这一步是关键所在。
$args = array('taxonomy' => 'star_aera'); $terms = get_terms('star_aera', $args); $is_all = get_query_var('star_aera') ? '' : 'checked'; $term_list_area .= '' . '所有'; $count = count($terms); if ($count > 0) { foreach ($terms as $term) { $is_checked = (get_query_var('star_aera') == $term->term_id) ? 'checked' : ''; $term_list_area .= '' . $term->name; } echo $term_list_area; }
合并多种查询条件并构造查询
然后根据查询条件,查询后台的内容,并输出。
if (!empty($star_zhiye)) { //构造其中一个查询条件的查询数组,这里是根据自定义字段查询 $array_star_zhiye = array( 'taxonomy' => 'star_zhiye', 'field' => 'id', 'terms' => $star_zhiye, ); } else { $array_star_zhiye = ""; }; $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; //合并所有查询调节并构造查询参数 $args = array( 'post_type' => 'star', 'posts_per_page' => '12', 's' => $phone, 'paged' => $paged, 'tax_query' => array( 'relation' => 'AND', //$array_star_sex, //$array_star_chuchang, //$array_star_daiyan, //$array_star_aera, $array_star_zhiye, //篇幅问题,上面的4个查询条件省略掉了,可以根据自己的需要添加 ) ); //新建查询对象 $wp_query = new WP_Query($args);
输入自定义查询结果
有了上面的自定义查询对象,我们就可以像 WordPress 普通的分类模板那样输出文件内容了。
while ($wp_query->have_posts()) : $wp_query->the_post(); get_template_part('content', 'stars'); endwhile;
其实 WordPress 发展到今天,早已不只是当初的 Blog 程序了,她已经强大到可以作为一个功能全面的 CMS 甚至是 PHP 框架来使用了。根据不同的需求,我们完全可以定制出各种各样的Web应用程序。
如果您对本文内容有疑惑,或者觉得自己动手比较浪费时间,欢迎咨询 WordPress 解答问题或定制开发。
应大家要求,本文介绍的功能已做成插件,请转到本站开发的WordPress多条件筛选插件-Wizhi Multi Filters 查看介绍。