web-dev-qa-db-ja.com

分類用語でカスタム投稿をフィルタリングするためのフォームを使用する正しい方法は?

これはこの投稿の続きです。

フォームを作成し、ドロップダウンとして表示される正しい分類法の用語を取得することができましたが、私は自分のフォームでどのようなアクションを使用するべきか、また結果ページで同じフォームで選択したオプションを思い出すことができますか

これは私がこれまでに書いたコードで、query_posts()を設定して、分類の用語 'type'、 'period'および 'duration'をユーザーが選択したものに設定したカスタム投稿 'ftevent'を取得します。

Pastieリンク

そして、これは各ドロップダウンで選択されたオプションを呼び戻そうとするそのコードで見ることができるでしょう関数osu_list_terms()です:

function osu_list_terms($osu_tax, $osu_recall) {
    // list terms in fttype taxonomy
    $taxonomy = $osu_tax;
    $tax_terms = get_terms($taxonomy);
    foreach ($tax_terms as $tax_term) {
        echo '<option' . $osu_recall . '>' . $tax_term->name . '</option>';
    }
}

今、これは進行中の作業です、それで私が直面することになる他のいくつかの問題があると確信しています(カスタムフィールド 'StartEventDate'によるカスタム投稿の順序付けなど)、しかしこの時点で、私はWordpressがこのフォームのようなものでどのように機能するかを考え出します。

私は慣れている

<?php echo $_SERVER['PHP_SELF']; ?>

フォームが同じページに送信されるようにフォーム用。私はこれで同じことができることを望んでいたが、WordpressはこのようなURLにリダイレクトし、私がこのフォームを挿入した現在のページテンプレートの代わりにarchive.phpテンプレートを使う:

/?fttype=Group+walks&ftperiod=Weekday&ftduration=Half-day&showfilter=true

これを行うための「正しい」方法はありますか?検索結果用のテンプレートのスタイルを設定する方法と、アーカイブページを使用して結果を表示する方法(タグクラウドの結果でも使用される方法)について少し混乱しています。

あなたが提供できるヒントはありますか?

ありがとう、

おす

1
Osu

action属性を空のままにすると、フォームは現在のURLにポストバックします。

ただし、method属性がgetの場合、フォームは現在のURL - 現在のクエリ文字列にポストバックされます。

現在のクエリ文字列を保持したい場合は、隠し入力を使用して現在のパラメータを複製できます。

そしてPHP_SELFを決して信頼しない

1
TheDeadMedic