我制作了一个自定义的帖子类型插件,以显示wordpress名称小组中的团队成员,以显示我制作的archive-team.php
和single-team.php
自定义帖子类型,所有这些都非常有效且独立于所使用的主题。
现在我的问题是我想在搜索中包含自定义帖子类型,但我认为没有这样的事情searh-team.php
并且要显示自定义帖子类型的搜索模板我必须修改search.php
因主题而异。
所以任何人都可以指出我正确的方向,使搜索模板独立于主题。
此致
答案 0 :(得分:1)
按照以下3个步骤实现自定义帖子搜索。
假设您的自定义帖子类型名称是employee_member。
将以下代码添加到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');
创建文件employee-search.php
/* 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(); ?>
<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()来改变搜索查询。 这段代码可以放在主题的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');