我已经注册了一个自定义帖子类型(plugin_course),并将其设置为拥有自己的元数据。
当我在plugin_course编辑页面(/wp-admin/edit.php?post_type=plugin_course)上进行搜索时,我希望能够完全更改搜索结果。
我甚至无法获得正确的基础知识。我很确定我应该使用pre_get_posts钩子来返回结果,但即使我只是想显示所有plugin_course(不管搜索词)项目它都不起作用?
function course_search_filter($query) {
if (is_search() && is_main_query()) {
$query->set('posts_per_page', 10);
$query->set( 'post_type', 'plugin_course');
return $query;
}
}
地址:
/wp-admin/edit.php?s=test&post_status=all&post_type=plugin_course&action=-1&m=0&paged=1&mode=list&action2=-1
这是对的吗?为什么不显示plugin_course帖子?
此功能有效,但当然不显示我的自定义帖子类型:
function course_search_filter($query) {
if (is_search() && is_main_query()) {
$query->set('posts_per_page', 10);
$query->set('post_type', get_post_types(array( 'public'=>true)));
return $query;
}
}
我有自定义帖子类型与其他自定义帖子类型链接,所以最终我会编写一个函数来排序和过滤我的plugin_course帖子类型,并且需要能够返回一个新的对象数组,以便在搜索中显示结果。有没有办法做到这一点?
=====
以防万一其他人想要尝试使用它。我解决这个问题的方法是:
使用post__in,只会显示帖子ID
unset($query->query_vars['s']); // unset search term
$query->set('post_type', 'plugin_course'); // display post type
$query->set('post__in', $post_ids); // display only items that have a match
添加了一些JS来修复搜索结果标签:
var term = $("#post-search-input").val();
$('#wpbody-content span.subtitle').show().html('Search results for “'+term+'”')