添加和更新重复的自定义字段元数据

时间:2015-04-07 作者:IYBITWC

我已经有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元数组中的正确键/值。我仍在尽我最大的努力让它发挥作用,并了解更多。如果这些都不合理,请提前道歉。

如果有人有任何想法,我会非常感谢你的帮助。

2 个回复
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\' );

结束