【发布时间】:2014-12-17 15:43:52
【问题描述】:
我遇到了一个问题,如果特定帖子上根本没有元数据,则“不存在”元查询无法按预期工作。比如……
add_filter('pre_get_posts' , 'my_pre_get_posts' );
function my_pre_get_posts($query) {
$query->set('meta_query', array(
'relation' => 'OR',
array(
'key' => 'mymetakey',
'value' => '',
'compare' => 'NOT EXISTS'
),
array(
'key' => 'mymetakey',
'value' => '1',
'compare' => '!='
),
)
);
}
当帖子具有一些元数据时,这可以正常工作。任何其他元数据。由于“_edit_lock”元数据,只需点击编辑器即可解决此问题。但是,自动生成的 woocommerce 页面没有此功能,而且开箱即用 - 此查询不起作用。
大概这是表连接工作方式的一个特点。任何人都知道一个好的解决方法 - 除了在每个帖子中写入一些虚拟元数据。
【问题讨论】:
-
你用的是什么版本的WP?
-
这是在 4.0 上看到的。我已经看到 4.1 中有元查询增强功能,但我还没有测试过。
-
这是similar question。我要求该版本的原因是 Codex 中的以下注释:“由于错误 #23268,在 3.9 之前,NOT EXISTS 比较需要 value 才能正常工作。您必须为 value 参数提供一些字符串。空字符串或NULL 不起作用。但是,任何其他字符串都可以解决问题,并且在使用 NOT EXISTS 时不会出现在您的 SQL 中。需要灵感吗?'bug #23268'怎么样。"
-
是的 - 这是我找到大量答案的问题。空字符串在“不存在”上工作正常。这似乎已在最近发布的 WordPress 4.1 (yey) 中得到修复
-
很高兴听到它解决了 ;-)
标签: mysql wordpress woocommerce