分享

WordPress 根据多种条件筛选查询内容

 37dv 2018-02-12
应大家要求,本文介绍的功能已做成插件,请转到本站开发的WordPress多条件筛选插件-Wizhi Multi Filters 查看介绍。

在做一些内容比较丰富的 CMS 站点、产品站点或在线商店的时候,我们需要对网站的内容进行筛选过滤,比较通用的方法就是以产品分类或产品属性作为过滤条件(产品属性也可以看成具有某种共同属性的分类)。

对数码产品比较关注的朋友对下面的功能应该很熟悉,这是中关村在线的产品列表页面的截图。

wordpress-multi-value-query

下面这一个是我为客户定制的一个明星过滤的截图,前台过滤条件中的所有分类都可以在后台添加。过滤条件在后台以自定义分类项目或自定义字段的形式出现。

multi-custom-query

上面的效果看似复杂,实现起来其实也不困难,这主要得益于 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 .= '<input name="star_aera"' . $is_all . ' type="checkbox" value="' . remove_query_arg('star_aera') . '" onclick="location.href=this.value">' . '所有';
$count = count($terms);
if ($count > 0) {
     foreach ($terms as $term) {
         $is_checked = (get_query_var('star_aera') == $term->term_id) ? 'checked' : '';
         $term_list_area .= '<input name="star_aera" type="checkbox"' . $is_checked . ' value="' .      add_query_arg(array('star_aera' => $term->term_id, 'paged' => false)) . '"    onclick="location.href=this.value">' . $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 查看介绍。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多