답변:
다음은 3 단계로 해결책을 찾았습니다. 맞춤 게시물 유형이 ' 제품 ' 이라고 가정 해 보겠습니다.
1 . 여기에 기능 코드를 추가 하십시오. archive-search.php를 지정할 수 있습니다
function template_chooser($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'products' )
{
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');
2. 사용자 정의 게시물 유형에 대한 검색 결과 템플릿 작성 (archive-search.php)
<?php
/* Template Name: Custom Search */
get_header(); ?>
<div class="contentarea">
<div id="content" class="content_right">
<h3>Search Result for : <?php echo "$s"; ?> </h3>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" class="posts">
<article>
<h4><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4>
<p><?php the_exerpt(); ?></p>
<p align="right"><a href="<?php the_permalink(); ?>">Read More</a></p>
<span class="post-meta"> Post By <?php the_author(); ?>
| Date : <?php echo date('j F Y'); ?></span>
</article><!-- #post -->
</div>
<?php endwhile; ?>
<?php endif; ?>
</div><!-- content -->
</div><!-- contentarea -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
검색 양식 작성
이 검색 양식에서 "제품"값은 숨겨져 있으며 제품 게시물 만 검색합니다 .
<div>
<h3>Search Products</h3>
<form role="search" action="<?php echo site_url('/'); ?>" method="get" id="searchform">
<input type="text" name="s" placeholder="Search Products"/>
<input type="hidden" name="post_type" value="products" /> <!-- // hidden 'products' value -->
<input type="submit" alt="Search" value="Search" />
</form>
</div>
더 많은 것을 위해, 나는 당신을 여기에 링크하고 싶습니다
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
get_query_var('post_type')
문자열 대신 배열을 반환했기 때문에 직접 비교할 수 없었습니다. 한 번에 하나의 게시물 유형 만 검색하므로 $post_type
var를로 변경 했습니다 $post_type[0]
.
http://localhost:3000/?s=cloud%27&post_type=product
에http://localhost:3000/search/cloud/product
search_template
필터에 더 적절한 대안이 될 것으로 보인다template_include
여기 나를 위해 일하는 것이 있습니다. 깨끗하지는 않지만 이러한 다른 답변을 얻을 수 없었습니다.
맞춤 게시물 유형에 대한 검색 양식 :
<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
<label>
<span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ) ?></span>
<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
<input type="hidden" name="post_type" value="book" />
</label>
<input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>
functions.php에서 :
function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
if(isset($_GET['post_type'])) {
$type = $_GET['post_type'];
if($type == 'book') {
$query->set('post_type',array('book'));
}
}
}
return $query;
}
add_filter('pre_get_posts','searchfilter');
search.php에서 :
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php if(isset($_GET['post_type'])) {
$type = $_GET['post_type'];
if($type == 'book') {?>
/* Format for "book" custom post type */
<?php } else { ?>
/* Format for custom post types that are not "book,"
or you can use elseif to specify a second post type the
same way as above. Copy the default format here if you
only have one custom post type. */
<?php } ?>
<?php } else { ?>
/* Format to display when the post_type parameter
is not set (i.e. default format) */
<?php } ?>
<?php endwhile; else: ?>
/* What to display if there are no results. */
<?php endif; ?>
세 곳 모두에서 "책"을 사용자 정의 게시물 유형으로 바꿔야합니다.
이것이 누군가를 돕기를 바랍니다!
더 현실화 된 짧은 코드
function template_chooser($template)
{
global $wp_query;
$post_type = $wp_query->query_vars["pagename"];
if( isset($_GET['s']) && $post_type == 'products' )
{
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');
일반 검색과 맞춤 게시물 유형에 대한 검색에 두 가지 다른 양식을 사용하려고했습니다.
내 맞춤 게시물 유형은 일반 페이지와 다른 헤더를 사용합니다. 일반 페이지에서 내 검색 양식에 대한 호출은 다음과 같습니다.
<?php get_search_form(true); ?>
그리고 맞춤 게시물 유형 헤더에서 검색 양식을 호출하면 다음과 같습니다.
<?php get_template_part('search','library'); ?>
추가 필드가 있습니다.
<input type="hidden" name="post_type" value="library" /> //Where "library" is my custom post type.
함수 파일에는 다음과 같은 코드가 있습니다.
/** Custom Search for Library */
function search_library($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'library' )
{
return locate_template('search-library.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'search_library');
검색 양식이 사용자 정의 필드 내에서 검색을 수행하는지 여부를 감지하여 사용자 정의 템플리트에 검색을 표시합니다. 그렇지 않으면 일반 템플리트를 사용하십시오.
편집 : get_search_form () 함수 호출이 무엇이든 상관없이 true를 반환하도록 수정했습니다.
get_search_form('true')
이어야합니다 get_search_form(true)
. get_search_form
부울 입력을 찾고 있으므로 true
또는 false
. 따옴표로 묶으면 부울 매개 변수가 아닌 문자열을 제공합니다. 기능이 설정되어, 모두하는 방식 'true'
과 'false'
그들이 (함수가 두 경우에 true를 돌려됩니다) 모두 비어 있지 않은 문자열이기 때문에, 동일한 결과를 반환합니다.
빈 입력 검색 문제를 해결하기 위해 함수 코드를 다음과 같이 대체 할 수 있습니다.
function template_chooser($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if( isset($_GET['s']) && $post_type == 'products' )
{
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');