在做一些內(nèi)容比較豐富的 CMS 站點(diǎn)、產(chǎn)品站點(diǎn)或在線商店的時(shí)候,我們需要對(duì)網(wǎng)站的內(nèi)容進(jìn)行篩選過(guò)濾,比較通用的方法就是以產(chǎn)品分類或產(chǎn)品屬性作為過(guò)濾條件(產(chǎn)品屬性也可以看成具有某種共同屬性的分類)。
對(duì)數(shù)碼產(chǎn)品比較關(guān)注的朋友對(duì)下面的功能應(yīng)該很熟悉,這是中關(guān)村在線的產(chǎn)品列表頁(yè)面的截圖。

下面這一個(gè)是我為客戶定制的一個(gè)明星過(guò)濾的截圖,前臺(tái)過(guò)濾條件中的所有分類都可以在后臺(tái)添加。過(guò)濾條件在后臺(tái)以自定義分類項(xiàng)目或自定義字段的形式出現(xiàn)。

上面的效果看似復(fù)雜,實(shí)現(xiàn)起來(lái)其實(shí)也不困難,這主要得益于 WordPress 靈活的數(shù)據(jù)結(jié)構(gòu)和豐富的功能函數(shù),下面我們就來(lái)看看如何實(shí)現(xiàn)上面的功能。
添加查詢參數(shù),構(gòu)造查詢 URL
實(shí)現(xiàn)上面的功能主要通過(guò) WordPress 的自定義查詢和 add query var 函數(shù)。
第一步,我們需要列出自定義分類里面的所有分類項(xiàng)目作為查詢條件,這一步是關(guān)鍵所在。
$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;
}
合并多種查詢條件并構(gòu)造查詢
然后根據(jù)查詢條件,查詢后臺(tái)的內(nèi)容,并輸出。
if (!empty($star_zhiye)) {
//構(gòu)造其中一個(gè)查詢條件的查詢數(shù)組,這里是根據(jù)自定義字段查詢
$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;
//合并所有查詢調(diào)節(jié)并構(gòu)造查詢參數(shù)
$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, //篇幅問(wèn)題,上面的4個(gè)查詢條件省略掉了,可以根據(jù)自己的需要添加
)
);
//新建查詢對(duì)象
$wp_query = new WP_Query($args);
輸入自定義查詢結(jié)果
有了上面的自定義查詢對(duì)象,我們就可以像 WordPress 普通的分類模板那樣輸出文件內(nèi)容了。
while ($wp_query->have_posts()) : $wp_query->the_post();
get_template_part('content', 'stars');
endwhile;
其實(shí) WordPress 發(fā)展到今天,早已不只是當(dāng)初的 Blog 程序了,她已經(jīng)強(qiáng)大到可以作為一個(gè)功能全面的 CMS 甚至是 PHP 框架來(lái)使用了。根據(jù)不同的需求,我們完全可以定制出各種各樣的Web應(yīng)用程序。



你好,能否給一個(gè)空白主題的案例代碼分享呢?