Я хотел бы создать форму расширенного поиска для определенного пользовательского типа сообщения, имение фильтров для пользовательского сообщения вводит пользовательские поля, пользовательский taxonomies, и для отдельного пользовательского сообщения вводит свойства (поля и taxonomies), который будет ссылками на первый тип сообщения с помощью пользовательского поля отношений.
Я недавно начался с пользовательскими типами сообщения WPs, полями и taxonomies, я люблю его до сих пор, но сделать лучший из него я хотел бы смочь искать его правильно. Я должен сделать это вручную? Если так, как?
PS. Если это имеет значение, я использую плагины: Усовершенствованные Пользовательские Поля и Пользовательский Тип Сообщения UI.
Ниже я копировал пример того, как фильтрация посмотрела бы и как она могла бы коснуться типов сообщения выше.
Попробуйте плагин Средства выбора Таксономии вместе с Relevanssi. Уничтожающая комбинация.
http://www.squidoo.com/taxonomy-picker-wordpress-plugin http://wordpress.org/extend/plugins/relevanssi/
Смотрите на плагин Relevanssi, он мог бы сделать то, что Вы ищете: http://wordpress.org/extend/plugins/relevanssi/
Я думаю что-то вроде этого, что Вы лучше всего записали бы сами.
Смотрите на: http://www.catalysthomes.co.uk/homes-for-sale/
Свойства загружаются в CPT, и у меня есть свой собственный поиск на боковой панели. Из того поиска его поиск многих вещей, таких как taxonomies, пользовательские поля и упорядочивание ценой даты и т.д.
Таким образом, как я достигаю этого? Я отправляю форму шаблону страницы, и оттуда я имею дело с данными сообщения и создаю новый WP_query на основе критериев поиска. Я использую сессии для хранения поисковых переменных так, чтобы я мог нумеровать страницы результаты.
WP_Query очень мощен. Смотрите: http://codex.wordpress.org/Class_Reference/WP_Query
Там можно использовать meta_query
запрашивать несколько пользовательских полей и использования tax_query
для запросов taxonomies плюс существует больше. Ниже то, как мой создается для давания Вам общее представление.
Шаблонный файл:
<?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 для показа выборок сообщения и информации.
Если кто-либо испытывает затруднения при реализации решения Brady выше (как я сделал), вот подсказка: кажется, что WordPress имеет некоторые проблемы с передающими данными сессии, таким образом, необходимо будет, вероятно, сделать что-то дополнительное, чтобы заставить его работать правильно. Вопросы обсуждаются здесь
В functions.php:
function init_sessions() {
if (!session_id()) {
session_start();
}
}
add_action('init', 'init_sessions');
В Вашем шаблоне:
/**
* Enable sessions
*/
if (!session_id())
session_start();
Для меня устанавливающий "Простую Сеансовую поддержку Peter Wooster" плагин добился цели.