所以我有一个非常复杂的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种语言的网站,他们抱怨要分别切换每种语言的图像需要做很多工作。由于这将在页面本身被翻译后完成,因此仅同步整个帖子内容是行不通的)。
最合适的回答,由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);
很有魅力。