Intereting Posts
Qtranslate + Расширенные пользовательские поля: как создать многоязычный редактор wysiwyg? Заменить содержимое на странице WordPress после GET с php-страницы RSS-канал для сообщений, содержащих любой термин из таксономии Тип сообщения Постоянная ссылка Я хотел бы удалить отображение даты при предварительном просмотре фотографий Изменение http на https в wp_options Facebook не отображает соответствующий значок для некоторых сообщений Как я могу добавить «Использовать как признанное изображение» в пользовательский метабокс? Заказ пользовательских полей по алфавиту Использование AJAX с формами get_children () работает неправильно – только на один пост? Как передать значение из цикла foreach в функцию add_filter? активная ссылка для последнего сообщения на вертикальных вкладках Пользовательский столбец с сортировкой в ​​почтовом продукте Перенаправление на woocommerce checkout после добавления в корзину товара уже в корзине

Как связать многоязычные продукты с WP All Import (+ Polylang)?

Я использую WP All Import и Polylang для импорта более 500 продуктов. Однако я не могу связать продукты, загруженные из моего файла csv / xlsx. Структура файла выглядит так:

ID; Name; Description; Price; Language; 1; Product A; Description Product A; 5; en; 2; Продукт А; Описание Продукта А; 5; ru; 

На странице «edit import» я нашел вкладку «private taxonomies» и поместил палочку «Каждый продукт имеет один язык».

После загрузки csv у меня есть 2 разных продукта с английским и русским языками. Мне нужно связать их с WP All Import, а не вручную.

Вопрос в том, как связать продукты?

PS Я нашел учебник , но в моем случае нет такой вкладки.

Обратите внимание, что следующее хочет быть общим решением, а не строго связанным с woocommerce. Также обратите внимание, что в настоящее время я использую как версии Polylang, так и Wp All Import / Export Pro.

Тем не менее, я знаю, что разработчики polylang в настоящее время работают над аддоном для этой конкретной проблемы. Во всяком случае, мне удалось сделать это таким образом, пока:

1 -> при экспорте данных есть 2 поля, связанных с полиланом: languages и post_translations . Экспортируйте их тоже.

2 ->, когда вы импортируете свои данные, на экране wpallimport создайте еще 2 пользовательских поля и сохраните 2 выше. См. Приложение ниже. Теперь у вас есть данные о переводах с каждым сообщением.

3 -> установите этот фильтр:

 global $language_codes; $language_codes = array( // sample lang data 'italiano' => 'it' ,'english' => 'en' ,'espanol' => 'es' ,'francais' => 'fr' ,'deutsch' => 'de' ); add_action('pmxi_saved_post', 'set_imports_lang', 10, 2); function set_imports_lang($post_id, $data){ global $language_codes; // 'lingue' is italian, I guess it will be 'languages' in english: it's one of the 2 fields we saved before pll_set_post_language($post_id, $language_codes[sanitize_title($data->lingue)]); } 

На данный момент вы только что установили исходный язык каждого сообщения, не более того. Теперь нам нужно связать переводы друг с другом. Мы сделаем это с помощью функции, которую мы должны запустить ТОЛЬКО 1 ВРЕМЯ. Он просто перезагрузит любой экран / страницу wp.

 function set_imports_translations(){ global $wpdb; global $language_codes; // substitute 'enews' with your own post type $list = $wpdb->get_results(" SELECT m.post_id, m.meta_value pll, group_concat(concat_ws(':', m2.meta_value, m.post_id)) ids FROM $wpdb->posts p INNER JOIN $wpdb->postmeta m ON p.ID = m.post_id INNER JOIN $wpdb->postmeta m2 ON m.post_id = m2.post_id AND m2.meta_key = '_import_language_name' WHERE p.post_type = 'enews' AND m.meta_key = '_import_translations_id' GROUP BY pll "); // query results are something like this: // 10258 pll_57e92254c445f 10258:Italiano,10259:English,10260:Español,10261:Français,10262:Deutsch // 10263 pll_57e922552b8c6 10263:Italiano,10264:English,10265:Español,10266:Deutsch // 10267 pll_57e9225587124 10267:Italiano // extract data from the third column string foreach($list as $item){ $ids = explode(',',$item->ids); $list = array(); foreach($ids as $id){ $data = explode(':',$id); $list[$language_codes[sanitize_title($data[0])]] = intval($data[1]); } //set the translations pll_save_post_translations($list); } } set_imports_translations(); 

Это все. 🙂 Ах, приложение, упомянутое выше:

введите описание изображения здесь