我有这段代码,它自动添加产品默认变量。
/*xml extension*/
/*
* Add default attributes to a product
*/
function artbuild_default_product_attributes()
{
global $product;
if (! $product) {
$product = $GLOBALS['product_object'];
}
if (! $product) {
return;
}
$attributes = $product->get_attributes();
$defaultAttributes = array(
'pa_velkost',
'pa_farba',
'pa_material',
);
$changed=false;
foreach ($defaultAttributes as $key){
if (! isset($attributes[$key])){
$newattr = artbuild_make_product_attribute($key);
if ($newattr){
$attributes[$key] = $newattr;
}
$changed = true;
}
}
if ($changed){
$product->set_attributes($attributes);
}
}
/*
* added to last hook before rendering of Product Edit screen
*/
add_action('woocommerce_product_write_panel_tabs', 'artbuild_default_product_attributes');
我需要的是将默认变量保存到数据库中。因为当你打开这个函数的时候它又回到了非设定值,所以它可能不会被保存。
我需要它正常工作,因为XML提要,在那里我得到唯一的默认变体产品。有了这段代码,它的行为就像在整个商店中没有默认的变化设置,即使它表现得像有,所以我的提要是空的。一旦我手动保存了产品的默认变量,它就会像我需要的那样工作。你有什么好主意吗?
提前谢谢你。
当产品编辑屏幕打开时,你的代码正在执行,因为你正在使用这个钩子:woocommerce_product_write_panel_tabs
.
你应该使用钩子在产品保存后执行你的代码。有一个钩子:woocommerce_admin_process_product_object
自WooCommerce 3.0
function myfunction_save_product_meta( $product ) {
$attributes = $product->get_attributes();
$defaultAttributes = array(
'pa_velkost',
'pa_farba',
'pa_material',
);
$changed=false;
foreach ($defaultAttributes as $key){
if (! isset($attributes[$key])){
$newattr = artbuild_make_product_attribute($key);
if ($newattr){
$attributes[$key] = $newattr;
}
$changed = true;
}
}
$product->set_default_attributes( $attributes ); // This should set default attributes
}
add_action( 'woocommerce_admin_process_product_object', 'myfunction_save_product_meta' );
我不确定你的函数artbuild_make_product_attribute
中的代码是什么,但无论它是什么,它应该返回true
属性数组生成。
设置默认属性由:
$product->set_default_attributes( $attributes );