WordPress纯代码实现多分类筛选(下拉方式)
方法一:使用分类ID控制选择显示的分类
要修改代码以便使用分类ID控制选择显示的分类,你需要在生成下拉菜单选项时添加一个条件检查,确保只显示那些ID在允许列表中的分类。以下是修改后的代码示例:
把以下代码放到想要显示的位置。
<form method="post" action="">
<!-- 使用分类ID控制显示的分类 -->
<label for="category_id_1">选择第一个分类:</label>
<select id="category_id_1" name="category_ids[]">
<option value="">请选择分类</option>
<?php
// 获取所有分类
$categories = get_categories();
// 定义允许显示的分类ID数组
$allowed_categories = [1, 2, 3]; // 假设只允许显示ID为1, 2, 3的分类
foreach ($categories as $category) {
// 检查当前分类的ID是否在允许列表中
if (in_array($category->term_id, $allowed_categories)) {
echo '<option value="' . $category->term_id . '">' . $category->name . '</option>';
}
}
?>
</select>
<!-- 复制上面的代码块以添加更多选择框,只需更改id和label即可 -->
<input type="submit" value="筛选文章">
</form>
<?php
// 处理表单提交并查询文章
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['category_ids'])) {
// 从表单中获取分类ID数组
$category_ids = $_POST['category_ids'];
// 移除数组中的空值
$category_ids = array_filter($category_ids);
// 如果没有选择任何分类,则不显示任何内容
if (empty($category_ids)) {
echo '<p>未选择任何分类。</p>';
} else {
// 创建一个新的WP_Query对象来执行自定义查询
$query = new WP_Query(array(
'category__and' => $category_ids,
));
// 检查是否有查询到的文章
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// 显示文章标题和内容
echo '<h2>' . get_the_title() . '</h2>';
echo '<p>' . get_the_content() . '</p>';
}
} else {
echo '<p>没有找到符合条件的文章。</p>';
}
// 重置文章数据
wp_reset_postdata();
}
}
?>
在这个示例中,$allowed_categories
数组定义了允许显示的分类ID。在生成下拉菜单时,代码会检查每个分类的ID是否在 $allowed_categories
数组中,如果是,则显示该分类的选项。用户提交表单后,后端代码会处理表单数据,并使用 WP_Query
类根据选择的分类ID来查询文章。
方法二:使用分类ID控制选择显示的分类(显示子分类)
要修改代码以显示特定分类的子分类,你需要使用WordPress的get_categories()
函数,并通过child_of
参数指定父分类的ID。以下是一个修改后的示例,其中将显示指定父分类下的所有子分类:
<form method="post" action="">
<!-- 显示特定分类的子分类 -->
<label for="category_id_1">选择第一个分类:</label>
<select id="category_id_1" name="category_ids[]">
<option value="">请选择分类</option>
<?php
// 获取指定父分类下的所有子分类
$parent_category_id = 5; // 父分类ID,根据实际情况修改
$categories = get_categories(array(
'child_of' => $parent_category_id,
'hide_empty' => 0, // 是否隐藏没有文章的分类
));
foreach ($categories as $category) {
echo '<option value="' . $category->term_id . '">' . $category->name . '</option>';
}
?>
</select>
<!-- 复制上面的代码块以添加更多选择框,只需更改id、label和name即可 -->
<input type="submit" value="筛选文章">
</form>
<?php
// 处理表单提交并查询文章
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['category_ids'])) {
// 从表单中获取分类ID数组
$category_ids = $_POST['category_ids'];
// 移除数组中的空值
$category_ids = array_filter($category_ids);
// 如果没有选择任何分类,则不显示任何内容
if (empty($category_ids)) {
echo '<p>未选择任何分类。</p>';
} else {
// 创建一个新的WP_Query对象来执行自定义查询
$query = new WP_Query(array(
'category__and' => $category_ids,
));
// 循环遍历查询到的文章并显示
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo '<h2>' . get_the_title() . '</h2>';
echo '<p>' . get_the_content() . '</p>';
}
} else {
echo '<p>没有找到符合条件的文章。</p>';
}
// 重置文章数据
wp_reset_postdata();
}
}
?>
在这个示例中,$parent_category_id
变量被设置为父分类的ID,get_categories()
函数使用child_of
参数来获取这个父分类下的所有子分类。然后,代码遍历这些子分类,并为每个子分类创建一个<option>
元素。你可以根据需要修改$parent_category_id
的值来显示不同父分类下的子分类。