it-swarm.com.de

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

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 der benutzerdefinierten Beitragstypen (Felder und Taxonomien) enthält, die Links zu den ersten enthalten Beitragstyp unter Verwendung 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 es manuell machen? Wenn das so ist, wie?

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

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

wordpress custom search form filtered by custom fields and custom taxonomies

30
pax

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, beispielsweise nach Taxonomien, benutzerdefinierten Feldern und nach dem Datum, dem 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 mit meta_query mehrere benutzerdefinierte Felder abfragen und mit tax_query 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"); ?>

Rohdaten

<?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 WP Standardschleife zum Anzeigen von Post-Ausschnitten und Informationen.

16
Brady

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

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

2
Hexagon

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

0
Jens Wedin

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 besprochen

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 Plugin " Simple Session Support " den Trick gemacht.

0
SteveR