Özel taksonomiler ve özel alanlar için filtreler içeren gelişmiş arama formu


30

Özel gönderi türleri için özel alanlar, özel taksonomiler ve birinci bağlantılara bağlanacak özel yazı tipleri özellikleri (alanlar ve taksonomiler) için filtreler içeren belirli bir özel yazı türü için gelişmiş bir arama formu oluşturmak istiyorum. Özel bir ilişki alanı kullanarak yazı tipi.

Geçenlerde WP'lerin özel posta tipleri, alanları ve taksonomileri ile başladım, şimdiye kadar çok seviyorum ama en iyisini yapmak için düzgün bir şekilde arama yapabilmek istiyorum. Manuel olarak yapmam gerekir mi? Öyleyse nasıl?

PS. Önemli olursa, eklentileri kullanıyorum: Gelişmiş Özel Alanlar ve Özel Posta Türü Kullanıcı Arabirimi .

Aşağıda, filtrelemenin nasıl görüneceğine ve yukarıdaki yazı tipleriyle nasıl ilişkili olabileceğine dair bir örnek alay ettim.

Özel alanlara ve özel taksonomilere göre filtrelenmiş wordpress özel arama formu


Herkes Brady'nin çözümünü yukarıdaki gibi uygulamakta zorluk çekiyorsa (benim yaptığım gibi) işte bir ipucu: Görünen o ki, Wordpress'in oturum verilerini aktarmada bazı problemleri olduğu için muhtemelen düzgün çalışması için fazladan bir şeyler yapmanız gerekecektir. Sorunlar burada tartışılıyor: frank-verhoeven.com/using-session-in-wordpress Benim için Peter Wooster'ın "Basit Oturum Desteği" eklentisini yükleyerek hile yaptım. Gönderinin yorumlar bölümünde eklentiye bir bağlantı var.
SteveR,

Yanıtlar:


16

Bence böyle bir şey en iyi yazıyor olmalısın.

Bir göz atın: http://www.catalysthomes.co.uk/homes-for-sale/

Özellikler bir CPT'ye yüklenir ve kenar çubuğunda kendi özel aramam var. Bu araştırmayı taksonomiler, özel alanlar ve tarihe göre fiyatlandırma gibi bir çok şeyi araştırıyor.

Peki bunu nasıl başarabilirim? Formu bir sayfa şablonuna gönderiyorum ve oradan posta verilerini ele alıyorum ve arama kriterlerine göre yeni bir WP_query oluşturuyorum. Arama değişkenlerini saklamak için oturumları kullanırım, böylece sonuçları sayfalandırırım.

WP_Query çok güçlü. Bir göz atın: http://codex.wordpress.org/Class_Reference/WP_Query

Orada meta_querybirden fazla özel alanı tax_querysorgulamak için kullanabilirsiniz ve taksonomilerinizi sorgulamak için kullanabilirsiniz , ayrıca dahası da var. Maden, size bir fikir vermek için nasıl inşa edilmiştir.

Şablon Dosyası:

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

Ham Sonuçlar

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

arama sonuçları

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

Liste Düzeni Mesaj alıntılarını ve bilgilerini göstermek için sadece standart bir WP döngüsü.


Merhaba Brady, bu örnek için Thx. Mümkünse formu paylaşmanızı isteyebilir miyim? İçinde hangi URL’yi gönderiyorsunuz?
Salocin

@ salocin - Bu bilgi verilen URL'deki sayfanın kaynağına cevap olarak bakarak elde edilebilir
Brady

thx Brady, yani sayfa şablonunun URL'si?
Salocin

Form, katalizatörlerde. Kaynağı görüntüleyebilir ve formun nasıl çalıştığını görebilirsiniz
Brady

Özel taksonomilerin yanlarında özel alan olarak yayınlar olup olmadığını kontrol ediyor musunuz? Arama formunu tam olarak nasıl dolduruyorsunuz? @ Brady teşekkürler
Phil Hudson

2

Relevanssi ile birlikte Taksonomi Seçici eklentisini deneyin . Katil kombinasyonu.

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


Bu, post post ilişkilerini hesaba katmaz, problemimin zor kısmı. Mesajları taksonomiye göre filtrelemek çok daha kolay, ilgili bir yazının taksonomisini (veya özel alanını) satın almaları için filtrelemeye ihtiyacım var.
pax

0

Relevanssi eklentisine bir göz atın, aradığınızı yapabilir: http://wordpress.org/extend/plugins/relevanssi/


İhtiyacım olan yaklaşıma uymuyor (belirli filtrelerle), ama çok ilginç bir eklenti, varsayılan arama işlevi için harika bir alternatif gibi görünüyor, gösterdiğiniz için çok teşekkürler.
pax

0

Herkes Brady'nin çözümünü yukarıdaki gibi uygulamakta zorluk çekiyorsa (benim yaptığım gibi) işte bir ipucu: Görünüşe göre WordPress oturum verilerini aktarmada bazı problemler yaşıyor, bu yüzden muhtemelen düzgün çalışması için fazladan bir şeyler yapmanız gerekecek. Sorunlar burada tartışılıyor

Functions.php içinde:

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

Şablonunuzda:

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

Benim için Peter Wooster'ın " Basit Oturum Desteği " eklentisini yüklemek hile yaptı.


1
Merhaba Steve. Buraya ilk cevabınızı gönderdiğiniz için teşekkür ederiz. WPSE'de olmana sevindim. Gelecekte başvurmak için, cevaplar tamamen harici bir bağlantı üzerinde dönmemelidir. Bağlantı devre dışı bırakılırsa, cevabınız iyi huylu olur. Cevabınızı birkaç örnek ilgili kod parçacığıyla güncellemenizi ister misiniz?
Brian Fegter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.