web-dev-qa-db-ja.com

カスタム分類法およびカスタムフィールド用のフィルタを含む詳細検索フォーム

カスタム投稿タイプ、カスタムフィールド、カスタム分類法、および最初のリンクへのリンクとなる個別のカスタム投稿タイププロパティ(フィールドおよび分類法)用のフィルタを使用して、特定のカスタム投稿タイプの詳細検索フォームを作成したいカスタムリレーションシップ項目を使用した投稿タイプ。

私は最近WPのカスタム投稿タイプ、フィールド、分類法から始めました。今のところそれが大好きですが、それを最大限に活用するために、適切に検索できるようにしたいと思います。手動で行う必要がありますか?もしそうなら、どうですか?

PS。それが問題であれば、私はプラグインを使用しています: 高度なカスタムフィールド および カスタム投稿タイプUI

以下に、フィルタリングの外観と上記の投稿タイプとの関連性の例をモックアップしました。

wordpress custom search form filtered by custom fields and custom taxonomies

30
pax

私はこのようなものはあなたがあなた自身を書くのが一番良いだろうと思います。

を見てみましょう: http://www.catalysthomes.co.uk/homes-for-sale/ /

プロパティはCPTに読み込まれ、サイドバーに自分のカスタム検索があります。その検索では、分類法、カスタムフィールド、日付順などの順序付けなど、多くのことを検索します。

では、どうすればこれを達成できますか。フォームをページテンプレートに送信し、そこから投稿データを処理し、検索条件に基づいて新しいWP_queryを作成します。結果をページ付けできるように、セッションを使用して検索変数を格納します。

WP_Queryは非常に強力です。見てみましょう: http://codex.wordpress.org/Class_Reference/WP_Query

そこで、meta_queryを使って複数のカスタムフィールドをクエリし、tax_queryを使って分類法をクエリすることができます。以下は、私があなたにアイデアを与えるためにどのように構築されているかです。

テンプレートファイル:

  <?php
  $temp = $wp_query;
  $wp_query = NULL;
  $args = array();
  ?>

  <?php include("functions/Homes-for-sale/propertyrawresults.php"); ?>
  <?php include("functions/Homes-for-sale/propertysearchresults.php"); ?>

  <?php
  $args['post_type'] = "homes-for-sale";
  $args['showposts'] = 10;
  $args['paged'] = $paged;
  $wp_query = new WP_Query($args);
  ?>

  <?php include("functions/Homes-for-sale/propertylistlayout.php"); ?>

生の結果

<?php
if($_POST['sortby']) {
    $_SESSION['prop_selectedsortby'] = $_POST['sortby'];
}

switch($_SESSION['prop_selectedsortby']) {
    case "name-asc": $args['order'] = "ASC"; $args['orderby'] = "title"; break;
    case "name-desc": $args['orderby'] = "title"; break;
    case "price-asc": $args['order'] = "ASC"; $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
    case "price-desc": $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
    case "date-asc": $args['order'] = "ASC"; break;
    default: /* No need to set arguments here as wp query defaults */ break;
}

$selectedsortby[$_SESSION['prop_selectedsortby']] = " selected=\"selected\"";
?>

検索結果

<?php
if( ! empty( $_SESSION['s_property_ptype'] ) ) {
    $args['meta_query'][] = array(
        'key' => 'chb_homes_for_sale_types_nbrs',
        'value' => $_SESSION['s_property_ptype']
    );
}

if( ! empty( $_SESSION['s_property_development'] ) ) {
    $args['meta_query'][] = array(
        'key' => 'chb_homes_for_sale_ofdevelopment',
        'value' => $_SESSION['s_property_development']
    );
}

if( isset( $_SESSION['s_property_area'] ) && 0 != $_SESSION['s_property_area'] ) {
    $args['tax_query'][] = array(
        'taxonomy' => 'areas',
        'field' => 'id',
        'terms' => array( (int) $_SESSION['s_property_area'] ),
    );
}

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bedrooms',
    'value' => $_SESSION['s_property_bedrooms_min'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bedrooms',
    'value' => $_SESSION['s_property_bedrooms_max'],
    'compare' => '<=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bathrooms',
    'value' => $_SESSION['s_property_bathrooms_min'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bathrooms',
    'value' => $_SESSION['s_property_bathrooms_max'],
    'compare' => '<=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_fmv',
    'value' => $_SESSION['s_property_min_price'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_fmv',
    'value' => $_SESSION['s_property_max_price'],
    'compare' => '<=',
    'type' => 'SIGNED'
);
?>

リストのレイアウト 投稿の抜粋と情報を表示するための標準のWPループ。

16
Brady

タクソノミーピッカープラグイン 一緒に Relevanssiを試してみてください。キラーの組み合わせ.

http://www.squidoo.com/taxonomy-picker-wordpress-plugin http://wordpress.org/extend/plugins/relevanssi/

2
Hexagon

Relevanssiプラグインを見てください、それはあなたが探しているものをするかもしれません: http://wordpress.org/extend/plugins/relevanssi/

0
Jens Wedin

誰かが上で(私がやったように)Bradyの解決策を実装するのに苦労しているなら、ここにヒントがあります:それはあなたがおそらくそれをきちんと動くようにするために何か特別なことをしなければならないでしょう。問題は ここで議論されている

Functions.phpで:

function init_sessions() {
  if (!session_id()) {
  session_start();
 }
}
add_action('init', 'init_sessions');

あなたのテンプレートで:

/**
* Enable sessions
*/
if (!session_id())
session_start();

私にとっては、Peter Woosterの " Simple Session Support "プラグインをインストールするとうまくいきます。

0
SteveR