我相信这是我对你之前问题的解决方案。
我在回答中提到,代码没有处理具有多个值的键的偶然性,只有其中一些值是空的。原因是WordPress如何对待delete_post_meta
...
使用时delete_post_meta
, 前两个参数指定自定义字段的post和键。您有第三个可选参数,可用于指定键值对。所以
//Delete all post meta with key $key
delete_post_meta($post_id,$key)
//Delete all post meta with key $key AND value $value
delete_post_meta($post_id,$key,$value)
问题是如果
$value
为空,它将其视为第一个案例,并删除该帖子和键的所有帖子元。
这里有一个变通方法(也许非基于WordPress的方法更有效),逻辑如下;
识别具有空值的键检索所有非空值删除键,重新插入键,仅添加非空值编辑的foreach循环;
foreach($custom_fields as $key=>$values):
//$values is an array of values associated with $key - even if there is only one value.
//Filter to remove empty values.
//Be warned this will remove anything that casts as false, e.g. 0 or false
//- if you don\'t want this, specify a callback.
//See php documentation on array_filter
$nonemptyvalues = array_filter($values);
//If the $nonemptyvalues doesn\'t match $values then we removed an empty value(s).
if($nonemptyvalues!=$values):
//delete key
delete_post_meta($post_id,$key);
//re-add key and insert only non-empty values
foreach($nonemptyvalues as $nonemptyvalue){
add_post_meta($post_id,$key,$nonemptyvalue);
}
endif;
endforeach;
上述内容未经测试