为 WordPress 类别创建过滤器


Create filters for wordpress categories

我创建了一个卡片数据库,你可以在 http://hearthable.com/cards 看到。我在wordpress中通过自定义帖子类型完成了此操作。我有超过400+张卡。我还有 4 个自定义帖子类型类别/分类法。

我的自定义帖子类型名为"卡片"

,4 种自定义分类法是"卡片类型"、"卡片稀有度"和"卡片类"、"卡片竞赛"。

我想添加一个过滤功能,我的用户可以单击其中一个、2 个或 3 个类别旁边的复选框,并根据他们的选择过滤卡片。

我一直在四处寻找,找不到任何关于此的内容,所以一点帮助将不胜感激。谢谢。

我做了一个简单的例子,只是为了向您展示过滤器是如何工作的。 它可以改进,也可以用其他方式完成。

你必须创建一个表单并设置一个页面(我已经硬编码了,你可以做得更好)

<form action="/sample-page/" method="post">
    <?php 
        wp_dropdown_categories( array(
        'show_option_all'    => 'All',
        'show_option_none'   => 'None',
        'show_count'         => 0,
        'hide_empty'         => 0, 
        'exclude'            => '',
        'echo'               => 1,
        'name'               => 'cards-type',
        'id'                 => '',
        'class'              => 'postform',
        'taxonomy'           => 'cards-type',
        'hide_if_empty'      => false,
    ) );
    wp_dropdown_categories( array(
        'show_option_all'    => 'All',
        'show_option_none'   => 'None',
        'show_count'         => 0,
        'hide_empty'         => 0, 
        'exclude'            => '',
        'echo'               => 1,
        'name'               => 'cards-rarity',
        'id'                 => '',
        'class'              => 'postform',
        'taxonomy'           => 'cards-rarity',
        'hide_if_empty'      => false,
    ) );
    ?>
    <button type="submit">Go</button>
</form>

在您设置的页面中,您必须获取数据并将其转换为数组以进行WP_Query

    $args = array(
        'post_type' => 'cards', 
    );
    $item = array();
    $list = array();
    if ( $_POST ) {
        foreach( $_POST as $key => $value ) {
            if( !empty($value) ) {
                $item['taxonomy'] = htmlspecialchars($key);
                $item['terms'] = htmlspecialchars($value);
                $item['field'] = 'id';
                $list[] = $item;
            }
            $cleanArray = array_merge(array('relation' => 'AND'), $list);
        }  
        $args['tax_query'] = $cleanArray;   
    }
    $loooop = new WP_Query( $args );

使用循环循环访问结果

if ( $loooop->have_posts() ) : while ( $loooop->have_posts() ) : $loooop->the_post();
    the_title();
endwhile;
wp_reset_postdata();

对不起,英语不好