標籤:

WordPress多重篩選並排序(按自定義欄位、分類、標籤等)

開門見山,WordPress要實現文章多重篩選的核心函數就是wp_query( ),有php基礎的,直接看官方文檔應該就能解決標題所提到的WordPress多重篩選功能了。效果圖實例:

下面我做一些簡單的介紹:

假設文章有自定義欄位:area 存放的是地區信息,比如重慶,比如北京等。另一個欄位為type,存放類型。

// 分類
if(isset($_GET[cat])) {
$cat_name=$_GET[cat];
}
// 標籤
if(isset($_GET[tag]) ){
$tag=$_GET[tag];
}

// 自定義欄位:area
if(isset($_GET[area]) ){
$array_temp = array(key => area, value=>$_GET[area], compare=>=);
array_push($metaArray,$array_temp);
}

// 自定義欄位:type
if(isset($_GET[type]) ){
$array_temp = array(key => type, value=>$_GET[type], compare=>=);
array_push($metaArray,$array_temp);
}

//正反順序
if(isset($_GET[order])){
$order=$_GET[order];
}
else $order = DESC;

//默認按時間排序
$orderby=date;

//如果用戶設置了按文章特定欄位價排序
if(isset($_GET[orderby])){
if($_GET[orderby] == views){
$array_temp = array(key => views);
array_push($metaArray,$array_temp);
$orderby=meta_value_num;
}
else $orderby = $_GET[orderby]; //否則按wp自帶排序欄位
}

//獲取上述參數,組成查詢條件
$args = array(
meta_query => $metaArray,
category_name = >$cat_name,
tag= $tag_name,
order => $order,//DESC,
orderby => $orderby,
);

//查詢文章
$query = new WP_Query( $args );

輸出:

<?php while ($query->have_posts()) : $query->the_post(); ?>

<h1 class="post-name"><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h1>

<?php endwhile; ?>

我這裡只設置輸出了標題。大意就是如此。通過上面的代碼,就可以實現,標籤,分類,和area 和type四個條件的多重篩選。

$_GET[cat])

這是指從網址中獲取的值,比如

?area=重慶&cat=food&tag=good&type=xxx&orderby=modified

則獲取的是,重慶地區,分類為food,標籤為good,類型為xxxx的文章,並按修改時間排序。

為了方便通過點擊自動生成上述鏈接,你可能需要了解一下:add_query_arg() 和 remove_query_arg() 這兩個函數。如果多重篩選需要分頁,你可能需要 WP-PageNavi這個插件配合上面的代碼使用

wp_pagenavi( array( query => $query ) );

上述方法是WordPress實現多重篩選最優質的思路,因為全部都是通過官方函數提供的功能實現的。網上其他有一些方法,比如通過多個tag等實現,但如果遇到需要自定義欄位的區間篩選就歇菜了。我通過上述方法做成了兩個網站:movie.cangba.net 和 www.adhy.cn 具體效果大家可以到這兩個網站查看。

非常抱歉,你可能讀完這篇文章還是雲里霧裡,實話說,如果你毫無編程基礎,的確很難理解。我這裡只是記錄的一個實現思路。但一旦你熟悉就會豁然開朗,WordPress多重篩選真的很好很強大,這會拓寬你做網站的道路。如果你實在有需求,可以聯繫我付費實現。

原文:WordPress多重篩選並排序(按自定義欄位、分類、標籤等) | 萬能的WordPress


推薦閱讀:

TAG:WordPress |