WordPress 帖子和頁面過濾的終極指南
已發表: 2017-07-13如果您曾經在亞馬遜上購物過,很可能您已經體會到過濾器的強大功能,它可以深入挖掘大量內容並準確定位您想要的內容。 在亞馬遜上搜索產品時,總會有一個充滿過濾器的側邊欄,可幫助您優化搜索,僅返回滿足您最重要要求的結果。 過濾器,如客戶評級、品牌、產品是男用還是女用、狀況(新/舊)等等。
考慮到內容過濾器的有用性,為您的 WordPress 內容創建它們的能力內置於 WordPress Core 中,這可能不足為奇。 只需一點點專業知識,您就可以將這種力量帶給您的網站訪問者——讓他們比以往任何時候都更靈活地瀏覽您的內容。
在這篇文章中,我們將引導您完成使用插件為用戶創建內容過濾選項的過程。
讓我們開始吧!
為什麼 WordPress 帖子和頁面過濾?
WordPress 非常靈活。 核心允許您完全控制站點上的所有內容。 帖子和頁面過濾是 WordPress 最強大的功能之一。 帖子、頁面和自定義內容有幾個內置函數。 此外,有多種方法可以選擇、分組和過濾存儲在數據庫中的項目。 您可以按頁面模板、帖子類型、分類術語、模板層次結構、產品頁面或您想要的任何其他內容創建可排序的搜索結果列表。
默認情況下,WordPress 帶有內置搜索功能。 但是,該搜索功能還有很多不足之處,並且在您的讀者想要以特定方式過濾結果時無濟於事。 這就是第三方插件的幫助發揮作用的地方。
搜索和過濾插件有什麼作用?
搜索和過濾插件是一個易於使用的插件,它將默認的 WordPress 搜索框提升到一個新的水平。 它允許您的訪問者搜索特定術語並根據類別、標籤、自定義帖子類型、自定義分類法、日期範圍甚至所有這些的組合來過濾結果,以獲得更精確的搜索和更準確的結果。
使用插件非常簡單。 安裝並激活插件後,您將被帶到設置頁面,其中包含有關如何使用它的詳細說明。 簡而言之,您可以在帖子、頁面或任何小部件側邊欄中的任何位置使用短代碼。 或者,如果您感到勇敢並且不介意用少量代碼弄髒您的手,您可以在主題文件中粘貼一行代碼。
讓我們看幾個例子。
如何使用搜索和過濾器過濾帖子
該插件最基本的用法是允許訪問者搜索所有類別和標籤的簡碼。 默認短代碼如下所示:
[searchandfilter fields="search,category,post_tag"]
您可以將其插入任何帖子、頁面或文本小部件,它會在前端顯示帶有搜索、類別和標籤字段的過濾選項:

如果您想讓訪問者選擇多個類別或標籤,您可以通過修改短代碼以包含複選框而不是下拉列表並標記每個字段來輕鬆實現:
[searchandfilter headings="Select categories:" types="checkbox" fields="category"]

上面的例子展示瞭如何使用側邊欄中的插件。 但是,您也可以在主題文件中使用它以在任何頁面上顯示它。 在下面的示例中,表單顯示在博客頁面上。 您所要做的就是粘貼以下代碼行:
<?php echo do_shortcode('[searchandfilter fields="search,category,post_tag"]'); ?>在我們的例子中,我們已將其添加到 27 主題的主索引模板中。

如何過濾自定義分類法?
上面的例子展示了插件的一個非常基本的用法。 但是,搜索和過濾插件也接受其他參數。 您可以使用短代碼,讓訪問者僅針對自定義分類過濾搜索結果。
假設您的網站上有一家使用 WooCommerce 的商店。 如果您想在搜索結果中包含產品類別,您只需添加以下短代碼:
[searchandfilter taxonomies="search,category,post_tag,product_cat" headings=",Categories,Tags,Product Categories"]
在此示例中,我還在每個字段之前添加了標題,以便訪問者可以更輕鬆地區分字段:

如果您想在主題中的頁面上顯示它,那麼您需要做的就是將以下代碼行粘貼到Appearance > Themes > Editor下的相應頁面模板中:
<?php echo do_shortcode('[searchandfilter taxonomies="search,category,post_tag,product_cat" headings=",Categories,Tags,Product Categories"]'); ?>如何按日期範圍過濾帖子?
另一種情況是,如果您想讓訪問者在特定日期範圍內搜索特定類別的帖子。 在這種情況下,只需將以下代碼行粘貼到您的archive.php 中:
<?php echo do_shortcode('[searchandfilter fields="search,post_date" types=",daterange" headings=",Post Date"]'); ?>
如何過濾帖子格式和頁面?
在最後一個示例中,讓我們看一下過濾帖子格式和頁面。 如果您發布視頻或音頻帖子,此簡碼將僅允許訪問者查找屬於您指定的帖子格式的帖子:
[searchandfilter fields="search,post_format" types=",select" headings=",Post Format" submit_label="Filter"]
如果您希望訪問者過濾頁面或帖子,那麼您只需要接受帖子類型作為參數的簡碼:
[searchandfilter fields="search,post_types" post_types="post,page" headings=",Post Types"]


