是否可以在一次调用中更新数组中的post meta?

时间:2014-03-19 10:05:21

标签: wordpress optimization updates

代码段:

$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);

这可能吗?

4 个答案:

答案 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) );