Как вывести кастомные таксономии в CSV экспорте / импорте Woocommerce?
Есть кастомные таксономии, привязанные к $product. На странице товара, например, выводятся без проблем — просто по $post->ID. Но никак не удается отправить их данные в CSV экспортёр Woocommerce. Перебрал уйму вариантов — либо выдаёт нули, либо пустые значения, либо экспортёр повисает. Например, функция ниже отправляет именно пустые:
function add_export_data_publishers( $post ) { if (is_admin()) { $publishers = get_the_terms($post->ID, 'publisher'); if ( is_array($publishers) ) { $publisher_names = array(); foreach ($publishers as $publisher) { $publisher_names[] = $publisher->name; } return $publisher_names; } } } add_filter( 'woocommerce_product_export_product_column_publisher', 'add_export_data_publishers', 10, 2 );
Своими глазами видел, что это возможно сделать, но как — устал искать. Третий день с этим мучаюсь, может, кто-то знает?
Если речь о дефолтном импортере, то вот накидал статейку https://wp-kama.ru/plugin/woocommerce/adding-custom-export-columns
Да, дефолтный импорт-экспорт. Добавить колонки не проблема, а вот кастомные таксономии туда впихнуть не смог — не нашел, как их вообще вытащить без $post. А в импорте-экспорте, как я понял, WC вообще не видит ничего, что за пределами $product.
Я уже плюнул и вместо кастомных такосономий отправил данные в глобальные атрибуты, в принципе тоже работает. Но в статье я обнаружил то, на что раньше не обращал внимания — кусок про export_type. Надо будет поэкспериментировать, что будет, если туда пихнуть _post_
Но ведь товар, это и есть пост, только тип поста у него product. ID продукта = ID поста соответственно, а если на руках есть ID поста, то берем get_the_terms() и получаем прикрепленные к товару термины своей таксономии. Не вижу проблем.
Я их тоже не видел, пока не начал пробовать. Я, правда, PHP изучаю на ходу наощупь В общем, вот так выглядел вариант с get_the_terms(), и он не работал. Там же мне в комментарии справедливо заметили, что у класса WC_Product нет метода get_the_terms().
Если взять тот пример по ссылке (Шаг 2, Вариант 1), то код доработать совсем не много:
add_filter( 'woocommerce_product_export_row_data', 'add_data_to_wc_export', 10, 2 ); /** * @param array $row * @param WC_Product $product * * @return array */ function add_data_to_wc_export( $row, $product ) { $terms = get_the_terms( $product->get_id(), 'materials' ); if ( $terms && is_array( $terms ) ) { $term_names = wp_list_pluck( $terms, 'name' ); $row['key_my_field'] = implode( ', ', $term_names ); } return $row; }
Тут я предположил, что зарегистрирована таксономия materials
, где товару указывались материалы, из которых он сделал. И в поле надо сохранять через запятую все эти материалы, если они указаны.
Ну да, так оно и должно было работать. Я пилил по примеру на гитхабе WC, но там были то ли атрибуты, то ли тэги в примере. Спасибо, буду разбираться.
Фильтр всегда должен возвращать значение. Что за CSV экспортёр у тебя?