web-dev-qa-db-ja.com

カスタム投稿をタグとカスタムフィールドでフィルタリングする方法

私は、ユーザーが次の基準で今後のイベントをフィルタリングできるようにしたいクライアントのためのサイトを計画しています。

Typeすなわちコメディ、演劇、音楽など.

Date毎日または週末

期間毎日または半日

カスタム投稿についてもっと詳しく調べたいので、 'Events'(非階層型)のカスタム投稿タイプを設定し、新しい投稿を作成するときに、タイプ、日付、期間のカスタムフィールドを追加します。

私が持っている質問はどのように私がquery_posts()を使用するであろうかということです:

  1. 最も早い(つまり、次に発生するイベント)が最初に表示され、後に続くイベントが最後に表示されるように、イベントを一覧表示しますか?
  2. multiple meta値(Type、Date、Duration)で絞り込む

カスタムフィールドの値に基づいて、フォームのドロップダウンリストに一連のオプションを作成する必要があると思いますか。

私は以前にクライアント用のイベントのリストを作成しましたが、フィルタリングの可能性はありません。私はこのquery_posts()コードを使用してカスタム投稿を取得し、ものを注文しました。

// List the events by custom field 'Date':
$todaysDate = date('Y/m/d'); // set todays date to check against custom field

// query posts
query_posts('post_type=Event&meta_key=Date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC');

しかし、このコードを複数のカスタムフィールドでフィルタリングするように変更する方法がわかりません。

ありがとう

5
Osu

カスタム分類法を使用してquery_postsをはるかに簡単にすることができます。それによって、タイプ、期間のカスタム分類法を作成することを意味します。

add_action('init','register_event_tax');

function register_event_tax(){
register_taxonomy('even_type',array('events'), array(
    'hierarchical' => false,
    'labels' => 'type',
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'type' ),
  ));

register_taxonomy('even_duration',array('events'), array(
    'hierarchical' => false,
    'labels' => 'type',
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'duration' ),
  ));
}

それからあなたはこのような投稿を問い合わせることができます:

query_posts('post_type=Event&duration=DAILY&type=COMEDY&meta_key=Date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC');

また、デュレーションとタイプを変更して、必要なタイプやデュレーションをフィルタリングすることもできます。

お役に立てれば。

3
Bainternet