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)
这可能吗?
虽然其他答案是针对您问题的创造性解决方案,但它们似乎并不能解决实际问题或回答您的问题。
答案
不会。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)
为什么不尝试像这样使用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)
| 归档时间: |
|
| 查看次数: |
9716 次 |
| 最近记录: |