如何通过PHP修改高级自定义字段Post对象字段的值?

如何通过PHP修改高级自定义字段Post对象字段的值?,php,wordpress,advanced-custom-fields,Php,Wordpress,Advanced Custom Fields,我正在创建一个导入脚本,以从客户端提供的Excel电子表格中迁移数据,并将每一行转换为WordPress帖子。到目前为止,我已经创建了帖子,并且正确填写了所有自定义字段……除了一个 其中一个字段是关联零件。我想为这个字段使用Post对象,但是我似乎找不到任何关于通过PHP脚本将Post对象(或者最好是多个对象)分配给这个字段值的格式的文档 下面是我用来填充“specifications”repeater字段的一些代码的示例,该字段有两个子字段:label和value $field_key = '

我正在创建一个导入脚本,以从客户端提供的Excel电子表格中迁移数据,并将每一行转换为WordPress帖子。到目前为止,我已经创建了帖子,并且正确填写了所有自定义字段……除了一个

其中一个字段是关联零件。我想为这个字段使用Post对象,但是我似乎找不到任何关于通过PHP脚本将Post对象(或者最好是多个对象)分配给这个字段值的格式的文档

下面是我用来填充“specifications”repeater字段的一些代码的示例,该字段有两个子字段:label和value

$field_key = 'field_53ef95cead820';
$value = get_field($field_key, $postID);
foreach($specs as $spec):
    $specArray = explode(':',$spec);
    if($specArray[0] && $specArray[1]):
        $value[] = array("label" => $specArray[0], "value" => $specArray[1]);
    endif;
    ++$i;
endforeach;
update_field( $field_key, $value, $postID );

要修改关联零件字段,我应该像这样将其设置为一个转发器,然后创建某种数组来填充它,还是应该使用multi-select选项并仍然向其传递某种数组。我很乐意选择这两种方法,我只是需要一些方法来获取这些字段。

在初始导入期间不可能添加关联产品(其他帖子),因为当您将第一个产品导入WordPress时,其关联部分尚未创建。由于这个原因,我不得不在WordPress中运行两个导入的电子表格

在第一次导入时,它创建了所有帖子,并添加了所有非关系型自定义字段,因为它们出现在电子表格中。我设置脚本,以表格格式打印导入产品的post ID,使我能够轻松地将脚本输出中的所有ID复制并粘贴回电子表格中的“产品ID”字段。脚本检查是否存在产品ID,该字段将确定它是在创建新的帖子/产品还是在更新现有的帖子/产品

一旦所有的产品都被导入,并且他们的尊重ID被添加到电子表格中,我们就开始了第二次导入。我们使用了完全相同的电子表格,唯一的区别是现在它在一列中添加了WordPress ID

        1. if($product['Associated Parts']):
        2.      $assParts = explode('|',$product['Associated Parts']);
        3.      unset($assIDs);
        4.      foreach($assParts as $assPart):
        5.          unset($assID);
        6.          if($assPart):
        7.              $assID = get_page_by_title( $assPart , 'OBJECT' , 'product' );
        8.              $assIDs[] = $assID->ID;
        9.          endif;
        10.     endforeach;
        11.     $assIDs = array_filter($assIDs);
        12.     update_field( 'field_542c5dc44272e' , $assIDs , $product['Page ID'] );
        13. endif;
代码逐行分解:

  • 我检查此产品是否分配了任何相关部件
  • 我将关联零件的管道分隔列表转换为数组
  • 我取消设置了用于存储post ID数组的数组。我这样做是为了当我们开始处理第二个产品时,第一个产品的相关部分不会仍然存储在阵列中
  • 我开始在关联部件的数组中循环。此数组中的每个项都包含关联零件的标题。为了使这项工作,标题必须拼写、格式和所有其他方式与WordPress文章的标题相同
  • 与3相同,只是现在它用于这个特定的关联部分
  • 添加此行是为了确保在数组项为空字符串时,我没有搜索关联的部分
  • 我检索与此特定关联项的标题匹配的WordPress帖子项
  • 我将关联产品的ID添加到数字数组中
  • 关闭第6行的if语句
  • 结束关联产品循环
  • 从我们的post ID数组中过滤掉任何空字符串或空值
  • 我们将包含post ID的数字数组传递到高级自定义字段“update_field()”函数中。第一个参数是Post对象自定义字段的唯一字段键。第二个参数是关联产品ID的数组。第三个参数是我们正在编辑的产品的ID
  • 关闭第1行的if语句 我不得不猜测字段值需要使用的格式。起初,我尝试传入一个Post对象数组,但没有成功。在WordPress post编辑器中,我检查了代码,发现它们的输入字段(当选择另一篇文章时)的值就是posts ID。在切换到包含posts ID的数字数组后,update_field()函数完美地接受了它们,没有任何意外


    我们完成了。

    此方法也适用于Relationship字段,该字段还保存了相关帖子ID的列表,如下所示。