web-dev-qa-db-ja.com

複数の分類法ドロップダウンを使用してカスタム投稿タイプをフィルタリングする

アクティビティというカスタム投稿タイプページに2つのドロップダウンボックスを作成しようとしています。 1つの分類カテゴリは活動グレードレベル用であり、もう1つは活動タイプ用です。私が今持っているものでは、ドロップボックスの1つを空のままにしておくと、検索は404ページに行きます。私はこの wordpressフォーラムのコードを使用しました そして、これが私の機能フォルダにあるものです。

function get_terms_dropdown_grade_level($taxonomies, $args){
        $myterms = get_terms($taxonomies, $args);
        $output ="<select name='activities_grade_level'>";
        $output .="<option value='#'>Select grade level</option>";
        foreach($myterms as $term){
                $root_url = get_bloginfo('url');
                $term_taxonomy=$term->taxonomy;
                $term_slug=$term->slug;
                $term_name =$term->name;
                $link = $term_slug;
                $output .="<option value='".$link."'>".$term_name."</option>";
        }
        $output .="</select>";
return $output;
}

function get_terms_dropdown_type($taxonomies, $args){
        $myterms = get_terms($taxonomies, $args);
        $output ="<select name='activities_type'>";
        $output .="<option value='#'>Select  activity type</option>";
        foreach($myterms as $term){
                $root_url = get_bloginfo('url');
                $term_taxonomy=$term->taxonomy;
                $term_slug=$term->slug;
                $term_name =$term->name;
                $link = $term_slug;
                $output .="<option value='".$link."'>".$term_name."</option>";
        }
        $output .="</select>";
return $output;
}

そしてこれが私が投稿タイプのアーカイブページに持っているものです:

    <h2>Filter by</h2>
    <form action="<?php bloginfo('url'); ?>" method="get">
    <div>
    <?php
    $taxonomies = array('activities_grade_level');
    $args = array('orderby'=>'name','hide_empty'=>false);
    $select = get_terms_dropdown_grade_level($taxonomies, $args);
    $select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
    echo $select;
    ?>
    <?php
    $taxonomies = array('activities_type');
    $args = array('orderby'=>'name','hide_empty'=>false);
    $select = get_terms_dropdown_type($taxonomies, $args);

    $select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
    echo $select;
    ?>
    <input type="submit" name="submit" value="filter" />
    </div>
    </form>

それが良い情報であるならば、私もURLを含めます。正しい検索につながる通常のURLは

[...] /?activity_grade_level =小学校&activity_type =エンジニアリング&送信=フィルタ

ドロップボックスの1つが空のURLは

...

正しいカテゴリにつながるURLは次のようになります。

[...]/activity_type/engineering /

または

[...]/activity_grade_level /中学校

このPHPとワードプレス初心者のための何か提案はありますか?

1
anita

そう、ここでは少し空っぽに見えますが、私は自分自身で問題を考え出しました。トリックは、$ output変数に空の値を入れることでした。

そう

$output .="<option value=''>Select taxonomy #1</option>"; 

ではない

$output .="<option value='#'>Select taxonomy #1</option>"; 

これで、2つのドロップダウンメニューを作成し、カスタム分類法を使用して投稿を除外することができます。

これをあなたの functions.php ファイルに貼り付けてください。

function get_terms_dropdown_grade_level($taxonomies, $args){
            $myterms = get_terms($taxonomies, $args);
            $output ="<select name='MYTAXONOMY#1'>"; //CHANGE ME!
            $output .="<option value=''>Select taxonomy #1</option>"; //CHANGE ME TO YOUR LIKING!
            foreach($myterms as $term){
                    $root_url = get_bloginfo('url');
                    $term_taxonomy=$term->taxonomy;
                    $term_slug=$term->slug;
                    $term_name =$term->name;
                    $link = $term_slug;
                    $output .="<option value='".$link."'>".$term_name."</option>";
            }
            $output .="</select>";
    return $output;
    }

    function get_terms_dropdown_type($taxonomies, $args){
            $myterms = get_terms($taxonomies, $args);
            $output ="<select name='MYTAXONOMY#2'>"; //CHANGE ME!
            $output .="<option value=''>Select taxonomy #2</option>"; //CHANGE ME TO YOUR LIKING!               foreach($myterms as $term){
                    $root_url = get_bloginfo('url');
                    $term_taxonomy=$term->taxonomy;
                    $term_slug=$term->slug;
                    $term_name =$term->name;
                    $link = $term_slug;
                    $output .="<option value='".$link."'>".$term_name."</option>";
            }
            $output .="</select>";
    return $output;
    }

これを ドロップダウンメニューを表示させたいページ に貼り付けます。 (私はarchive-activity.phpのような特別なアーカイブページに私のものを置きます。)

<h3>Filter by:</h3>
                    <form action="<?php bloginfo('url'); ?>" method="get">
                        <div>
                            <?php
                            $taxonomies = array('MYTAXONOMY#1'); //CHANGE ME!
                            $args = array('orderby'=>'name','hide_empty'=>false);
                            $select = get_terms_dropdown_grade_level($taxonomies, $args);
                            $select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
                            echo $select;
                            ?>
                            <?php
                            $taxonomies = array('MYTAXONOMY#2'); //CHANGE ME!
                            $args = array('orderby'=>'name','hide_empty'=>false);
                            $select = get_terms_dropdown_type($taxonomies, $args);

                            $select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
                            echo $select;
                            ?>
                            <input type="submit" name="submit" value="filter" /> <!--CHANGE VALUE TO YOUR LIKING!-->
                        </div>
                    </form>

乾杯! :)

1
anita