2014-10-01 1 views
1

Я работаю над созданием сценария импорта для переноса данных из электронной таблицы Excel, предоставляемой клиентом, и преобразования каждой строки в сообщение WordPress. До сих пор у меня создавались сообщения, и все пользовательские поля заполнялись правильно ... кроме одного.Как изменить значение поля Post Post Posts с дополнительными полями через PHP?

Одно из полей - связанные части. Я хотел бы использовать Post Object для этого поля, но я не могу найти документацию по форматированию, которая будет использоваться для назначения объекта 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.

При первом импорте он создал все сообщения и добавил все нереляционные настраиваемые поля, как они появились в электронной таблице. Я настраиваю сценарий для печати идентификаторов сообщений импортированных продуктов в формате таблицы, что позволяет мне легко скопировать и вставить все идентификаторы сразу из вывода скрипта обратно в поле «Идентификатор продукта» в электронной таблице. Скрипт проверяет наличие идентификатора продукта, и это поле определяет, будет ли он создавать новый пост/продукт или обновлять существующий.

После того, как все продукты были импортированы, а их идентификаторы уважения были добавлены в электронную таблицу, мы начали второй импорт. Мы использовали ту же таблицу, с той лишь разницей, что теперь у нее был добавлен идентификатор WordPress в столбец.

 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. Я отменил массив, который мы будем использовать для хранения массива почтовых идентификаторов. Я делаю это так, чтобы связанные части из первого продукта еще не сохранялись в массиве, когда мы начинаем обрабатывать второй продукт.
  4. Я начинаю прокручивать массив связанных частей. Каждый элемент в этом массиве содержит заголовок связанной части. Чтобы это работало, заголовки должны быть написаны, отформатированы и другими способами, идентичными заголовку WordPress.
  5. То же, что и 3, только теперь для этой конкретной связанной части.
  6. Эта строка была добавлена, чтобы гарантировать, что я не искал связанную часть, если этот элемент массива был пустой строкой.
  7. Я извлекаю элемент сообщения WordPress, который соответствует заголовку этого конкретного связанного элемента.
  8. Я добавляю идентификатор связанного продукта в числовой массив.
  9. Закройте оператор if в строке 6.
  10. Завершить цикл связанных продуктов.
  11. Отфильтруйте любые пустые строки или нулевые значения из нашего массива почтовых идентификаторов.
  12. Мы передаем числовой массив, содержащий идентификаторы сообщений, в расширенную настраиваемую область «update_field()». Первый параметр - это уникальный ключ поля для настраиваемого поля Post Object. Второй параметр - это массив идентификаторов связанных продуктов. Третий параметр - это идентификатор продукта, который мы редактируем.
  13. Закройте, если заявление по линии 1.

Я должен был догадаться, как к формату мне нужно использовать для значения поля. Сначала я попытался передать массив объектов Post, и это не сработало. В редакторе почты WordPress я проверил код и увидел, что значение поля ввода (когда было выбрано другое сообщение) - это идентификатор сообщений. После переключения на числовой массив, содержащий идентификаторы сообщений, функция update_field() приняла их совершенно без инцидентов.

Все готово.

+1

Этот метод также работает для поля «Отношения», которое также сохраняет список связанных идентификаторов сообщений, подобных этому. – rmmoul