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

bes*_*rld 3 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);
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以优化上面的代码?在这种简单的情况下,没关系,但是如果我的阵列很大,那么我猜更新时可能是性能问题?

我想做类似的事情:

update_post_meta($post_id, $save_dbarray);
Run Code Online (Sandbox Code Playgroud)

这可能吗?

pha*_*kat 7

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

答案

不会。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;
}
Run Code Online (Sandbox Code Playgroud)


jog*_*_pi 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);
Run Code Online (Sandbox Code Playgroud)