这一切的开始是因为,在前端,我希望搜索查询包括来自分类法和自定义元的术语。因此,在谷歌搜索之后,我找到了以下代码,并将其添加到了我的函数文件中:
add_filter(\'posts_where\', \'advanced_search_query\' );
function advanced_search_query( $where )
{
if( is_search() ) {
global $wpdb;
$query = get_search_query();
$query = like_escape( $query );
// include postmeta in search
$where .=" OR {$wpdb->posts}.ID IN (SELECT {$wpdb->postmeta}.post_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->postmeta}.meta_key = \'bible_reference\' AND {$wpdb->postmeta}.meta_value LIKE \'%$query%\' AND {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)";
// include taxonomy in search
$where .=" OR {$wpdb->posts}.ID IN (SELECT {$wpdb->posts}.ID FROM {$wpdb->posts},{$wpdb->term_relationships},{$wpdb->terms} WHERE {$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id AND {$wpdb->term_relationships}.term_taxonomy_id = {$wpdb->terms}.term_id AND {$wpdb->terms}.name LIKE \'%$query%\')";
if(WP_DEBUG)var_dump($where);
}
return $where;
}
这对我的前端搜索很有帮助。然而,我后来发现管理员搜索现在已转到pot。例如,如果我在仪表板中的页面列表中搜索,它只显示来自自定义帖子类型的结果。而且,如果我再次尝试搜索,一旦显示第一批结果,我就会收到一个错误:“无效的帖子类型”。
我尝试使用remove\\u filter()删除过滤器,但似乎没有任何效果。
有人能帮忙吗?
SO网友:Karun
你可以检查一下is_admin
或不在函数的第一行
add_filter(\'posts_where\', \'advanced_search_query\' );
function advanced_search_query( $where )
{
if(is_admin()){
return $where;
}
if( is_search() ) {
global $wpdb;
$query = get_search_query();
$query = like_escape( $query );
// include postmeta in search
$where .=" OR {$wpdb->posts}.ID IN (SELECT {$wpdb->postmeta}.post_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->postmeta}.meta_key = \'bible_reference\' AND {$wpdb->postmeta}.meta_value LIKE \'%$query%\' AND {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)";
// include taxonomy in search
$where .=" OR {$wpdb->posts}.ID IN (SELECT {$wpdb->posts}.ID FROM {$wpdb->posts},{$wpdb->term_relationships},{$wpdb->terms} WHERE {$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id AND {$wpdb->term_relationships}.term_taxonomy_id = {$wpdb->terms}.term_id AND {$wpdb->terms}.name LIKE \'%$query%\')";
if(WP_DEBUG)var_dump($where);
}
return $where;
}