問題描述

我想為特定的自定義帖子型別構建高階搜尋表單,具有自定義帖子型別自定義欄位,自定義分類法以及單獨的自定義帖子型別屬性 (欄位和分類) 的過濾器,這些屬性將連結到第一個後期型別使用自定義關係欄位。

我最近開始使用 WPs 自定義帖子型別,欄位和分類法,我很喜歡它,但是為了充分利用我想要正確搜尋它。我需要手動做嗎?如果是這樣,怎麼辦?

PS 。如果重要,我正在使用外掛:Advanced Custom FieldsCustom Post Type UI

下面我嘲弄了一個例子,說明過濾如何看待,以及它可能與上面的帖子型別有關。

最佳解決方案

我想這樣的事情你最好寫自己。

看一看: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 迴圈來顯示帖子摘錄和資訊。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。