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

时间:2014-10-01 20:24:42

标签: php wordpress advanced-custom-fields

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

其中一个字段是关联部件。我想在此字段中使用Post Object,但我似乎无法找到有关格式化的任何文档,以便通过我的PHP脚本将post对象(或最好是多个对象)分配给该字段的值。

以下是我用来填充“规范”转发器字段的一些代码的示例,该字段包含两个子字段,标签和值。

$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 );

要修改关联的部分字段,我应该将其设置为这样的转发器,然后创建某种数组来填充它,或者我应该使用多选选项并仍然传递某种类型的数组。我很乐意去任何一条路线,我只需要一些方法来获得那些领域。

1 个答案:

答案 0 :(得分:2)

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

在第一次导入时,它创建了所有帖子,并添加了电子表格中显示的所有非关系自定义字段。我设置脚本以表格格式打印导入产品的帖子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;

逐行细分代码:

  1. 我检查此产品是否分配了相关的任何部件。
  2. 我将管道分隔的关联部件列表转换为数组。
  3. 我取消设置我们将用于存储帖子ID数组的数组。我这样做是为了在我们开始处理第二个产品时,第一个产品的相关部件仍未存储在数组中。
  4. 我开始循环遍历相关部分的数组。此数组中的每个项目都包含关联部分的标题。为了使其正常工作,标题必须拼写,格式化,并且所有其他方式与WordPress帖子的标题相同。
  5. 与3相同,现在仅限于此特定关联部分。
  6. 添加了这一行,以确保在数组的该项为空字符串时,我没有搜索关联的部分。
  7. 我检索与此特定关联项的标题匹配的WordPress帖子项。
  8. 我将相关产品的ID添加到数字数组中。
  9. 关闭第6行的if语句。
  10. 结束相关产品循环。
  11. 从我们的帖子ID数组中筛选出任何空字符串或空值。
  12. 我们将包含帖子ID的数字数组传递给高级自定义字段“update_field()”函数。第一个参数是Post Object自定义字段的唯一字段键。第二个参数是关联产品ID的数组。第三个参数是我们正在编辑的产品的ID。
  13. 关闭第1行的if语句。
  14. 我不得不猜测我需要用于字段值的格式。起初,我尝试传递一组Post Objects,但是没有用。在WordPress帖子编辑器中,我检查了代码并看到他们的输入字段的值(当选择另一个帖子时)是帖子ID。切换到包含帖子ID的数字数组后,update_field()函数完全接受它们而不会发生意外。

    我们已经完成了。