【问题标题】:Woocommerce Product Export : add multiple meta fields using function add_export_data( $value, $product )Woocommerce 产品导出:使用函数 add_export_data( $value, $product ) 添加多个元字段
【发布时间】:2021-07-09 10:41:32
【问题描述】:

Wordpress 网站:Woocommerce 插件

我有多个需要导出的元产品字段。

我在 WooCommerce Product CSV Importer & Exporter Documentation 中查找了参考资料,但我在理解如何扩展示例以添加多个自定义列时遇到了一些麻烦。

这部分我很好

$columns 是一个数组

所以我需要做的就是为每个自定义字段添加一个数组项。

 /**
 * Add the custom column to the exporter and the exporter column menu.
 *
 * @param array $columns
 * @return array $columns
 */
function add_export_column( $columns ) {

    // column slug => column name
    $columns['my_custom_supplier_product_code'] = 'Supplier Product CODE';
    $columns['my_custom_supplier_product_desc'] = 'Supplier Product DESC';

    return $columns;
}
add_filter( 'woocommerce_product_export_column_names', 'add_export_column' );
add_filter( 'woocommerce_product_export_product_default_columns', 'add_export_column' );

这里我不太确定该怎么做

参考

/**
 * Provide the data to be exported for one item in the column.
 *
 * @param mixed $value (default: '')
 * @param WC_Product $product
 * @return mixed $value - Should be in a format that can be output into a text file (string, numeric, etc).
 */
function add_export_data( $value, $product ) {
    $value = $product->get_meta( 'custom_column', true, 'edit' );
    return $value;
}
// Filter you want to hook into will be: 'woocommerce_product_export_product_column_{$column_slug}'.
add_filter( 'woocommerce_product_export_product_column_custom_column', 'add_export_data', 10, 2 );

我的第一个自定义列的 mod

/**
 * Provide the data to be exported for one item in the column.
 *
 * @param mixed $value (default: '')
 * @param WC_Product $product
 * @return mixed $value - Should be in a format that can be output into a text file (string, numeric, etc).
 */
function add_export_data( $value, $product ) {
    $value = $product->get_meta( 'my_custom_supplier_product_code', true, 'edit' );
    return $value;
}
// Filter you want to hook into will be: 'woocommerce_product_export_product_column_{$column_slug}'.
add_filter( 'woocommerce_product_export_product_column_my_custom_supplier_product_code', 'add_export_data', 10, 2 );

现在如何添加第二列所需的内容?

我应该有

  • 2 x add_export_data 函数
  • 2 x 添加过滤器
/**
 * Provide the data to be exported for one item in CUSTOM COLUMN 1
 *
 * @param mixed $value (default: '')
 * @param WC_Product $product
 * @return mixed $value - Should be in a format that can be output into a text file (string, numeric, etc).
 */
function add_export_data_my_custom_supplier_product_code( $value, $product ) {
    $value = $product->get_meta( 'my_custom_supplier_product_code', true, 'edit' );
    return $value;
}
// Filter you want to hook into will be: 'woocommerce_product_export_product_column_{$column_slug}'.
add_filter( 'woocommerce_product_export_product_column_my_custom_supplier_product_code', 'add_export_data_my_custom_supplier_product_code', 10, 2 );

/**
 * Provide the data to be exported for one item in CUSTOM COLUMN 2
 *
 * @param mixed $value (default: '')
 * @param WC_Product $product
 * @return mixed $value - Should be in a format that can be output into a text file (string, numeric, etc).
 */
function add_export_data_my_custom_supplier_product_desc( $value, $product ) {
    $value = $product->get_meta( 'my_custom_supplier_product_desc', true, 'edit' );
    return $value;
}
// Filter you want to hook into will be: 'woocommerce_product_export_product_column_{$column_slug}'.
add_filter( 'woocommerce_product_export_product_column_my_custom_supplier_product_desc', 'add_export_data_my_custom_supplier_product_desc', 10, 2 );

请注意,我已经尝试过上面的代码,但出于某种原因

  • 我的所有列都显示在电子表格中
  • 有些是空的,没有从产品自定义字段中提取数据

我现在不是“到处乱搞”试图解决问题,而是退后一步,试图更好地了解它是如何工作的。

谢谢

