更改复杂中继器/灵活内容字段(ACF)中的特定值

时间:2016-05-18 作者:Maija Vilkina

所以我有一个非常复杂的ACF转发器/灵活的内容字段(本质上是一个页面生成器)。我想做的是从一篇文章中获得一个特定的子字段值($source_post) 并将其插入另一个帖子的相应位置($target_post) 以编程方式。我有一个指向子字段的映射,以数组和字符串的形式,它如下所示:

$fieldmap_array = array( 
    [2] => 0 
    [3] => columns 
    [4] => 1 
    [5] => layout_content 
    [6] => 0 
    [7] => image 
);
$fieldmap_string = [0][columns][1][layout_content][0][image];
(它是从我通过ajax调用动态获取的字符串中解析出来的)。

现在我可以从原始帖子中获得该子字段的值,如下所示:

$source_repeater_field_content = get_field(\'repeater_field\', $source_post_id);
foreach ($fieldmap_array as $key) : 
    $source_repeater_field_content = $repeater_field_content[$key];
endforeach;
在此循环结束时$source_repeater_field_content 将包含我正在查找的值。

我现在想做的是在目标帖子的相应位置插入该值,所以基本上是这样做的:

$target_repeater_field_content = get_field(\'repeater_field\', $target_post_id);
$target_repeater_field_content[0][\'columns\'][1][\'layout_content\'][0][\'image\'] = $source_repeater_field_content;
update_field(\'repeater_field\', $target_repeater_field_content, $target_post_id);
然而,我不能只键入一个选择这个正确子字段的字符串,我需要能够通过foreach 我不知道怎么做。

我甚至不知道如何正确地问这个问题:(我想我可以用数组指针来做吗?帮助?

(如果您对该应用程序感兴趣,我想在此页面生成器中的所有图像字段旁边添加一个按钮,该按钮可自动在页面翻译(wpml)之间同步图像。我的客户有一个5种语言的网站,他们抱怨要分别切换每种语言的图像需要做很多工作。由于这将在页面本身被翻译后完成,因此仅同步整个帖子内容是行不通的)。

1 个回复
最合适的回答,由SO网友:Maija Vilkina 整理而成

再次回答我自己的问题:PI最终找到了这个要点,让我可以通过点符号获取和设置数组变量:https://gist.github.com/elfet/4713488

因此,我加入了DotNotation类,现在我的代码如下所示(跳过这里的各种错误检查):

$fieldmap_string = \'key1.key2.key3.etc\';
$current_page_content = get_field(\'page_content\', $source_post_id);
$parsed_current_content = new DotNotation($current_page_content);
$image_field_value = $parsed_current_content->get($fieldmap_string);

$target_page_content = get_field(\'page_content\', $target_post_id);
$parsed_target_content = new DotNotation($target_page_content);
$parsed_target_content->set($fieldmap_string, $image_field_value);
$new_page_content = $parsed_target_content->getValues();
update_field(\'page_content\', $new_page_content, $target_post_id);
很有魅力。

相关推荐

Foreach循环内的if/ellif in_array仅显示一个POST的问题

如果某个类别的帖子对应一个类别,我会尝试为每个帖子指定一个特定的背景色。我的函数可以工作,但仅限于在结果中显示一篇文章。如果我删除此功能,将显示所有帖子。更多信息:在我的页面上,我有按类别筛选帖子的按钮。如果单击一次,我将显示该类别的所有帖子。但每个帖子都包含几个类别。我选择了一些类别来为每个帖子设置背景色,但这些类别与过滤器按钮不同。Wordpress显示此错误;您的站点出现严重错误,请了解有关调试WordPress的详细信息"E;在显示第一个帖子之后。以下是我的全部代码:<?php&#x