php - WP_Query 未返回用于搜索查询的 ID
问题描述
我正在尝试根据 WP_Query 检索要从搜索查询中删除的 ID 列表。无论出于何种原因,即使我知道帖子 id 373 具有正确的查询条件,WP_Query 也没有显示 ID 数组。
remove_action('pre_get_posts','exclude_pages_from_search');
$hidePages = new WP_Query( array (
'meta_key' => 'edit_screen_sitemap',
'meta_value' => 'hide',
'fields' => 'ids'
));
$hidePageIds = array($hidePages->posts);
$hidePageIdss = array($hidePages);
var_dump($hidePageIds); // array(1) { [0]=> array(0) { } }
var_dump($hidePageIdss); // displays query array
add_action('pre_get_posts','exclude_pages_from_search');
function exclude_pages_from_search($query) {
if ( !is_admin() ) {
if ( $query->is_main_query() ) {
if ($query->is_search) {
$query->set('post__not_in', array($hidePages->posts));
}
}
}
}
解决方案
经过一番调查,我发现默认情况下,post循环只使用“post”的post类型。我必须定义我想要搜索的所有帖子类型,以便它带回与值匹配的页面/自定义帖子类型的 ID:
remove_action('pre_get_posts','exclude_pages_from_search');
$hidePages = new WP_Query( array (
'post_type' => array( 'post', 'page', 'offer', 'review', 'project' ),
'meta_key' => 'edit_screen_sitemap',
'meta_value' => 'hide',
'fields' => 'ids'
));
$hidePageIds = array($hidePages->posts);
$hidePageIdss = array($hidePages);
var_dump($hidePageIds); // array(1) { [0]=> array(0) { } }
var_dump($hidePageIdss); // displays query array
add_action('pre_get_posts','exclude_pages_from_search');
function exclude_pages_from_search($query) {
if ( !is_admin() ) {
if ( $query->is_main_query() ) {
if ($query->is_search) {
$query->set('post__not_in', array($hidePages->posts));
}
}
}
}
请注意,这仅解决了获取页面 id 的问题,它不会使搜索功能正常工作我在此处还有另一个问题,您可以在其中找到固定查询:post__not_in 不排除 Wordpress 搜索查询中的 ID
推荐阅读
- vue.js - Wuxt (Nuxt/Vue) 根据父/子对 v-for 中的项目进行排序
- sql - 将查询结果放入表变量
- php - 打印来自数据库的双字段时的 Laravel 问题
- ios - 控制中心信息未使用 AVSpeechSynthesizer 更新
- amazon-web-services - 创建 S3 存储桶时触发 Lambda 函数
- promise - 带有环回 lb3 的自动更新模型 - 异步陷阱
- angular - 如果输入为空,则隐藏重置按钮
- python - 使用正则表达式递归拆分字符串
- graphql - Apollo GraphQL 客户端查询返回自省结果而不是数据
- java - Gradle 在 Eclipse 中找到错误的 Maven 存储库 url