______UPDATE_______
Хоча я набираю все більше голосів, і рішення працює, але відповідь 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
запит),
- Передайте команди в межах запиту, отримуйте дані з db та
- Показати результат [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 нічого немає.
- Саніталізація та перевірка - текстове поле та текстові області настільки вразливі, що можуть спричинити неправильну практику вашого сайту Тому передача необроблених даних була б небезпечною, вам потрібно буде Sanitize та перевірити їх, перш ніж переходити в db-запит. ( Санітація та перевірка даних за допомогою WordPress - TutsPlus )
- Дизайн - ви можете вибрати
page.php
(або search.php
) шаблон і зробити цю сторінку на основі цього.
Отже, у вас виникла ідея, тепер ваша черга вивчити і відкрити шлях . Пам'ятайте, у кожного шлях різний. Зробіть своє, щоб я міг слідувати за вами. :)