Я работаю над созданием сценария импорта для переноса данных из электронной таблицы Excel, предоставляемой клиентом, и преобразования каждой строки в публикацию WordPress. Пока что у меня есть сообщения, которые создаются и все пользовательские поля заполнены правильно … кроме одного.
Одно из полей — «Связанные части». Я хотел бы использовать объект Post для этого поля, но я не могу найти какую-либо документацию по форматированию, чтобы использовать его для назначения объекта 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 );
Чтобы изменить поле связанных частей, я должен установить его как ретранслятор, подобный этому, и затем создать какой-то массив для его заполнения, или я должен использовать опцию множественного выбора и все равно передать ему какой-то массив. Я счастлив идти любым путем, мне просто нужен какой-то способ, чтобы эти поля были там.
Невозможно добавить связанные продукты (другие публикации) во время первоначального импорта, поскольку при импорте первого продукта в 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;
Разбивка кода строка за строкой:
Я должен был угадать, какой формат мне нужно было использовать для значения поля. Сначала я попытался передать массив объектов Post, но это не сработало. В редакторе сообщений WordPress я проверил код и увидел, что значением их поля ввода (когда был выбран другой пост) был идентификатор этого сообщения. После переключения на числовой массив, содержащий идентификаторы сообщений, функция update_field () приняла их совершенно без происшествий.
Были сделаны.
Других решений пока нет …