Formulaire de recherche avancée avec filtres pour les taxonomies personnalisées et les champs personnalisés

28

Je souhaite créer un formulaire de recherche avancée pour un type de publication personnalisé spécifique, avec des filtres pour les champs personnalisés des types de publication personnalisés, les taxonomies personnalisées, ainsi que pour des propriétés de types de publication personnalisées distinctes (champs et taxonomies), qui seront des liens. au premier type de message à l'aide d'un champ de relation personnalisé.

J'ai récemment commencé avec les types d'articles, les champs et les taxonomies personnalisés de WP, j'adore ça, mais pour en tirer le meilleur parti, j'aimerais pouvoir le rechercher correctement. Dois-je le faire manuellement? Si oui, comment?

PS. Si cela compte, j'utilise les plugins suivants: Champs personnalisés avancés et UI du type de message personnalisé .

Ci-dessous, j'ai simulé un exemple de l'apparence du filtrage et de son lien éventuel avec les types de publication ci-dessus.

    
posée pax 09.01.2012 - 17:23

4 réponses

16

Je pense que quelque chose comme ça vous feriez mieux d'écrire vous-même.

Jetez un coup d'œil à: enlace

Les propriétés sont chargées dans un CPT et j'ai ma propre recherche personnalisée dans la barre latérale. De cette recherche, elle recherche un certain nombre de choses telles que les taxonomies, les champs personnalisés et le classement par date, etc.

Alors, comment puis-je y parvenir? Je soumets le formulaire à un modèle de page. À partir de là, je traite les données de publication et crée un nouveau WP_query basé sur les critères de recherche. J'utilise des sessions pour stocker les variables de recherche afin de pouvoir paginer les résultats.

WP_Query est très puissant. Jetez un coup d'œil sur: enlace

Vous pouvez utiliser meta_query pour interroger plusieurs champs personnalisés et tax_query pour interroger vos taxonomies, et bien plus encore. Vous trouverez ci-dessous comment le mien est construit pour vous donner une idée.

Fichier de modèle:

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

Résultats bruts

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

Résultats de la recherche

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

Mise en forme de la liste Juste une boucle WP standard pour afficher des extraits de messages et des informations.

    
réponse donnée Brady 10.02.2012 - 15:41
2

Essayez le plugin Taxonomy Picker en même temps avec Relevanssi. Combinaison tueur.

enlace http://wordpress.org/extend/plugins/relevanssi/

    
réponse donnée Hexagon 11.01.2012 - 09:54
0

Examinez le plug-in Relevanssi, il pourrait faire ce que vous recherchez: enlace

    
réponse donnée Jens Wedin 10.01.2012 - 07:26
0

Si quelqu'un a du mal à mettre en œuvre la solution de Brady ci-dessus (comme je l'ai fait), voici un indice: il semble que WordPress rencontre des difficultés pour transmettre les données de session; vous devrez donc probablement faire un peu plus pour le faire fonctionner correctement. Ces problèmes sont discutés ici

.

Dans functions.php:

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

Dans votre modèle:

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

Pour moi, l’installation du plug-in " Simple Session Support " de Peter Wooster a fait l’essentiel.

    
réponse donnée SteveR 15.09.2012 - 00:43

Lire d'autres questions sur les étiquettes