Erweitertes Suchformular mit Filtern für benutzerdefinierte Taxonomien und benutzerdefinierte Felder

30

Ich möchte ein Formular für die erweiterte Suche für einen bestimmten benutzerdefinierten Beitragstyp erstellen, das Filter für die benutzerdefinierten Felder und Taxonomien der benutzerdefinierten Beitragstypen sowie für separate Eigenschaften für benutzerdefinierte Beitragstypen (Felder und Taxonomien) enthält, die Links zu den ersten enthalten Beitragstyp mithilfe eines benutzerdefinierten Beziehungsfelds.

Ich habe vor kurzem mit benutzerdefinierten Beitragstypen, -feldern und -taxonomien in WPs begonnen. Ich liebe es bisher, aber um das Beste daraus zu machen, möchte ich in der Lage sein, es richtig zu durchsuchen. Muss ich das manuell machen? Wenn das so ist, wie?

PS. Wenn es darauf ankommt, verwende ich die Plugins: Erweiterte benutzerdefinierte Felder und Benutzeroberfläche für benutzerdefinierten Beitragstyp .

Unten habe ich ein Beispiel vorgestellt, wie die Filterung aussehen würde und wie sie sich auf die obigen Beitragstypen beziehen könnte.

Benutzerdefiniertes WordPress-Suchformular, gefiltert nach benutzerdefinierten Feldern und Taxonomien

pax
quelle
Wenn jemand Schwierigkeiten hat, Bradys obige Lösung zu implementieren (wie ich es getan habe), ist hier ein Hinweis: Es scheint, dass Wordpress einige Probleme mit der Übergabe von Sitzungsdaten hat, so dass Sie wahrscheinlich etwas extra tun müssen, damit es richtig funktioniert. Die Probleme werden hier besprochen: frank-verhoeven.com/using-session-in-wordpress Für mich hat die Installation des Plugins "Simple Session Support" von Peter Wooster den Trick getan. Es gibt einen Link zum Plugin im Kommentarbereich des Beitrags.
SteveR

Antworten:

16

Ich denke so etwas schreibst du am besten selber.

Werfen Sie einen Blick auf: http://www.catalysthomes.co.uk/homes-for-sale/

Eigenschaften werden in ein CPT geladen und ich habe meine eigene benutzerdefinierte Suche in der Seitenleiste. Bei dieser Suche wird nach einer Reihe von Dingen gesucht, z. B. nach Taxonomien, benutzerdefinierten Feldern und nach Datum, Preis usw.

Wie erreiche ich das? Ich reiche das Formular bei einer Seitenvorlage ein und beschäftige mich von dort aus mit den Post-Daten und erstelle eine neue WP_query basierend auf den Suchkriterien. Ich verwende Sitzungen, um die Suchvariablen zu speichern, damit ich die Ergebnisse paginieren kann.

WP_Query ist sehr mächtig. Schauen Sie sich das an: http://codex.wordpress.org/Class_Reference/WP_Query

Dort können Sie meta_querymehrere benutzerdefinierte Felder tax_queryabfragen und Ihre Taxonomien abfragen. Außerdem gibt es noch mehr. Nachfolgend sehen Sie, wie meiner aufgebaut ist, um Ihnen eine Idee zu geben.

Vorlagendatei:

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

Rohe Ergebnisse

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

Suchergebnisse

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

Listenlayout Nur eine Standard-WP-Schleife zum Anzeigen von Post-Ausschnitten und Informationen.

Brady
quelle
Hallo Brady, Danke für dieses Beispiel. Könnte ich Sie bitten, wenn möglich, das Formular zu teilen? An welche URL senden Sie sie darin?
Salocin
@salocin - Diese Informationen können durch einen Blick auf die Quelle der Seite auf der angegebenen URL in Antwort erhalten werden
Brady
thx Brady, also url der Seitenvorlage?
Salocin
Das Formular ist auf catalysthomes.co.uk. Sie können den Quellcode anzeigen und sehen, wie das Formular funktioniert
Brady
Überprüfen Sie, ob die benutzerdefinierten Taxonomien Beiträge als benutzerdefiniertes Feld enthalten. Wie genau füllen Sie das Suchformular aus? @ Brady danke
Phil Hudson
2

Probieren Sie das Taxonomy Picker-Plugin zusammen mit Relevanssi aus. Mörder Kombination.

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

Hexagon
quelle
Dies berücksichtigt nicht die Post-Beziehungen, da dies der schwierige Teil meines Problems ist. Es ist viel einfacher, Posts nach Taxonomie zu filtern. Ich muss sie filtern, um die Taxonomie (oder das benutzerdefinierte Feld) eines verwandten Posts zu ermitteln.
Pax
0

Schauen Sie sich das Relevanssi-Plugin an, es könnte das tun, wonach Sie suchen: http://wordpress.org/extend/plugins/relevanssi/

Jens Wedin
quelle
Es passt nicht zu dem Ansatz, den ich benötige (mit spezifischen Filtern), aber es ist ein sehr interessantes Plugin, es sieht aus wie ein großartiger Ersatz für die Standardsuchfunktion, vielen Dank für den Hinweis.
Pax
0

Wenn jemand Schwierigkeiten hat, Bradys obige Lösung zu implementieren (wie ich es getan habe), ist hier ein Hinweis: Es scheint, dass WordPress einige Probleme mit der Übergabe von Sitzungsdaten hat, so dass Sie wahrscheinlich etwas extra tun müssen, damit es richtig funktioniert. Die Themen werden hier diskutiert

In functions.php:

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

In Ihrer Vorlage:

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

Für mich hat die Installation von Peter Woosters " Simple Session Support " -Plugin den Trick getan.

SteveR
quelle
1
Hallo Steve. Vielen Dank für Ihre erste Antwort hier. Freut mich, Sie bei WPSE begrüßen zu dürfen. Zum späteren Nachschlagen sollten Antworten nicht vollständig auf einen externen Link verlinken. Wenn der Link deaktiviert ist, wird Ihre Antwort harmlos. Würde es Ihnen etwas ausmachen, Ihre Antwort mit ein paar beispielhaften Codefragmenten zu aktualisieren?
Brian Fegter