【问题讨论】:

  • 从该文档看来,您似乎确实需要为每个单独的字段添加过滤功能。
  • 您对第一列的修改,是否按预期工作? “我的所有列都出现在电子表格中” - “全部”意味着什么,默认列,自定义列,两者都有?基于您期望看到的少于那些? “有些是空的,没有从产品自定义字段中提取数据” - 哪些?这些有什么特别的吗?您从中获得的返回值是否满足代码 cmets Should be in a format that can be output into a text file (string, numeric, etc) 中提到的条件?
  • @CBroe 我有 11 个字段需要导出。缺失值似乎不符合任何模式。有些 TEXT 字段已导出,有些则没有。有些 NUMBER 字段已导出,有些则没有。奇怪的是,当我选择 [x] Export all Metadata ...所有正确的值出现在相应的元数据字段中。根据我的帖子评论,我正在退后一步,有条不紊地工作,逐个添加并使用导出测试每个。
  • 也许首先要仔细检查所有地方的拼写。钩子的名称似乎与列 slug 直接相关,因此即使是最细微的拼写错误也可能导致它不会为相关字段调用任何函数。
  • 哦。补充一点信息:我的自定义字段是使用 ACF : Advanced Custom Fields 创建的。我确实直接进入了mysql数据库post_meta_ table' and double checked the meta_key`和meta_value。一切看起来都很好。

标签: php wordpress woocommerce


【解决方案1】:

在这里回答我自己的问题,以及可能对其他人有所帮助的建议。

是的,我在上面的代码 sn-p 中是正确的。 它确实按预期工作。

@CBroe 是正确的:

也许首先要仔细检查所有地方的拼写。的名字 钩子似乎直接与柱塞有关,所以即使是 那里最小的拼写错误可能会导致它不调用任何 相关字段的函数。

我的问题基本上是手指问题

我有 11 个自定义字段。

当 custom_field_slug 引用被其他代码分隔时,这会变得有点笨拙。

所以我在这里添加

  • 详细说明需要哪些步骤
  • 还有一个格式建议,让我可以更轻松地扫描整个相关项目组,以确保我没有任何拼写错误

第 1 步:将自定义列添加到数组以进行映射

/* [ mycode ] EXPORT : ADD custom columns to Exporter
------------------------------------------------------------------------------*/

/**
 * Add the custom columns to the exporter and the exporter column menu.
 *
 * @param array $columns
 * @return array $columns
 *
 */
 
function add_export_columns( $columns ) {

    // ---------------------------------------------------- Company SYSTEM Fields
    // column slug                                 > column name
    $columns['company_system_item_code']           = 'Company SYSTEM Item Code';
    $columns['company_system_item_description']    = 'Company SYSTEM Item Description';
    $columns['company_system_item_category']       = 'Company SYSTEM Item Category';
    $columns['company_system_item_unit_weight']    = 'Company SYSTEM Item Unit Weight';
    $columns['company_system_item_unit_price']     = 'Company SYSTEM Item Unit Price';

    // ---------------------------------------------------- Company WEBSITE Fields
    // column slug                                 > column name
    $columns['company_website_discount_percent']   = 'Company WEBSITE Discount Percent';
    $columns['company_website_item_unit_price']    = 'Company WEBSITE Item Unit Price';
    $columns['company_website_item_minimum_units'] = 'Company WEBSITE Item Minimum Units';
    
    // ---------------------------------------------------- Company SUPPLIER Fields
    // column slug                                 > column name
    $columns['company_supplier_item_code']         = 'Company_SUPPLIER Item Code';
    $columns['company_supplier_item_description']  = 'Company SUPPLIER Item Description';
    $columns['company_supplier_item_unit_price']   = 'Company SUPPLIER Item Unit Price';
    
    return $columns;
}
add_filter( 'woocommerce_product_export_column_names', 'add_export_columns' );
add_filter( 'woocommerce_product_export_product_default_columns', 'add_export_columns' );

第 2 步:所有导出数据函数

/* [ mycode ] EXPORT : GET data to be exported
------------------------------------------------------------------------------*/

/**
 *
 * Functions to provide the data to be exported for one item in EACH column.
 *
 */

