我正在使用自定义搜索筛选器(使用我的自定义查询变量type
), 像这样:
function fteh_pre_get_posts( $query ){
if( isset( $query->query_vars[\'type\'] ) )
$types = explode( \',\', $query->query_vars[\'type\'] );
$query->set( \'post_type\', $types );
return $query;
}
if ( ! is_admin() ) {
add_action( \'pre_get_posts\', \'fteh_pre_get_posts\' );
}
我注意到这会导致注册的自定义菜单消失。
没有!is_admin()
它还混淆了菜单生成器(它在页面部分显示了一些帖子,而不是我的所有页面)。添加条件有助于实现这一点,但我不知道如何恢复菜单。
它被正确注册和调用,构建并保存在适当的主题位置,并在添加过滤器之前工作。现在它只使用fallback_cb
(在我的情况下,默认wp_page_menu
) 而不是我的自定义菜单。
一旦我从pre_get_posts
, 一切都恢复正常了。
我不知道怎么做pre_get_posts
钩子与自定义菜单相关——有人知道为什么它会导致如此奇怪的行为吗?
UPDATE:
我现在发现了另一个问题,这是由上面的代码片段引起的——我在页面上的所有自定义查询(简单的东西,如
query_posts(\'post_type=organization\')
) 已停止工作并显示普通帖子,而不是在中设置的自定义帖子类型
query_posts
.