代码段:
$save_dbarray = array(
'email' => 'email@email.se',
'adress' => 'adress'
);
//Save values from created array into db
foreach($save_dbarray as $meta_key=>$meta_value) {
update_post_meta($post_id, $meta_key, $meta_value);
}
有没有办法优化上面的代码?在这个简单的场景中,它并不重要,但如果我有一个大型阵列,那么我想在更新时可能会出现性能问题?
我想做点什么:
update_post_meta($post_id, $save_dbarray);
这可能吗?
答案 0 :(得分:5)
虽然其他答案是您问题的创意解决方案,但它们似乎无法解决实际问题或回答您的问题。
答案
没有。 WordPress的:s/\vfoo/bar/gc
一次仅适用于一个字段。您最好的选择是坚持上面使用的方法,使用update_post_meta
循环。其他答案提供了将元存储在单个字段中的方法,这对某些人来说可能很好,但是(在我的情况下)需要查询这些值,并且使用序列化或JSON编码的数组不会削减它。
不幸的是,WP没有提供“批量元更新”方法,如果确实如此,它可能是foreach
循环。您总是可以编写一个函数来帮助您的代码更清洁,至少:
foreach
答案 1 :(得分:1)
phatskat是正确的,因为没有内置方法可以执行此操作,并且需要foreach循环。
这是我发现的最有效的-在博客文章中也对此进行了记录:
add_action('init', 'bulk_update_post_meta_data');
function bulk_update_post_meta_data() {
$args = array(
'posts_per_page' => -1,
'post_type' => 'POSTTYPEHERE',
'suppress_filters' => true
);
$posts_array = get_posts( $args );
foreach($posts_array as $post_array) {
update_post_meta($post_array->ID, 'POSTMETAKEY', 'NEWVALUE');
}
}
答案 2 :(得分:0)
为什么不试试这样的serialize():
根据update_post_meta()文档,您可以将$ meta_value作为数组传递,将序列化为字符串。
$save_dbarray = array(
'email' => 'email@email.se',
'adress' => 'adress'
);
update_post_meta($post_id, 'my_custom_fields', $save_dbarray);
答案 3 :(得分:0)
一次可能有多个值,您的值可以生成转义json
$escaped_json = '{"key":"value with \\"escaped quotes\\""}';
update_post_meta( $id, 'double_escaped_json', wp_slash($escaped_json) );