// ------------------------------------------------------- Company SYSTEM Fields
function add_export_data_company_system_item_code( $value, $product ) {
    $value = $product->get_meta( 'company_system_item_code', true, 'edit' );
    return $value;
}
function add_export_data_company_system_item_description( $value, $product ) {
    $value = $product->get_meta( 'company_system_item_description', true, 'edit' );
    return $value;
}
function add_export_data_company_system_item_category( $value, $product ) {
    $value = $product->get_meta( 'company_system_item_category', true, 'edit' );
    return $value;
}
function add_export_data_company_system_item_unit_weight( $value, $product ) {
    $value = $product->get_meta( 'company_system_item_unit_weight', true, 'edit' );
    return $value;
}
function add_export_data_company_system_item_unit_price( $value, $product ) {
    $value = $product->get_meta( 'company_system_item_unit_price', true, 'edit' );
    return $value;
}

// ------------------------------------------------------- Company WEBSITE Fields
function add_export_data_company_website_discount_percent( $value, $product ) {
    $value = $product->get_meta( 'company_website_discount_percent', true, 'edit' );
    return $value;
}
function add_export_data_company_website_item_unit_price( $value, $product ) {
    $value = $product->get_meta( 'company_website_item_unit_price', true, 'edit' );
    return $value;
}
function add_export_data_company_website_item_minimum_units( $value, $product ) {
    $value = $product->get_meta( 'company_website_item_minimum_units', true, 'edit' );
    return $value;
}

// ------------------------------------------------------- Company SUPPLIER Fields
function add_export_data_company_supplier_item_code( $value, $product ) {
    $value = $product->get_meta( 'company_supplier_item_code', true, 'edit' );
    return $value;
}
function add_export_data_company_supplier_item_description( $value, $product ) {
    $value = $product->get_meta( 'company_supplier_item_description', true, 'edit' );
    return $value;
}
function add_export_data_company_supplier_item_unit_price( $value, $product ) {
    $value = $product->get_meta( 'company_supplier_item_unit_price', true, 'edit' );
    return $value;
}

第 3 步:所有过滤器

/**
 *
 * Add filters to hook in for EACH column
 *
 */
 
// ------------------------------------------------------- Company SYSTEM Fields
add_filter( 'woocommerce_product_export_product_column_company_system_item_code'         , 'add_export_data_company_system_item_code', 10, 2 );
add_filter( 'woocommerce_product_export_product_column_company_system_item_description'  , 'add_export_data_company_system_item_description', 10, 2 );
add_filter( 'woocommerce_product_export_product_column_company_system_item_category'     , 'add_export_data_company_system_item_category', 10, 2 );
add_filter( 'woocommerce_product_export_product_column_company_system_item_unit_weight'  , 'add_export_data_company_system_item_unit_weight', 10, 2 );
add_filter( 'woocommerce_product_export_product_column_company_system_item_unit_price'   , 'add_export_data_company_system_item_unit_price', 10, 2 );

// ------------------------------------------------------- Company WEBSITE Fields
add_filter( 'woocommerce_product_export_product_column_company_website_discount_percent'  , 'add_export_data_company_website_discount_percent', 10, 2 );
add_filter( 'woocommerce_product_export_product_column_company_website_item_unit_price'   , 'add_export_data_company_website_item_unit_price', 10, 2 );
add_filter( 'woocommerce_product_export_product_column_company_website_item_minimum_units', 'add_export_data_company_website_item_minimum_units', 10, 2 );

// ------------------------------------------------------- Company SUPPLIER Fields
add_filter( 'woocommerce_product_export_product_column_company_supplier_item_code'        , 'add_export_data_company_supplier_item_code', 10, 2 );
add_filter( 'woocommerce_product_export_product_column_company_supplier_item_description' , 'add_export_data_company_supplier_item_description', 10, 2 );
add_filter( 'woocommerce_product_export_product_column_company_supplier_item_unit_price'  , 'add_export_data_company_supplier_item_unit_price', 10, 2 );

还要注意我用来对齐组件的空白填充。

当您有许多不同长度的列 slug 时,扫描错误是很麻烦的。

如果您没有使用适当的列 slug 正确命名的 every 钩子和 every 函数,那么您将无法获得预期的结果。


希望这个可行的示例将来对其他人有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2022-08-19
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    相关资源
    最近更新 更多