自定义帖子类型的Wordpress搜索模板

时间:2015-04-09 08:04:09

标签: wordpress plugins custom-post-type

我制作了一个自定义的帖子类型插件,以显示wordpress名称小组中的团队成员,以显示我制作的archive-team.phpsingle-team.php自定义帖子类型,所有这些都非常有效且独立于所使用的主题。

现在我的问题是我想在搜索中包含自定义帖子类型,但我认为没有这样的事情searh-team.php并且要显示自定义帖子类型的搜索模板我必须修改search.php因主题而异。

所以任何人都可以指出我正确的方向,使搜索模板独立于主题。

此致

3 个答案:

答案 0 :(得分:1)

按照以下3个步骤实现自定义帖子搜索。

假设您的自定义帖子类型名称是employee_member。

  1. 将以下代码添加到function.php

    function template_chooser($template)   
    {    
      global $wp_query;   
      $post_type = get_query_var('post_type');   
      if( $wp_query->is_search && $post_type == 'employee_member' )   
      {
        return locate_template('employee-search.php');  //  redirect to archive-search.php
      }   
      return $template;   
    }
    add_filter('template_include', 'template_chooser');    
    
  2. 创建文件employee-search.php


  3. /* Template Name: Custom Search */
    <?php 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>
    
        </div><!-- content -->
    </div><!-- contentarea -->
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>  
    

    1. 最后为您的自定义帖子类型
    2. 创建一个搜索表单
      <div>   
         <h3>Search Employee Member</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="employee_member" /> 
             <input type="submit" alt="Search" value="Search" />
         </form>
      </div> 
      

答案 1 :(得分:0)

使用pre_get_posts()更改查询

要做到这一点,一个好的做法是使用pre_get_posts()来改变搜索查询。 这段代码可以放在主题的functions.php中,也可以直接放到插件中。

<?php
// Call our function my_search()
add_filter( 'pre_get_posts', 'my_search' );

function my_search($query) {

    // Check if we are on the front end main search query
    if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {

        // Change the post_type parameter on the query
        $query->set('post_type', 'team');
    }

    // Return the modified query
    return $query;
}
?>

现在只会查询您的自定义帖子类型&#34;团队&#34;。 如果您希望研究还整合帖子和页面,您可以修改以下行:

<?php
$query->('post_type', array('team', 'post', 'page'));
?>

如果在PHP类中使用add_filter(),请小心声明您的过滤器:

<?php
add_filter( 'pre_get_posts', array( $this, 'my_search' ) );
?>

答案 2 :(得分:0)

您可以在functions.php

中添加此内容
function filter_search($query) {
    if ($query->is_search) {
    $query->set('post_type', array('post', 'team')); // Add all post types you want results for.
    };
    return $query;
};
add_filter('pre_get_posts', 'filter_search');