我有两个自定义分类法应用于两个自定义帖子类型。侧边栏上的术语列表很好,将列出与之相关的所有帖子。然而,如果你搜索其中一个特定的术语,它不会显示带有该术语的帖子。
例子:http://dev.andrewnorcross.com/das/all-case-studies/搜索术语“PQRI”
我什么也得不到。有什么想法吗?我尝试过使用各种搜索插件,但它们要么破坏了我的自定义搜索参数,要么就是不起作用。
我有两个自定义分类法应用于两个自定义帖子类型。侧边栏上的术语列表很好,将列出与之相关的所有帖子。然而,如果你搜索其中一个特定的术语,它不会显示带有该术语的帖子。
例子:http://dev.andrewnorcross.com/das/all-case-studies/搜索术语“PQRI”
我什么也得不到。有什么想法吗?我尝试过使用各种搜索插件,但它们要么破坏了我的自定义搜索参数,要么就是不起作用。
我会推荐Search Everything 插件,但如果您想使用WP的搜索功能实现此功能,下面是我在Atom主题中使用的代码:
// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23
function atom_search_where($where){
global $wpdb;
if (is_search())
$where .= "OR (t.name LIKE \'%".get_search_query()."%\' AND {$wpdb->posts}.post_status = \'publish\')";
return $where;
}
function atom_search_join($join){
global $wpdb;
if (is_search())
$join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
return $join;
}
function atom_search_groupby($groupby){
global $wpdb;
// we need to group on post ID
$groupby_id = "{$wpdb->posts}.ID";
if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;
// groupby was empty, use ours
if(!strlen(trim($groupby))) return $groupby_id;
// wasn\'t empty, append ours
return $groupby.", ".$groupby_id;
}
add_filter(\'posts_where\',\'atom_search_where\');
add_filter(\'posts_join\', \'atom_search_join\');
add_filter(\'posts_groupby\', \'atom_search_groupby\');
它基于标签搜索插件:http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23这是标准的WordPress搜索吗?因为doesn\'t seem to include taxonomies (甚至不是标准的,比如类别和标签)。代码在中搜索post_title
和post_content
, 但是,如果您想包括任何其他内容,您应该将posts_search
滤器
我试过上面提到的一匹小马的解决方案https://wordpress.stackexchange.com/a/5404/37612, 这很好,但我发现了一个问题,它对我不起作用,我会做一个小的修改:
如果我在分类法的标题中搜索一个字符串-如果分类法有特殊字符,例如德语的“Umlauts”(ö,ä,ü),并且搜索oe、ae、ue而不是使用特殊字符,则效果很好-您需要在分类法的slug中添加搜索-OR t.slug LIKE \'%".get_search_query()."%\'
如果您搜索搜索查询和分类过滤器的组合,这也可以正常工作
但问题是,当您尝试只使用分类法过滤器时,如果没有搜索文本,搜索挂钩会在查询中附加一个空字符串,因此您会得到结果中的所有帖子,而不仅仅是过滤后的分类法中的帖子。一个简单的IF语句解决了这个问题。因此,整个修改后的代码都是这样的(对我来说非常好!)
function custom_search_where($where){ global $wpdb; if (is_search() && get_search_query()) $where .= "OR ((t.name LIKE \'%".get_search_query()."%\' OR t.slug LIKE \'%".get_search_query()."%\') AND {$wpdb->posts}.post_status = \'publish\')"; return $where; } function custom_search_join($join){ global $wpdb; if (is_search()&& get_search_query()) $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id"; return $join; } function custom_search_groupby($groupby){ global $wpdb; // we need to group on post ID $groupby_id = "{$wpdb->posts}.ID"; if(!is_search() || strpos($groupby, $groupby_id) !== false || !get_search_query()) return $groupby; // groupby was empty, use ours if(!strlen(trim($groupby))) return $groupby_id; // wasn\'t empty, append ours return $groupby.", ".$groupby_id; } add_filter(\'posts_where\',\'custom_search_where\'); add_filter(\'posts_join\', \'custom_search_join\'); add_filter(\'posts_groupby\', \'custom_search_groupby\');
我发现onetrickpony的答案很好,但它将任何搜索视为一个单独的术语,也不会处理带引号的搜索短语。我修改了他的代码(特别是atom_search_where
功能)处理这两种情况。这是我对他的代码的修改版本:
// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23
function atom_search_where($where){
global $wpdb, $wp_query;
if (is_search()) {
$search_terms = get_query_var( \'search_terms\' );
$where .= " OR (";
$i = 0;
foreach ($search_terms as $search_term) {
$i++;
if ($i>1) $where .= " AND"; // --- make this OR if you prefer not requiring all search terms to match taxonomies
$where .= " (t.name LIKE \'%".$search_term."%\')";
}
$where .= " AND {$wpdb->posts}.post_status = \'publish\')";
}
return $where;
}
function atom_search_join($join){
global $wpdb;
if (is_search())
$join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
return $join;
}
function atom_search_groupby($groupby){
global $wpdb;
// we need to group on post ID
$groupby_id = "{$wpdb->posts}.ID";
if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;
// groupby was empty, use ours
if(!strlen(trim($groupby))) return $groupby_id;
// wasn\'t empty, append ours
return $groupby.", ".$groupby_id;
}
add_filter(\'posts_where\',\'atom_search_where\');
add_filter(\'posts_join\', \'atom_search_join\');
add_filter(\'posts_groupby\', \'atom_search_groupby\');
我有和Jan一样的信息水平。我知道也可以用插件扩展搜索。
可能Search Everything (Wordpress Plugin) 这就是你要找的。根据功能列表,它现在支持自定义分类法。
我对WooCommerce购物车插件也有同样的问题。。我的搜索结果不包括自定义分类术语“product\\u tag”,因为它不是标准的post标记。我在另一个StackOverflow线程中找到了关于此问题的解决方案:
代码示例tkelly 在替换术语时为我工作author
在他的例子中product_tag
根据我们对cart插件的需求。