Update 2: 签出@NateWr方法,使用add_post_meta
使用默认帖子:
add_post_meta( 1, \'my_items\', 1 );
add_post_meta( 1, \'my_items\', 2 );
add_post_meta( 1, \'my_items\', new \\stdClass );
var_dump(get_post_meta(1, \'my_items\', true));
echo "<br><br>";
var_dump(get_post_meta(1));
echo "<br><br>";
$GLOBALS[\'wp_object_cache\']->stats();
结果是:
string(1) "1"
array(1) {
["my_items"]=>array(3) {
[0]=> string(1) "1"
[1]=> string(1) "2"
[2]=> string(19) "O:8:"stdClass":0:{}"
}
}
这次,它命中了缓存,但元值不同。现在,如果我不知道
meta_key
我只使用post ID手动检索和解析post meta,很明显,我会得到错误的值。
<小时>Update 1: 签出@NateWr方法,使用update_post_meta
使用默认帖子:
update_post_meta(1, \'my_items\', 1);
update_post_meta(1, \'my_items\', 2);
update_post_meta(1, \'my_items\', 3);
var_dump( get_post_meta(1) );
echo "<br><br>";
$GLOBALS[\'wp_object_cache\']->stats();
结果:
array(1) {
["my_items"]=>array(1) {
[0]=>string(1) "3"
}
}
看起来像
Cache Hits
不会更改,WordPress仍然返回一个无意义的数组
meta_value
. 还是我错过了什么?
<小时>Question:
我试图通过在WP_Query
正在检索帖子。基本上是这样的:
add_filter(\'the_posts\', function($posts, $query)
{
if ( !is_admin() ) {
$mapper = new Vendor\\PostMapper($GLOBALS[\'wpdb\']);
foreach ($posts as $post) {
$post->post_link = get_permalink($post);
$post->post_meta = $mapper->getMetadata($post);
$post->post_thumbnail = $mapper->getThumbnail($post);
...
}
}
return $posts;
}, PHP_INT_MAX, 2);
一切正常,但在解析元数据时我感到不安。通过使用
metadata API, 如果我没有指定
meta_key
, 元值始终是仅包含一个元素的数组,例如:
array(3) {
["_edit_last"]=>array(1) {
[0]=>string(1) "1"
}
["_edit_lock"]=>array(1) {
[0]=>string(12) "1467358332:1"
}
["_thumbnail_id"]=>array(1) {
[0]=>string(3) "767"
}
}
我想我永远都不可能知道一切
meta_key
. 我也不知道为什么WordPress需要这么做。数组看起来毫无意义,这让我很困扰。
鉴于此meta_key
不需要,我也不指定meta_key
, 我真的需要你的帮助来理解:
Q1: Can一号meta_key
有多个meta_value
? 如果没有,为什么WordPress需要使用无意义的数组作为meta_value
?
Q2: 为什么WordPress不取消序列化所有序列化的元数据?