Wordpress ACF:如何通过自定义代码(PHP)将行添加到附加到用户的转发器字段

Posted

技术标签:

【中文标题】Wordpress ACF:如何通过自定义代码(PHP)将行添加到附加到用户的转发器字段【英文标题】:Wordpress ACF: How to add rows to a repeater field attached to a user via custom code (PHP) 【发布时间】:2014-09-12 19:15:43 【问题描述】:

我已经阅读了 ACF 和 ACF 中继器字段文档,但它让我有点困惑。

我有一群用户,我(通过 ACF)为每个用户附加了一个转发器字段(称为事件),转发器字段有一个称为事件 ID (event_id) 的子字段。

现在我面临的困境是,我希望能够根据用户尝试添加和删除的事件来添加和删除 event_id 行。

我知道 update_field($field_key, $value, $post_id) 函数,但我不太清楚如何利用它来将行添加到附加到的转发器字段的子字段中一个用户。我还需要一些关于如何删除项目的指导。

感谢任何帮助!

【问题讨论】:

您使用的是什么版本的 ACF?您使用的是最新最好的 ACF 版本:v5 还是仍在使用 v4? 【参考方案1】:

要将行添加到重复字段的子字段中,您可以:

$field_key = "repeater_field";
$user_id = "user_123"; // save to user (user id = 123)

$value = get_field($field_key, $user_id);
$value[] = array("event_id " => 25);
$value[] = array("event_id " => 30);
update_field( $field_key, $value, $user_id );

要删除项目,我会使用 php 函数,例如 Delete element from multidimensional-array based on value 接受的答案中的函数:

$value = removeElementWithValue($value, "event_id", 25);
update_field( $field_key, $value, $user_id );

至于在哪里添加这些代码(即动作挂钩)取决于何时您想添加/删除项目。

【讨论】:

太棒了,谢谢!我去看看这个然后回复你:) @ange008 非常感谢。浏览了 ACF 网站上的所有文档后,我仍然无法弄清楚如何做到这一点。它是如此简单,但是文档要么避免了这个问题,要么绕过了它,引用了update_sub_field() 之类的函数(顺便说一句,由于某种原因,它对我来说是未定义的)。再次,非常感谢! 如果您没有现有数据并需要添加行,也请查看此内容***.com/questions/33545314/… 检查print_r($value)的值,你可以更好地理解并比较新数组和旧数组。【参考方案2】:

只是对 Angelie Macalansag 答案的一些补充,这很好。

这是针对

可悲的是 $field_key 是个问题。它是您可以在自定义字段列列表中的 wordpress 管理中找到的键,但您必须单击屏幕顶部的“屏幕选项”,然后选中“显示字段键”。这个键看起来像“field_5c7d3d0cbcbd1”,我们的转发器字段名称看起来像“orders”。

update_field( 'orders', $value, $user_id ); 

仅当您在管理中手动将至少一条记录添加到转发器字段时才能正常工作。如果您尝试使用 php 插入空转发器字段,则该帖子的管理页面将因超时错误而崩溃。

update_field( 'field_5c7d3d0cbcbd1', $value, $user_id ); 

即使中继器仍然是空的,也可以实际工作。

当您有多个 wordpress 实例(或本地主机版本)并在管理中创建表时,这会带来问题。因为它们每个都有不同的键。

我无法找到一种根据临时列名获取键值的工作方式。我能找到的唯一解决方案是在数据库中搜索新创建的密钥,并在所有地方(其中 7 个)将其覆盖为我在 localhost 上生成的值,因此相同的代码可以在多个项目上运行。

这仅适用于中继器,对于 非中继器 acf 字段我使用此功能没有问题:

function acf_updateValue($fieldname, $value, $post_id)
    $field_key = 'field_' . uniqid();
    update_post_meta($post_id, $fieldname, $value);
    update_post_meta($post_id, '_'.$fieldname, $field_key);
    update_field($field_key, $value, $post_id);

用于例如 -

acf_updateValue('orderFinished', true, $post_id)
但这不适用于转发器字段。

【讨论】:

以上是关于Wordpress ACF:如何通过自定义代码(PHP)将行添加到附加到用户的转发器字段的主要内容,如果未能解决你的问题,请参考以下文章

ACF 中继器子字段 Shuffle(wordpress 高级自定义字段)

WordPress ACF:为自定义帖子类型添加默认行到管理部分的中继器字段类型

php 用于跟踪代码的ACF自定义字段中继器(Wordpress)

在Wordpress上使用ACF上的自定义字段时找不到“图库”字段类型

如何从 Wordpress 中的 Google Maps ACF 字段中删除纬度和经度?

在 Wordpress the_content() 中包含高级自定义字段 (ACF)