除了上面的示例之外,該插件還通過包含用於按層次順序對結果進行排序的參數、顯示指定類別中的帖子計數、添加類、過濾作者等等,從而使您獲得更具體的信息。
如何手動過濾帖子
與 WordPress 相關的任何事情一樣,有一種方法可以在不使用插件的情況下完成。 假設您想創建一個簡單的表單,讓訪問者可以過濾某個類別的帖子。
首先,您需要創建一個簡單的表單:
<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="filter">
<?php
if( $terms = get_terms( 'category', 'orderby=name' ) ) :
echo '<select name="categoryfilter"><option>Select category...</option>';
foreach ( $terms as $term ) :
echo '<option value="' . $term->term_id . '">' . $term->name . '</option>';
endforeach;
echo '</select>';
endif;
?>
<label>
<input type="radio" name="date" value="ASC" /> Date: Ascending
</label>
<label>
<input type="radio" name="date" value="DESC" selected="selected" /> Date: Descending
</label>
<button>Apply filters</button>
<input type="hidden" name="action" value="customfilter">
</form>
<div id="response"></div>
在上面的表格中,第一部分只是讓用戶使用get_terms函數選擇分類法。 您可以將其用於默認類別和標籤以及自定義分類法。 下一部分添加了單選按鈕,允許訪問者按升序或降序顯示結果。 最後,最後一部分是允許他們應用所選過濾器的表單按鈕。
整個表單已添加到外觀 > 主題 > 編輯器中的sidebar.php模板。
下一步是使用 jQuery,以便無需重新加載頁面即可顯示結果:
jQuery(function($){
$('#filter').submit(function(){
var filter = $('#filter');
$.ajax({
url:filter.attr('action'),
data:filter.serialize(), // form data
type:filter.attr('method'), // POST
beforeSend:function(xhr){
filter.find('button').text('Applying Filters...'); },
success:function(data){
filter.find('button').text('Apply filters'); $('#response').html(data);
}
});
return false;
});
});
最後一點代碼是向 function.php 文件添加一個函數,該函數將根據選定的過濾器處理結果。 它將瀏覽選定的類別,只要有帖子,它就會按發布日期以升序或降序顯示它們。 如果在該類別中沒有找到帖子,它會顯示沒有找到帖子的消息:
function my_filters(){
$args = array(
'orderby' => 'date',
'order' => $_POST['date']
);
if( isset( $_POST['categoryfilter'] ) )
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['categoryfilter']
)
);
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
echo '<h2>' . $query->post->post_title . '</h2>';
endwhile;
wp_reset_postdata();
else :
echo 'No posts found';
endif;
die();
}
add_action('wp_ajax_customfilter', 'my_filters');
add_action('wp_ajax_nopriv_customfilter', 'my_filters');
最終結果在前端顯示如下:

為什麼你應該讓你的讀者在 WordPress 中過濾帖子和頁面
上述方法是讓用戶過濾帖子的好方法。 但是你為什麼要這樣做呢?
WordPress 已經允許您使用類別和標籤來組織您的帖子,但它一次只允許用戶查看一個類別或標籤。 此外,如果您使用使用自己類別的自定義帖子類型,則這些類別將不會與用於常規帖子的類別一起顯示。
搜索和過濾器插件特別有用,不僅當您有許多不同的類別和標籤與一年的內容配對時,如果您添加了自定義帖子類型(如投資組合、畫廊、推薦等),它也會派上用場。
另一個例子是您的訪問者可以輕鬆地使用此插件過濾您的產品並找到他們正在尋找的內容。 如果您熟悉代碼,則手動執行此操作可讓您更好地控制搜索結果的顯示方式和使用的參數。
包起來
通過允許訪問者快速找到您想要的內容來確保您的網站易於使用是為他們提供愉快的用戶體驗並鼓勵他們回來的好方法。 如果您的網站內容豐富,請考慮實施頁面和帖子過濾,以確保他們獲得想要查看的更多內容。
我們很想听聽您對 WordPress 搜索和過濾的任何體驗。 請在下面的評論中告訴我們。
文章縮略圖來自graphicglobe / shutterstock.com
