Woocommerce -使用PHP设置默认变量并将该值保存到数据库中



我有这段代码,它自动添加产品默认变量。

/*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 ); 

相关内容

  • 没有找到相关文章

最新更新