2014-10-01 81 views
1

我正在创建一个导入脚本,用于从客户端提供的Excel电子表格中迁移数据,并将每行转换为一个WordPress邮件。到目前为止,我已经创建了帖子,并且所有自定义字段都被正确填充了......除了一个。如何通过PHP修改高级自定义字段发布对象字段的值?

其中一个字段是Associated Parts。我想为这个字段使用Post对象,但是我似乎无法找到任何有关格式的文档,以便通过我的PHP脚本为该字段的值分配后置对象(或最好是多个对象)。

以下是我用来填充具有两个子字段,标签和值的“规格”中继器字段的一些代码示例。

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

要修改相关零件领域,我应该将它作为这样一个中继器,然后建立某种形式的阵列来填充,或者我应该使用多选选项,仍然可以通过某种类型的数组到它。我很高兴去任何一条路线,我只需要一些方法来让那些领域在那里。

回答

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语句

我不得不猜测,我需要使用的字段的值的格式。起初,我尝试传递一个Post对象的数组,并没有奏效。在WordPress的帖子编辑器中,我检查了代码,并看到他们的输入字段(当选择另一个帖子时)的值是帖子ID。在切换到包含帖子ID的数组数组之后,update_field()函数完全接受了它们,没有发生任何意外。

我们完成了。

+1

此方法也适用于“关系”字段,该字段还会像这样保存关联的帖子ID列表。 – rmmoul 2014-10-25 19:39:49

相关问题