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 关注
- 118 浏览
添加回答
举报