get_post_meta()
仅应return false
在几种情况下:
269 function get_metadata($meta_type, $object_id, $meta_key = \'\', $single = false) {
270 if ( !$meta_type )
271 return false;
272
273 if ( !$object_id = absint($object_id) )
274 return false;
https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L269
我不知道怎么做
$meta_type
可能是错误的,因为它是硬编码到
get_post_meta()
:
1769 function get_post_meta($post_id, $key = \'\', $single = false) {
1770 return get_metadata(\'post\', $post_id, $key, $single);
1771 }
https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/post.php#L1769
剩下的
$object_id
. 可能有东西传递了一个错误的对象ID--类似这样的。。。
$object_id = \'abc\';
// or this
// $object_id = -123;
var_dump(!$object_id = absint($object_id));
。。。将评估
true
导致
get_post_meta
返回
false
.
另一种可能性是,过滤器在此处返回有问题的值:
276 $check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single );
277 if ( null !== $check ) {
278 if ( $single && is_array( $check ) )
279 return $check[0];
280 else
281 return $check;
282 }
如果某些过滤器设置
$check
到具有
false
作为唯一的元素
null !== $check
是
true
然后返回该数组。例如:
add_filter(
\'get_post_metadata\',
function($meta) {
return array(false);
}
);
$t = get_post_meta(1,\'_edit_lock_dood\',false);
var_dump($t,empty($t));
注:简单
return
ing公司
false
从那个过滤器里过滤不出来。它必须是具有
false
作为单个元素,这就说明了代码无法工作的技术原因。
empty(false)
是true
但是empty(array(false))
是false
-- 数组不为空。它有一个元素,即使该元素是false
. 玩var_dump()
一点,你可以自己演示一下。例如:
$a = array(false);
var_dump($a);
var_dump(empty($a));
您的问题/代码没有足够的上下文,我无法进一步缩小范围。