admin管理员组文章数量:1391943
So I have the out of the box wordpress 'Search' widget that I want to expand. I used the below filter to have the ability to search for my custom post types inside the widget:
add_filter( 'pre_get_posts', function($query) {
if ($query->is_search) {
$query->set('post_type', [
'post', 'profile' ,'recipe', 'dish'
]);
}
});
The problem that I discovered is that it overwrote ALL search items on the website, including the search box inside the admin panel 'Posts', where I was getting custom post type results although they didn't live there.
Does anyone know how to improve the search functionality on the search widget to include custom post types without overwriting ALL search boxes throughout the site?
So I have the out of the box wordpress 'Search' widget that I want to expand. I used the below filter to have the ability to search for my custom post types inside the widget:
add_filter( 'pre_get_posts', function($query) {
if ($query->is_search) {
$query->set('post_type', [
'post', 'profile' ,'recipe', 'dish'
]);
}
});
The problem that I discovered is that it overwrote ALL search items on the website, including the search box inside the admin panel 'Posts', where I was getting custom post type results although they didn't live there.
Does anyone know how to improve the search functionality on the search widget to include custom post types without overwriting ALL search boxes throughout the site?
Share Improve this question asked Feb 26, 2020 at 16:06 DevSemDevSem 2092 silver badges11 bronze badges 3 |1 Answer
Reset to default 2That's easy, pre_get_posts
applies to all queries, not just those on the frontend. So if you don't want it to run on admin queries, test if you're in the admin and exit early!
You might also want to verify that you're in the main query
add_filter( 'pre_get_posts', function( \WP_Query $query) {
if ( is_admin() ) {
return;
}
if ( ! $query->is_main_query() ) {
return;
}
Remember, pre_get_posts
runs on all queries, regardless of where, be it admin, frontend, XMLRPC, REST API, etc. It will only run on the frontend if you tell it to only run on the frontend.
本文标签: custom post typesPregetposts filter overwrites all search functionality
版权声明:本文标题:custom post types - Pre_get_posts filter overwrites all search functionality 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744713506a2621268.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
$_GET
param indicating that it's "a widget" so you can check against it inpre_get_posts
. If you're just looking to stop it from running on admin you can check againstis_admin()
and return early. – Howdy_McGee ♦ Commented Feb 26, 2020 at 16:14