______UPDATE_______
점점 더 많은 표를 얻었지만 해결책이 효과가 있지만 cybmeta의 답변 은 실제로 좋은 답변이며 WordPress의 방법입니다. 꼭 시도해야합니다.
1 단계
당신은 사용자가 웹 사이트와 상호 작용하고, 이름으로 저장됩니다 할 함께 고급 검색 양식을함으로써 시작 (즉, 내가로 저장 advanced-searchform.php
-하지만 그것을 저장하지 않습니다 searchform.php
다음은 워드 프레스 '기본 검색 양식을 대체 할 수 있습니다 ) :
<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에서 데이터를 가져옵니다.
- 결과 표시
샘플은 다음과 같습니다.
<?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
) 템플릿을 선택하고 이를 기반으로이 페이지를 만들 수 있습니다 .
그래서, 당신은 지금이 탐구하고 발견 할 수있는 네 차례 야, 생각이있어 길을 . 모든 사람의 길은 다르다는 것을 기억하십시오. 내가 당신을 따를 수 있도록 당신을 만드십시오. :)