0

ここで見ることができるカード データベースを作成しましたhttp://hearthable.com/cards。カスタム投稿タイプを介してワードプレスでこれを行いました。私は400以上のカードを持っています。また、4 つのカスタム投稿タイプ カテゴリ/タクソノミーがあります。

私のカスタム投稿タイプは「cards」という名前で、4 つのカスタム分類法は「cards-type」、「cards-rarity」、「cards-class」、「cards-race」です。

ユーザーがこれらのカテゴリの 1 つ、2 つ、または 3 つの横にあるチェックボックスをクリックして、選択内容に基づいてカードをフィルタリングできるフィルタ機能を追加したいと考えました。

いろいろ調べてみましたが、これについて何も見つけられなかったので、少し助けていただければ幸いです。ありがとうございました。

4

1 に答える 1

1

フィルターがどのように機能するかを示すために、簡単な例を作成しました。それは改善することができ、他の方法で行うことができます。

フォームを作成してページを設定する必要があります (私はハードコードしましたが、もっとうまくできます)

<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();

下手な英語でごめんなさい

于 2013-11-11T23:56:12.897 に答える