// 获取当前分类目录的ID
$cat_id = get_query_var('cat');
// 获取当前分类目录的子分类目录ID集合
$sub_cats = get_categories(array(
'child_of' => $cat_id,
'hide_empty' => 0
));
// 筛选条件数组
$args = array(
'post_type' => 'post',
'cat' => $sub_cats[0]->term_id, // 默认选择第一个子分类
);
// 根据条件获取文章
$query = new WP_Query($args);
// 如果有文章,显示文章列表
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// 显示文章标题、链接等
the_title();
// ...
}
// 重置文章查询
wp_reset_postdata();
}
这段代码首先获取当前分类目录的ID,然后获取其子分类目录的ID集合,并设置文章查询参数。如果查询到文章,则循环显示文章标题和内容。最后,代码重置了文章查询,以防止影响后续的文章查询。
使用方法:
要使用多条件筛选功能在WordPress中,您通常会创建一个表单让用户输入筛选条件,然后基于这些条件来修改WordPress的主查询。以下是一个详细的步骤说明:
- 创建筛选表单
首先,您需要在页面模板中或通过使用页面构建器来创建一个筛选表单。表单应包含用于选择分类、标签或其他筛选条件的字段。
例如,在WordPress的页面模板中,您可以使用HTML和PHP来创建简单的筛选表单:
<form method="get" action="<?php echo home_url(); ?>">
<label for="cat">选择分类:</label>
<?php
$categories = get_categories();
echo "<select name='cat' id='cat'>";
echo "<option value=''>所有分类</option>";
foreach ($categories as $cat) {
echo "<option value='" . $cat->term_id . "'>" . $cat->name . "</option>";
}
echo "</select>";
// 类似地,您可以添加其他筛选条件,如标签、日期范围等
echo "<input type='submit' value='筛选'>";
?>
</form>
- 使用pre_get_posts钩子修改查询
接下来,您需要在主题的functions.php文件中添加一个使用pre_get_posts钩子的函数,以便在查询数据库之前修改查询参数。
function custom_category_filter($query) {
if (!is_admin() && $query->is_main_query() && (is_archive() || is_search())) {
// 获取表单提交的参数
$cat = isset($_GET['cat']) ? intval($_GET['cat']) : 0;
// 添加其他筛选条件
// $tag_id = isset($_GET['tag']) ? intval($_GET['tag']) : 0;
// 如果设置了分类参数,修改查询
if ($cat) {
$query->set('cat', $cat);
}
// 类似地,您可以添加其他筛选条件
// if ($tag_id) {
// $query->set('tag_id', $tag_id);
// }
}
}
add_filter('pre_get_posts', 'custom_category_filter');
- 显示筛选结果
一旦用户提交了筛选表单,WordPress将使用修改后的查询参数来检索文章,并在页面上显示结果。通常,这将在WordPress的主题文件(如archive.php、category.php或search.php)中自动处理。 - 注意事项
确保您的表单的action属性指向正确的URL。在上面的示例中,我使用了home_url()函数来生成网站的主URL。
如果您想根据自定义字段进行筛选,您可能需要使用meta_query参数来构建更复杂的查询。
始终验证和清理用户输入的数据,以防止潜在的安全风险,如SQL注入。
测试您的筛选功能以确保它按预期工作,并检查它是否在所有相关页面上按预期显示。