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

问题描述 投票:2回答:4

代码段:

$save_dbarray = array(
    'email'         => '[email protected]',
    '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);

这可能吗?

wordpress optimization updates
4个回答
5
投票

虽然其他答案是您问题的创造性解决方案,但它们似乎无法解决实际问题或回答您的问题。

答案

没有.WordPress的update_post_meta一次只能在一个场上使用。你最好的选择是坚持上面使用的方法,使用foreach循环。其他答案提供了将元存储在单个字段中的方法,这对某些人来说可能很好,但是(在我的情况下)需要查询这些值,并且使用序列化或JSON编码的数组不会削减它。

不幸的是,WP没有提供“批量元更新”方法,如果确实如此,它可能是一个foreach循环。您总是可以编写一个函数来帮助您的代码更清洁,至少:

<?php
function update_post_meta_array( $post_id, $meta ) {
    if ( ! get_post( $post_id ) || ! is_array( $meta ) || empty( $meta ) ) {
        return false;
    }

    foreach ( $meta as $meta_key => $meta_value ) {
        update_post_meta( $post_id, $meta_key, $meta_value );
    }

    return true;
}

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');
    }
}

0
投票

为什么不尝试像这样的serialize()

根据update_post_meta()文档,您可以将$ meta_value作为数组传递,将序列化为字符串。

$save_dbarray = array(
  'email'         => '[email protected]',
  'adress'        => 'adress'
);


update_post_meta($post_id, 'my_custom_fields', $save_dbarray);

0
投票

一次可能有多个值,您的值可以生成转义json

$escaped_json = '{"key":"value with \\"escaped quotes\\""}';

update_post_meta( $id, 'double_escaped_json', wp_slash($escaped_json) );
© www.soinside.com 2019 - 2024. All rights reserved.