wordpress通过自定义分类法实现文章多条件筛选功能

// 获取当前分类目录的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的主查询。以下是一个详细的步骤说明:

  1. 创建筛选表单
    首先,您需要在页面模板中或通过使用页面构建器来创建一个筛选表单。表单应包含用于选择分类、标签或其他筛选条件的字段。

例如,在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>
  1. 使用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');
  1. 显示筛选结果
    一旦用户提交了筛选表单,WordPress将使用修改后的查询参数来检索文章,并在页面上显示结果。通常,这将在WordPress的主题文件(如archive.php、category.php或search.php)中自动处理。
  2. 注意事项
    确保您的表单的action属性指向正确的URL。在上面的示例中,我使用了home_url()函数来生成网站的主URL。
    如果您想根据自定义字段进行筛选,您可能需要使用meta_query参数来构建更复杂的查询。
    始终验证和清理用户输入的数据,以防止潜在的安全风险,如SQL注入。
    测试您的筛选功能以确保它按预期工作,并检查它是否在所有相关页面上按预期显示。