我已经有20多个小时了,真的需要一些帮助。这就是我想做的。。对于每条记录,添加post meta。如果post meta已经存在,请更新数组中的每个字段。就像添加和更新单个自定义字段一样,除了此字段可以根据每个记录重复之外。
我知道如何为每条记录添加post meta。这是一个简单的部分,它为每个记录添加它,然后更新它,而不在更新之前/之后添加任何我很难处理的内容。为了写出来,这里只是根据每条记录添加重复字段。
foreach ($response->records as $record) {
$sales = \'ten\';
update_repeating_meta(\'assigned-sales\', $sales);
}
功能:
function update_repeating_meta($key, $value){
add_post_meta($this->current_post_id, $key, $value);
}
一切正常。到目前为止,我已经完成了添加每一个,然后进行更新的步骤,但这不起作用:
foreach ($response->records as $record) {
$sales = \'ten\';
update_repeating_meta(\'assigned-sales\', $sales);
}
新功能:
function update_repeating_meta($key, $value){
$post_meta = get_post_meta($this->current_post_id, $key);
if(!empty($post_meta)){
foreach($post_meta as $key => $value) {
update_post_meta($this->current_post_id, $key, $value);
}
}
elseif(empty($post_meta)){
add_post_meta($this->current_post_id, $key, $value);
}
}
此代码既不添加也不更新任何结果。另外,我认为它不支持在添加元数据后更新post元数组中的正确键/值。我仍在尽我最大的努力让它发挥作用,并了解更多。如果这些都不合理,请提前道歉。
如果有人有任何想法,我会非常感谢你的帮助。
SO网友:Marcin
由于您对所有值使用相同的键,因此可以简单地使用:
update_post_meta($this->current_post_id, \'assigned-sales\', $response->records);
这将把整个数组存储在一个元条目中,其键为“assigned sales”。如果该值存在,WordPress将更新该值,否则将创建一个新值,无需对此进行逻辑处理。
如果坚持为每个数组条目使用单独的元键,则应该为每个元键添加某种索引以使其唯一(这是假设您需要每个元键,而不仅仅是相同的最新值)。
我认为这应该可以做到:
foreach ($response->records as $key=>$record) {
$sales = \'ten\'; // <-- Where is this coming from?
update_post_meta($this->current_post_id, \'assigned-sales-\'.$key, $sales);
}
这里添加/更新的逻辑也是多余的,您不需要单独的函数。
这完全取决于你在追求什么,因此如果你的问题持续存在,请澄清问题以及数据的用途。
SO网友:cybmeta
如果您使用update_post_meta
, 将使用指定的key
. 如果key
存在,将更新元字段。如果有多个元字段具有相同的键,则所有这些元字段都将更新。
要添加重复字段,必须使用add_post_meta
将第三个参数设置为false
(已经是了false
默认情况下)。这样,如果key
无论是否存在,都将添加一个新的元字段,因此您可以有多个具有相同key
; 即,可重复字段:
add_post_meta( $post->ID, \'mykey\', \'value\' );
add_post_meta( $post->ID, \'mykey\', \'another_value\' );
现在,如果我使用
get_post_meta
对于mykey,我得到两个条目:
// $meta_values will be an array with all entries for \'mykey\'
$meta_values = get_post_meta( $post->ID, \'mykey\' );
// print "value"
echo $meta_values[0];
// print "another_value"
echo $meta_values[1];
如果需要更新“mykey”的特定条目,则必须指定要更新的旧值。这样,可以将要更新的元字段与具有相同键的其他元字段区分开来:
// only the entries for mykey with value "another_value" will be updated to "new_value"
update_post_meta( $post->ID, \'mykey\', \'new_value\', \'another_value\' );