Форма розширеного пошуку з фільтрами для спеціальних таксономій та спеціальних полів


30

Я хотів би створити розширену форму пошуку для певного користувальницького типу публікації з фільтрами для спеціальних полів користувальницьких типів публікацій, спеціальних таксономій та для окремих спеціальних властивостей типів публікацій (полів та таксономій), які будуть посиланнями на перший тип публікації, використовуючи поле спеціальних відносин.

Нещодавно я почав із спеціальних типів публікацій, полів та таксономій WP, я люблю це поки що, але щоб зробити все найкраще, я хотів би мати можливість шукати його належним чином. Чи потрібно це робити вручну? Якщо так, то як?

PS. Якщо це має значення, я використовую плагіни: Розширені користувацькі поля та інтерфейс користувальницького типу .

Нижче я висміював приклад того, як виглядатиме фільтрування та як воно може стосуватися вищезгаданих типів публікацій.

Wordpress користувальницька форма пошуку, відфільтрована за користувацькими полями та спеціальними таксономіями


Якщо у когось виникають труднощі при застосуванні рішення Брейді вище (як я це зробив), ось підказка: Схоже, що у Wordpress є деякі проблеми з передачею даних сеансу, тому вам, мабуть, доведеться зробити щось додаткове, щоб воно нормально працювало. Питання обговорюються тут: frank-verhoeven.com/using-session-in-wordpress Для мене, встановивши плагін Пітера Вустера "Проста підтримка сеансу", зробив свою справу. У розділі коментарів до публікації є посилання на плагін.
SteveR

Відповіді:


16

Я думаю, що щось подібне вам було б найкраще написати самому.

Погляньте на сторінку : http://www.catalysthomes.co.uk/homes-for-sale/

Властивості завантажуються в CPT, і у мене є власний власний пошук на бічній панелі. З цього пошуку шукайте ряд речей, таких як таксономії, спеціальні поля та впорядкування за датою ціни тощо.

То як я цього досягти? Я надсилаю форму до шаблону сторінки, а звідти я маю справу з даними публікації та будую новий WP_query на основі критеріїв пошуку. Я використовую сеанси для зберігання змінних пошуку, щоб я міг пакутувати результати.

WP_Query дуже потужний. Погляньте: http://codex.wordpress.org/Class_Reference/WP_Query

Там ви можете використовувати meta_queryдля запиту декілька спеціальних полів і використовувати tax_queryдля запиту ваших таксономій, плюс є більше. Нижче описано, як будується моя, щоб дати вам уявлення.

Файл шаблону:

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

Сирі результати

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

Результати пошуку

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

Макет списку Просто стандартний цикл WP для показу витягів та інформації про публікацію.


Привіт Брейді, Thx для цього прикладу. Чи можу я попросити вас, якщо можливо, поділитися формою? У ній, до якої URL-адреси ви надсилаєте його?
салоцин

@salocin - Цю інформацію можна отримати, переглянувши джерело сторінки за вказаною URL-адресою у відповідь
Брейді

thx Брейді, так URL-адреса шаблону сторінки?
салоцин

Форма розміщена на katasthomes.co.uk. Ви можете переглянути джерело і подивитися, як працює форма
Брейді

Ви перевіряєте, чи є в користувацьких таксономіях публікації з ними як користувацьке поле? Як саме ви заповнюєте форму пошуку? @Brady спасибі
Філ Хадсон

2

Спробуйте плагін Taxonomy Picker разом з Relevanssi. Комбінація вбивць.

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


це не враховує поштові відносини, що є важкою частиною моєї проблеми. Це простіше фільтрувати пости за систематикою, мені потрібно відфільтрувати їх, придбавши таксономію (або спеціальне поле) пов’язаної публікації.
pax

0

Погляньте на плагін Relevanssi, він може зробити те, що ви шукаєте: http://wordpress.org/extend/plugins/relevanssi/


Він не відповідає підходу, який мені потрібен (з конкретними фільтрами), але це дуже цікавий плагін, він виглядає як чудова заміна функції пошуку за замовчуванням, дуже дякую, що вказав на нього.
pax

0

Якщо у когось виникають труднощі при застосуванні рішення Брейді вище (як я це зробив), ось підказка: Схоже, що у WordPress є деякі проблеми з передачею даних сеансу, тому вам, мабуть, доведеться зробити щось додаткове, щоб воно нормально працювало. Тут обговорюються питання

У function.php:

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

У вашому шаблоні:

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

Для мене встановлення модуля Пітера Вустера " Проста підтримка сесії " зробив свою справу.


1
Привіт Стів. Дякуємо, що опублікували тут свою першу відповідь. Радий мати вас на WPSE. Для подальшої довідки відповіді не повинні повністю спрямовуватися на зовнішнє посилання. Якщо посилання вимкнено, ваша відповідь стає доброякісною. Ви б заперечили оновити свою відповідь парою зразків відповідних фрагментів коду?
Брайан Фегтер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.