2014-10-01 78 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

相關問題