3 回答

TA貢獻1963條經驗 獲得超6個贊
這需要使用 AJAX 來完成。創建這個 AJAX 過濾器需要幾個步驟。
首先,如果您希望一次只能單擊復選框,則需要確保您都具有相同的名稱屬性值。因此,您應該同時調用它們,而不是 name="block" 或 name="classic",例如,name="category-checkbox"。
在您的functions.php 文件中,您需要將以下內容入隊:
function scripts() {
wp_localize_script ('scripts', 'js_variables', array ('js_home_url' =>
home_url(), 'ajaxURL' => admin_url( 'admin-ajax.php' ), ''));
}
add_action( 'wp_enqueue_scripts', 'scripts' );
在您的 javascript 文件中,您需要從復選框中收集數據。您可以使用以下方法執行此操作:
$('.filter-category').change(function() {
var catId = ($(this).val());
aJaxFilter(catId);
});
function aJaxFilter(formData) {
$.ajax({
url: js_variables.ajaxURL,
type:'GET',
data: {
'formData' : formData,
'action' : 'listFilteredProducts'
},
success:function(data){
$('main').html(data);
}
});
}
然后,您需要創建另一個文件,我將其命名為 ajax-function.php,并將其放在我的代碼段文件夾中。在那里,輸入以下代碼:
add_action('wp_ajax_listFilteredProducts', 'listFilteredProducts');
add_action('wp_ajax_nopriv_listFilteredProducts', 'listFilteredProducts');
function listFilteredProducts($wp_query) {
if(isset($_GET['formData'])) {
$cat_id = $_GET['formData'];
}
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'cat' => $cat_id,
);
$multiple = get_posts($args);
foreach($multiple as $single) {
$ID = $single->ID;
// Put the code for how you want your article cards to look here.
}
wp_die();
}

TA貢獻1860條經驗 獲得超8個贊
我可以想到兩個選項來解決這個問題。第一種是在過濾器更改時使用 AJAX 重新加載結果列表。
第二個選項(看起來像您正在嘗試的那個)是將數據屬性中的每個帖子的類別添加到元素(逗號分隔),并且當過濾器更改時,循環遍歷每個帖子元素并檢查是否category 存在,然后隱藏或顯示每個帖子元素。
這兩個選項之間的選擇取決于您顯示的項目數量以及您是否使用分頁。第二個選項是最簡單的選項,但是當您使用分頁時,它會給您帶來麻煩,因為并非所有帖子都會一次加載。
- 3 回答
- 0 關注
- 142 瀏覽
添加回答
舉報