Wordpress搜索三种不同的形式

时间:2016-08-25 11:08:26

标签: wordpress search custom-post-type

我在页面中有三种不同的搜索表单。产品,餐馆和页面是不同的帖子类型。尝试通过隐藏输入类型在search.php中显示结果。它没有像我预期的那样显示结果。我的代码中有些东西是错误的。请建议或建议。

表1

<form role="search" method="get"  action="<?php bloginfo('url'); ?>">
<input type="text" value="" name="s" id="s" />
<input type="hidden" value="Restaurant" name="post_type" />
<input type="submit" id="searchsubmit" value="Search" />
</form>

表格2

<form role="search" method="get" action="<?php bloginfo('url'); ?>">
<input type="text" value="" name="s" id="s" />
<input type="hidden" value="Products" name="post_type" />
<input type="submit" id="searchsubmit" value="Search" />
</form>

表格3

<form role="search" method="get" action="<?php bloginfo('url'); ?>">
                        <input type="text" name="search" placeholder="Search...">
                        <input type="hidden" name="post_type" value="Pages" />
                    </form>

以下是我的search.php结构

$myvalue = $_GET['post_type'];

        if ($myvalue == "Restaurant"){
            echo "res";

            function SearchFilter($query) {
                if ($query->is_search) {
                    $query->set('post_type', 'sanha-restau');
                }
                return $query;
            }

            add_filter('pre_get_posts','SearchFilter');

        if ( have_posts() ) :
            while ( have_posts() ) : the_post();
                echo '<ul><li><strong>';
                echo get_the_title()  . '</strong><br> (';
                echo substr(get_the_excerpt(), 0, 200) . ') ';
                echo '</li></ul>';              
            endwhile;
            else :
                get_template_part( 'content', 'none' );
        endif;


        } else if ($myvalue == "Products"){
            echo "pro";

            function SearchFilter($query) {
                if ($query->is_search) {
                    $query->set('post_type', 'sanha-product');
                }
                return $query;
            }

            add_filter('pre_get_posts','SearchFilter');

        if ( have_posts() ) :
            while ( have_posts() ) : the_post();
                echo '<ul><li><strong>';
                echo get_the_title()  . '</strong><br> (';
                echo substr(get_the_excerpt(), 0, 200) . ') ';
                echo '</li></ul>';              
            endwhile;
            else :
                get_template_part( 'content', 'none' );
        endif;


        } else if ($myvalue == "Pages"){
            echo "pages";

            if ( have_posts() ) :
                while ( have_posts() ) : the_post();
                    echo '<ul><li><strong>';
                    echo get_the_title()  . '</strong><br> (';
                    echo substr(get_the_excerpt(), 0, 200) . ') ';
                    echo '</li></ul>';              
                endwhile;
                else :
                    get_template_part( 'content', 'none' );
            endif;

        }

请咨询。感谢

2 个答案:

答案 0 :(得分:0)

通过检查您的代码,您似乎希望搜索3种帖子类型

Products, Restaurants and Pages

根据文档,您可以使用post_type数组来搜索多种帖子类型。

WP_QUERY

中的s参数
Show posts based on a keyword search.

s (string) - Search keyword.
Show Posts based on a keyword search

Display posts that match the search term "abc":

注意:我使用abc进行搜索您可以将其更改为esc_sql($_REQUEST['s'])

$searchQuery = new WP_Query(array(
    'post_type' => array('products', 'restaurants','page'),
    's' => 'abc' // <<-- change this to make it work --> esc_sql($_REQUEST['s'])
));

if ($searchQuery->have_posts() ) :
    while ( $searchQuery->have_posts() ) : $searchQuery->the_post();
        echo '<ul><li><strong>';
        echo get_the_title()  . '</strong><br> (';
        echo substr(get_the_excerpt(), 0, 200) . ') ';
        echo '</li></ul>';              
    endwhile;
    else :
        get_template_part( 'content', 'none' );
endif;

因此,搜索会有一个查询,无需使用add_filterWP_Query以上将在3种帖子类型中搜索您的关键字。

答案 1 :(得分:0)

function load_custom_search_template(){
    if(isset($_REQUEST['custom_search'])){
        require('search.php');
        die();
    }
}
add_action('init','load_custom_search_template');

此代码适用于所有

以及以下search.php的代码

$myquery = '';
function searchfilter($query) {
    if ($query->is_search && !is_admin() ) {
        if(isset($_GET['post_type'])) {
            $type = $_GET['post_type'];
                if($type == 'sanha-product') {
                    $query->set('post_type',array('sanha_product'));
                    $myquery = 'Products Found For : ';
                }
                elseif($type == 'sanha-restau'){
                    $query->set('post_type',array('sanha_restau'));
                    $myquery = 'Resaurants Found For : ';
                }
                elseif($type == 'pages'){
                    $query->set('post_type',array('pages'));
                    $myquery = 'Search Result For : ';
                }
        }       
    }
return $query;
}
add_filter('pre_get_posts','searchfilter');