我有一个使用事件日历来管理事件的自定义网站。我在主导航中搜索了一下,我无法显示事件,只显示帖子和页面。我添加了自定义过滤器,但我知道我只是忽略了一些东西。
以下是我的主题function.php
中的功能add_theme_support('html5' ,array('search-form'));
add_filter('wp_nav_menu_items', 'add_search_form', 10, 2);
function add_search_form($items, $args) {
if( $args->theme_location == 'menu-top' )
$items .= '<li class="search"><form role="search" method="get" id="searchform" action="'.home_url( '/' ).'">
<input type="search" class="search-box" placeholder="Type Here" name="s" />
<input class="search-button" type="submit" id="searchsubmit" value="'. __('Search') .'" /></form>
</li>';
return $items;
}
//Define what post types to include in search
function include_in_search( $query ) {
if ( $query->is_search ) {
$query->set( 'post_type', array( 'post', 'page', 'feed', 'tribe_events' ));
}
return $query;
}
add_filter('the_search_query', 'include_in_search' );
我肯定会很感激。提前谢谢。
答案 0 :(得分:1)
您将the_search_query
与pre_get_posts
混为一谈。
the_search_query
允许您在显示之前修改搜索字符串,而pre_get_posts
允许您修改正在执行的查询。
改变这个:
add_filter('the_search_query', 'include_in_search' );
对此:
add_filter( 'pre_get_posts', 'include_in_search' );
另外请确保您只在正确的位置对查询采取行动。添加更多条件以检查您是否未在管理员中,并且您正在对主要查询进行操作。
改变这个:
if ( $query->is_search ) {
对此:
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {