Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果商业订单包含特定类别的项目,则设置自定义状态_Php_Wordpress_Woocommerce_Status_Orders - Fatal编程技术网

Php 如果商业订单包含特定类别的项目,则设置自定义状态

Php 如果商业订单包含特定类别的项目,则设置自定义状态,php,wordpress,woocommerce,status,orders,Php,Wordpress,Woocommerce,Status,Orders,通过以下代码,我在WooCommerce中添加了一个自定义订单状态(Abonnement) 功能寄存器\连接\顺序\状态(){ 寄存器后状态('wc abonnement',数组( 'label'=>'Abonnement', “public”=>正确, “从搜索中排除”=>false, “在\u管理\u所有\u列表中显示\u”=>true, “在管理状态列表中显示”=>true, 'label_count'=>\u n_noop('abonnement(%s)','abonnement(%s)

通过以下代码,我在WooCommerce中添加了一个自定义订单状态(Abonnement)

功能寄存器\连接\顺序\状态(){
寄存器后状态('wc abonnement',数组(
'label'=>'Abonnement',
“public”=>正确,
“从搜索中排除”=>false,
“在\u管理\u所有\u列表中显示\u”=>true,
“在管理状态列表中显示”=>true,
'label_count'=>\u n_noop('abonnement(%s)','abonnement(%s)'
) );
}
添加操作('init','register\u abonnement\u order\u status');
//添加到WC订单状态列表
功能将连接添加到订单状态($order\U STATUS){
$new_order_status=array();
//处理后添加新订单状态
foreach($key=>$status的订单状态){
$new_order_status[$key]=$status;
if('wc processing'==$key){
$new_order_status['wc-abonnement']='abonnement';
}
}
返回$new\u order\u状态;
}
添加过滤器(“wc订单状态”、“添加连接到订单状态”);

然后我用回答代码来进一步帮助我

我修改了答案,进入下一步:

功能操作\u商业\u订单\u状态\u更改($order\u id、$old\u status、$new\u status、$order){
//比较
如果($old_status===‘processing’){
//获取项目
$items=$order->get_items();
foreach($items作为$item){
//获取产品类别
全球$员额;
$terms=get_the_terms($post->ID,'product_cat');
foreach($terms作为$term){
$product\U cat\U id=$term->term\U id;
打破
}
$product_cat=$item->get_product_cat();
如果($product_cat==249){
$order->update_status('abonnement');
打破
}
}
}
}
添加行动('woocommerce\u order\u status\u changed'、'action\u woocommerce\u order\u status\u changed');
但这似乎不起作用。所以我不确定我错过了什么?

  • 通过代码中添加的注释标记进行解释
若要在每次订单后自动更改订单状态,当订单包含属于特定类别的项目时,请使用:

/**
*变更单状态
*/
功能操作\u woocommerce\u感谢($order\u id){
如果(!$order\u id)返回;
//获取订单对象
$order=wc\u get\u order($order\u id);
//特定类别:术语名称/术语id/slug。可以添加几个,用逗号分隔
$categories=数组('categorie-1','categorie-2',15,16);
//旗
$found=false;
//循环浏览订单项
foreach($order->get_items()作为$item){
//产品ID
$product\U id=$item->get\U VARIANCE\U id()>0?$item->get\U VARIANCE\U id():$item->get\U product\U id();
//有术语(产品类别)
if(具有术语($categories,$product\u cat',$product\u id)){
$found=true;
打破
}
}
//真的
如有($已找到){
//没有“wc-”前缀的状态| |一些选项:挂起、处理、暂停、完成、取消、退款、失败等。。。
$order->update_status('abonnement');
}
}
增加行动('woocommerce\u Thankyu','action\u woocommerce\u Thankyu',10,1);
使用
woocommerce\u order\u status\u changed
钩子,您可以将订单状态从和转换为,以将订单状态更改为任何其他状态

功能操作\u商业\u订单\u状态\u更改($order\u id、$old\u status、$new\u status、$order){
//比较
如果($old_status===‘processing’){
//特定类别:术语名称/术语id/slug。可以添加几个,用逗号分隔
$categories=数组('categorie-1','categorie-2',15,16);
//旗
$found=false;
//循环浏览订单项
foreach($order->get_items()作为$item){
//产品ID
$product\U id=$item->get\U VARIANCE\U id()>0?$item->get\U VARIANCE\U id():$item->get\U product\U id();
//有术语(产品类别)
if(具有术语($categories,$product\u cat',$product\u id)){
$found=true;
打破
}
}
//真的
如有($已找到){
//没有“wc-”前缀的状态| |一些选项:挂起、处理、暂停、完成、取消、退款、失败等。。。
$order->update_status('abonnement');
}
}
}
添加行动('woocommerce\u order\u status\u changed','action\u woocommerce\u order\u status\u changed',10,4);


可选:要注册新订单状态,您可以用此更新代码替换当前代码

/**
*登记订单状态
*/
功能过滤器\商业\注册\商店\订单\发布\状态($order\状态){
//状态必须以“wc-”开头
$order\U状态['wc-ABONNENT']=数组(
“标签”=>x('Abonnement','Order status','woocommerce'),
“public”=>false,
“从搜索中排除”=>false,
“在\u管理\u所有\u列表中显示\u”=>true,
“在管理状态列表中显示”=>true,
/*转换器:%s:订单数*/
‘label_count’=>noop(‘Abonnement(%s)’,‘Abonnement(%s)’,‘woocommerce’,
);
返回$order\u状态;
}
添加过滤器('woocommerce\u register\u shop\u order\u post\u Status','filter\u woocommerce\u register\u shop\u order\u post\u Status',10,1);
/**
*在下拉列表中显示订单状态@Single Order
*/
功能过滤器\u wc\u订单\u状态($order\u status){
//状态必须以“wc-”开头
$order_status['wc-abonnement']=\u x('Abonnem