Formulir pencarian lanjutan dengan filter untuk taksonomi khusus dan bidang khusus

30

Saya ingin membuat formulir pencarian lanjutan untuk jenis posting kustom tertentu, memiliki filter untuk bidang kustom jenis posting kustom, taksonomi khusus, dan untuk properti tipe posting kustom terpisah (bidang dan taksonomi) yang akan menjadi tautan ke yang pertama jenis posting menggunakan bidang hubungan khusus.

Saya baru-baru ini mulai dengan WP, jenis posting kustom, bidang, dan taksonomi, saya sangat menyukainya tetapi untuk membuat yang terbaik dari itu saya ingin dapat mencarinya dengan benar. Apakah saya perlu melakukannya secara manual? Jika ya, bagaimana caranya?

PS. Jika itu penting, saya menggunakan plugins: Advanced Custom Fields dan Custom Post Type UI .

Di bawah ini saya telah membuat contoh bagaimana pemfilteran akan terlihat dan bagaimana hubungannya dengan jenis posting di atas.

formulir pencarian kustom wordpress difilter oleh bidang kustom dan taksonomi kustom

pax
sumber
Jika ada yang mengalami kesulitan menerapkan solusi Brady di atas (seperti yang saya lakukan) di sini adalah petunjuk: Tampaknya Wordpress memiliki beberapa masalah dengan meneruskan data sesi sehingga Anda mungkin harus melakukan sesuatu ekstra untuk membuatnya berfungsi dengan benar. Masalahnya dibahas di sini: frank-verhoeven.com/using-session-in-wordpress Bagi saya menginstal plugin "Simple Session Support" Peter Wooster berhasil. Ada tautan ke plugin di bagian komentar pada pos.
SteveR

Jawaban:

16

Saya pikir sesuatu seperti ini Anda sebaiknya menulis sendiri.

Lihatlah: http://www.catalysthomes.co.uk/homes-for-sale/

Properti dimuat ke CPT dan saya punya pencarian sendiri di sidebar. Dari pencarian itu mencari beberapa hal seperti taksonomi, bidang khusus dan pemesanan berdasarkan harga tanggal dll.

Jadi, bagaimana saya mencapai ini? Saya mengirimkan formulir ke templat halaman dan dari sana saya berurusan dengan data posting dan membangun WP_query baru berdasarkan kriteria pencarian. Saya menggunakan sesi untuk menyimpan variabel pencarian sehingga saya bisa memberi peringkat hasil.

WP_Query sangat kuat. Lihatlah: http://codex.wordpress.org/Class_Reference/WP_Query

Di sana Anda dapat menggunakan meta_queryuntuk menanyakan beberapa bidang khusus dan menggunakan tax_queryuntuk menanyakan taksonomi Anda, plus ada lebih banyak. Di bawah ini adalah bagaimana saya dibangun untuk memberi Anda ide.

File Templat:

  <?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"); ?>

Hasil Mentah

<?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\"";
?>

Hasil Pencarian

<?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'
);
?>

List Layout Hanya loop WP standar untuk menampilkan kutipan dan info posting.

Brady
sumber
Hai Brady, Thx untuk contoh ini. Bisakah saya meminta Anda, jika mungkin, untuk membagikan formulir? Di dalamnya, URL apa yang Anda kirimkan?
salocin
@salocin - Informasi itu dapat diperoleh dengan melihat sumber halaman pada URL yang diberikan sebagai jawaban
Brady
thx Brady, jadi url dari templat halaman?
salocin
Formulirnya ada di catalytome.com. Anda dapat melihat sumber dan melihat bagaimana formulir berfungsi
Brady
Apakah Anda memeriksa untuk melihat apakah taksonomi kustom memiliki posting dengan mereka sebagai bidang khusus? Bagaimana tepatnya Anda mengisi formulir pencarian? @Brady, terima kasih
Phil Hudson
2

Coba plugin Taxonomy Picker bersama dengan Relevanssi. Kombinasi pembunuh.

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

Segi enam
sumber
ini tidak memperhitungkan hubungan pos akun, yang menjadi bagian sulit dari masalah saya. Ini cara yang lebih mudah untuk menyaring posting berdasarkan taksonomi, saya perlu memfilter mereka membeli taksonomi (atau bidang khusus) dari pos terkait.
pax
0

Lihatlah plugin Relevanssi, mungkin melakukan apa yang Anda cari: http://wordpress.org/extend/plugins/relevanssi/

Jens Wedin
sumber
Itu tidak sesuai dengan pendekatan yang saya butuhkan (dengan filter tertentu), tetapi ini adalah plugin yang sangat menarik, sepertinya pengganti yang bagus untuk fungsi pencarian default, terima kasih banyak untuk menunjukkannya.
pax
0

Jika ada yang mengalami kesulitan dalam mengimplementasikan solusi Brady di atas (seperti yang saya lakukan) di sini adalah petunjuk: Tampaknya WordPress memiliki beberapa masalah dengan mengirimkan data sesi sehingga Anda mungkin harus melakukan sesuatu yang ekstra untuk membuatnya berfungsi dengan baik. Masalahnya dibahas di sini

Dalam functions.php:

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

Dalam templat Anda:

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

Bagi saya menginstal plugin " Simple Session Support " Peter Wooster berhasil.

SteveR
sumber
1
Hai Steve. Terima kasih telah mengirimkan jawaban pertama Anda di sini. Senang memiliki Anda di WPSE. Untuk referensi di masa mendatang, jawaban tidak boleh diputar sepenuhnya pada tautan eksternal. Jika tautan dinonaktifkan, jawaban Anda menjadi jinak. Maukah Anda memperbarui jawaban Anda dengan beberapa cuplikan kode yang relevan?
Brian Fegter