______ ОБНОВЛЕНИЕ _______
Хотя я получаю все больше и больше голосов, и решение работает, но ответ Cybmeta на самом деле является хорошим ответом WordPress. Вы обязательно должны попробовать это.
Шаг 1
Начните с создания расширенной формы поиска, с помощью которой вы хотите, чтобы ваш пользователь взаимодействовал с веб-сайтом, и сохраните ее под именем (т.е. я сохранил ее как advanced-searchform.php- но не сохраняйте ее, searchform.phpтогда она заменит поисковую форму WordPress по умолчанию). ):
<form method="get" id="advanced-searchform" role="search" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<h3><?php _e( 'Advanced Search', 'textdomain' ); ?></h3>
<!-- PASSING THIS TO TRIGGER THE ADVANCED SEARCH RESULT PAGE FROM functions.php -->
<input type="hidden" name="search" value="advanced">
<label for="name" class=""><?php _e( 'Name: ', 'textdomain' ); ?></label><br>
<input type="text" value="" placeholder="<?php _e( 'Type the Car Name', 'textdomain' ); ?>" name="name" id="name" />
<label for="model" class=""><?php _e( 'Select a Model: ', 'textdomain' ); ?></label><br>
<select name="model" id="model">
<option value=""><?php _e( 'Select one...', 'textdomain' ); ?></option>
<option value="model1"><?php _e( 'Model 1', 'textdomain' ); ?></option>
<option value="model2"><?php _e( 'Model 1', 'textdomain' ); ?></option>
</select>
<input type="submit" id="searchsubmit" value="Search" />
</form>
Затем вызовите форму в свой шаблон, как показано ниже:
<?php get_template_part( 'advanced', 'searchform' ); ?>
Теперь ваша поисковая форма готова, и теперь вы можете использовать поисковую форму и вводить пользовательский URL-адрес.
Шаг 2
То, что вам просто нужно: запросить базу данных и запрос типа записи и ее настраиваемых полей согласно поисковому запросу . Помните, что ваш поисковый запрос теперь является URL-адресом, который вы получили после отправки формы. Теперь попросите WordPress загрузить свою страницу результатов поиска при отправке формы. Поместите следующую функцию в свой, functions.phpчтобы он включил ваш пользовательский шаблон поиска вместо значения по умолчанию search.php:
<?php
function wpse_load_custom_search_template(){
if( isset($_REQUEST['search']) == 'advanced' ) {
require('advanced-search-result.php');
die();
}
}
add_action('init','wpse_load_custom_search_template');
?>
Я принес код где-то из WPSE (я забыл рут), но есть противоречие с использованием кода выше. Но это на самом деле работает ( извините, конечно ).
Проверьте другой способ, предложенный @GM.
Шаг 3
Создайте новый файл и сохраните его с advanced-search-result.php(потому что мы использовали это имя в functions.php), и теперь вы свободны - очевидно. Концепция это:
- Получите данные с URL,
- Используйте простой
WP_Query()(если ваш запрос сложный, используйте $wpdbзапрос),
- Передайте команды в запросе, получите данные из базы данных и
- Показать результат [s]
Образец может быть:
<?php
// Get data from URL into variables
$_name = $_GET['name'] != '' ? $_GET['name'] : '';
$_model = $_GET['model'] != '' ? $_GET['model'] : '';
// Start the Query
$v_args = array(
'post_type' => 'vehicle', // your CPT
's' => $_name, // looks into everything with the keyword from your 'name field'
'meta_query' => array(
array(
'key' => 'car_model', // assumed your meta_key is 'car_model'
'value' => $_model,
'compare' => 'LIKE', // finds models that matches 'model' from the select field
),
)
);
$vehicleSearchQuery = new WP_Query( $v_args );
// Open this line to Debug what's query WP has just run
// var_dump($vehicleSearchQuery->request);
// Show the results
if( $vehicleSearchQuery->have_posts() ) :
while( $vehicleSearchQuery->have_posts() ) : $vehicleSearchQuery->the_post();
the_title(); // Assumed your cars' names are stored as a CPT post title
endwhile;
else :
_e( 'Sorry, nothing matched your search criteria', 'textdomain' );
endif;
wp_reset_postdata();
?>
Итак, вот ваша последняя вещь. Но все же есть много проблем:
- Альтернативные значения - расширенный поиск может быть выполнен с ВСЕМИ полями или ЛЮБЫМ из поля, поэтому вы должны убедиться, что Запрос принимает все результаты в соответствии с поиском и данными. Вы можете использовать
$wpdbпользовательский запрос SQL для сложного результата поиска, и это будет чистый MySQL - в WordPress ничего нет.
- Санитарная обработка и проверка - текстовое поле и текстовое поле настолько уязвимы, что могут привести к неправильной работе вашего сайта. Таким образом, передача необработанных данных будет небезопасной, вам нужно будет выполнить их дезинфекцию и проверку, прежде чем переходить к запросу db. ( Санация и проверка данных с помощью WordPress - TutsPlus )
- Проектирование - вы можете выбрать
page.php(или search.php) шаблон и сделать эту страницу на основе этого.
Итак, у вас есть идея, теперь ваша очередь исследовать и открывать путь . Помните, у каждого свой путь. Сделай свой, чтобы я мог следовать за тобой. :)