Zaawansowany formularz wyszukiwania z filtrami niestandardowych systematyk i pól niestandardowych

30

Chciałbym zbudować zaawansowany formularz wyszukiwania dla konkretnego niestandardowego typu postu, zawierający filtry dla niestandardowych pól niestandardowych typów, taksonomii niestandardowych i dla osobnych właściwości niestandardowych typów wpisów (pól i taksonomii), które będą linkami do pierwszego typ wpisu za pomocą niestandardowego pola relacji.

Niedawno zacząłem od niestandardowych typów postów, pól i systematyki WP, do tej pory uwielbiam to, ale aby jak najlepiej to zrobić, chciałbym móc go poprawnie przeszukać. Czy muszę to zrobić ręcznie? Jeśli tak to jak?

PS. Jeśli to ważne, używam wtyczek: Advanced Custom Fields i Custom Post Type UI .

Poniżej przedstawiłem przykładowy wygląd filtrowania i jego związek z powyższymi typami postów.

wordpress niestandardowy formularz wyszukiwania filtrowany według niestandardowych pól i niestandardowych systematyk

patena
źródło
Jeśli ktoś ma trudności z wdrożeniem powyższego rozwiązania Brady'ego (tak jak ja), oto wskazówka: Wygląda na to, że Wordpress ma pewne problemy z przekazywaniem danych sesji, więc prawdopodobnie będziesz musiał zrobić coś dodatkowego, aby działało poprawnie. Zagadnienia zostały omówione tutaj: frank-verhoeven.com/using-session-in-wordpress Dla mnie instalacja wtyczki Petera Woostera „Simple Session Support” załatwiła sprawę . Link do wtyczki znajduje się w sekcji komentarzy w poście.
SteveR,

Odpowiedzi:

16

Myślę, że coś takiego najlepiej napisałbyś sam.

Spójrz na: http://www.catalysthomes.co.uk/homes-for-sale/

Właściwości są ładowane do CPT i mam własne wyszukiwanie na pasku bocznym. Z tego wyszukiwania przeszukuje szereg rzeczy, takich jak taksonomie, pola niestandardowe i porządkowanie według ceny według daty itp.

Jak to osiągnąć? Przesyłam formularz do szablonu strony, a następnie zajmuję się danymi postu i tworzę nowe WP_query na podstawie kryteriów wyszukiwania. Używam sesji do przechowywania zmiennych wyszukiwania, dzięki czemu mogę paginować wyniki.

WP_Query jest bardzo potężny. Spójrz: http://codex.wordpress.org/Class_Reference/WP_Query

Tam możesz użyć meta_querydo zapytania do wielu niestandardowych pól i użyć tax_querydo zapytania o taksonomie, a ponadto jest więcej. Poniżej przedstawiamy, jak zbudowano mój, aby dać ci pomysł.

Plik szablonu:

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

Surowe wyniki

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

Wyniki wyszukiwania

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

Układ listy Po prostu standardowa pętla WP wyświetlająca fragmenty postów i informacje.

Brady
źródło
Cześć Brady, Thx za ten przykład. Czy mogę, jeśli to możliwe, poprosić o udostępnienie formularza? Pod jakim adresem URL go przesyłasz?
salocin
@salocin - Informacje te można uzyskać, patrząc na źródło strony w podanym adresie URL w odpowiedzi
Brady
dzięki Brady, więc URL szablonu strony?
salocin
Formularz znajduje się na katalizatorach.co.uk. Możesz zobaczyć źródło i zobaczyć, jak działa formularz
Brady
Czy sprawdzasz, czy niestandardowe taksonomie zawierają posty jako pola niestandardowe? Jak dokładnie wypełniasz formularz wyszukiwania? @Brady dzięki
Phil Hudson
2

Wypróbuj wtyczkę Taxonomy Picker razem z Relevanssi. Kombinacja zabójców.

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

Sześciokąt
źródło
nie bierze to pod uwagę relacji pocztowych, ponieważ jest to trudna część mojego problemu. O wiele łatwiej jest filtrować posty według taksonomii, muszę je filtrować, kupując taksonomię (lub pole niestandardowe) powiązanego postu.
pax
0

Spójrz na wtyczkę Relevanssi, może zrobić to, czego szukasz: http://wordpress.org/extend/plugins/relevanssi/

Jens Wedin
źródło
Nie pasuje do potrzebnego mi podejścia (z konkretnymi filtrami), ale jest to bardzo interesująca wtyczka, wygląda na świetny zamiennik domyślnej funkcji wyszukiwania, bardzo dziękuję za jej wskazanie.
pax
0

Jeśli ktoś ma trudności z implementacją powyższego rozwiązania Brady'ego (tak jak ja), oto wskazówka: Wygląda na to, że WordPress ma pewne problemy z przekazywaniem danych sesji, więc prawdopodobnie będziesz musiał zrobić coś dodatkowego, aby działało poprawnie. Zagadnienia zostały omówione tutaj

W functions.php:

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

W twoim szablonie:

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

Zainstalowanie wtyczki Petera Woostera „ Simple Session Support ” załatwiło sprawę.

SteveR
źródło
1
Hej Stefan. Dziękujemy za opublikowanie pierwszej odpowiedzi tutaj. Cieszę się, że jesteś w WPSE. Do przyszłego użytku odpowiedzi nie powinny się całkowicie przestawiać na zewnętrznym łączu. Jeśli link jest wyłączony, twoja odpowiedź staje się łagodna. Czy zaktualizowałbyś swoją odpowiedź kilkoma przykładowymi fragmentami kodu?
Brian Fegter,