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));
注:简单
returning公司
false 从那个过滤器里过滤不出来。它必须是具有
false 作为单个元素,这就说明了代码无法工作的技术原因。
empty(false) 是true 但是empty(array(false)) 是false-- 数组不为空。它有一个元素,即使该元素是false. 玩var_dump() 一点,你可以自己演示一下。例如:
$a = array(false);
var_dump($a);
var_dump(empty($a));
您的问题/代码没有足够的上下文,我无法进一步缩小范围。