WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Добавление своих данных в стандартный экспорт CSV

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

Шаг 1 - Регистрируем новую колонку для экспорта

Данная операция не только регистрирует колонку для файла экспорта, но и для отображения в форме экспорта в поле выбора экспортируемых данных.

add_filter( 'woocommerce_product_export_product_default_columns', 'add_columns_to_wc_csv_export' );
add_filter( 'woocommerce_product_export_column_names', 'add_columns_to_wc_csv_export' );

/**
 * Регистрирует новую колонку для экспорта.
 *
 * @param string[] $column_names
 *
 * @return string[]
 */
function add_columns_to_wc_csv_export( $column_names ) {
	$column_names['key_my_field'] = 'Моя колонка';

	return $column_names;
}

Использовать сразу 2 фильтра не обязательно, выберите предпочтительный вариант:

Фильтр woocommerce_product_export_product_default_columns
Используйте, когда поле надо отображать в форме экспорта в выпадающем списке.
Фильтр woocommerce_product_export_column_names
Используйте, когда поле не надо отображать в форме экспорта в выпадающем списке.
меню

Шаг 2 - Заполняем колонку данными

Для простоты в примерах указано заполнение колонки статичной строкой, но там может быть вызов произвольной функции, которая вернёт нужные данные в формате, который можно вывести в текстовый файл (строковый, числовой и т. д.).

Задача может быть решена двумя способами, в зависимости от используемого фильтра.

Вариант 1 - Фильтр woocommerce_product_export_row_data

На фильтре woocommerce_product_export_row_data можно изменить любые данные. В нашем случае мы дополняем массив с данными нашим полем и его значением.

add_filter( 'woocommerce_product_export_row_data', 'add_data_to_wc_export', 10, 2 );

/**
 * Заполняет новую колонку данными. Вариант 1.
 *
 * @param array      $row
 * @param WC_Product $product
 *
 * @return array
 */
function add_data_to_wc_export( $row, $product ) {
	$row['key_my_field'] = 'Данные поля для экспорта';
	// $row['key_my_field'] = get_data_my_field();

	return $row;
}

Вариант 2 - Фильтр woocommerce_product_export_(export_type)_column_(column_id)

В первом варианте мы использовали общий фильтр, содержащий все поля и их данные. В этом фильтре рассмотрим решение на основе фильтра woocommerce_product_export_(export_type)_column_(column_id), который позволяет работать с каждым полем в отдельности, так как его имя динамическое и определяется двумя значениями:

export_type
Тип экспорта, используемый в именах фильтров. В нашем случае это product.
column_id
Ключ (id) поля. В нашем случае это key_my_field.

Наш код примет следующий вид:

add_filter( 'woocommerce_product_export_product_column_key_my_field', 'add_data_to_wc_export', 10, 2 );

/**
 * Заполняет новую колонку данными. Вариант 2.
 *
 * @param mixed      $value (По умолчанию: '')
 * @param WC_Product $product
 *
 * @return mixed
 */
function add_data_to_wc_export( $value, $product ) {
	$value = 'Данные поля my_field';
	// $value = get_data_my_field();

	return $value;
}

Какой вариант использовать? Судя по коду и фразе Filter for 3rd parties, то именно 2 вариант предпочтительнее, хотя и у 1 варианта "противопоказаний" выявлено не было.

1 коммент
  • Спасибо за отличное излождение материала!

    Хочется больше материалов по woocommerce -- хотя платформа довольно меделнная но очень гибкая в плане кастомизации...

    ИМХО для небольших магазинов отличное решение )

    Ответить27.Апр.2020 12:37 #