Php 在WooCommerce中更改虚拟、可下载、免费或延期订购产品的订单状态

Php 在WooCommerce中更改虚拟、可下载、免费或延期订购产品的订单状态,php,wordpress,woocommerce,product,orders,Php,Wordpress,Woocommerce,Product,Orders,我尝试用+1检查插件来稍微修改 因此,对于所有虚拟可下载免费(价格=0,00)和缺货产品,我希望Woocommerce将订单状态设置为“处理” 我的结果是,代码如下-Woocommerce设置订单状态“待定付款” 有没有办法将其切换到“处理”状态: add_action('woocommerce_checkout_order_processed', 'handmade_woocommerce_order'); function handmade_woocommerce_order( $orde

我尝试用+1检查插件来稍微修改 因此,对于所有虚拟可下载免费(价格=0,00)和缺货产品,我希望Woocommerce将订单状态设置为“处理”

我的结果是,代码如下-Woocommerce设置订单状态“待定付款” 有没有办法将其切换到“处理”状态:

add_action('woocommerce_checkout_order_processed', 'handmade_woocommerce_order');

function handmade_woocommerce_order( $order_id ) 
{
    $order = wc_get_order($order_id);
    foreach ($order->get_items() as $item_key => $item_values):
        $product_id = $item_values->get_product_id(); //get product id

    //get prodct settings i.e virtual
    $virtual_product = get_post_meta($product_id,'_virtual',true);
    $downloadable_product = get_post_meta($product_id,'_downloadable',true);
    $product_backordered=backorders_allowed($product_id,'_backorders',true);

    $price = get_post_meta($product_id,'_regular_price',true);

    $virtuald=get_option('hmade_vd');

    if($virtuald=='yes' && $downloadable_product=='yes' && $virtual_product=='yes' && $product_backordered=='yes')
    {
        if($price=='0.00')
        {
            $order->update_status( 'processing' );
        }

    }


endforeach;
}
注1:使用
woocommerce\u谢谢
hook


注2:要知道产品是虚拟的还是可下载的,可以使用以下函数
$product->is_virtual()
$product->可下载()反面<代码>获取后元()

更多信息:


注意3:最好不要在foreach循环中执行操作,之后使用检查

功能手工制作商业订单($order\u id){
如果(!$order\u id)返回;
//得到命令
$order=wc\u get\u order($order\u id);
//get order items=订单中的每个产品
$items=$order->get_items();
//设置变量
$found=false;
foreach($items作为$item){
//获取产品id
$product=wc\U get\U product($item['product\U id');
//是虚拟的
$is_virtual=$product->is_virtual();
//你可以下载吗
$is_downloadable=$product->is_downloadable();
//允许延期交货
$backorders_allowed=$product->backorders_allowed();
如果($是虚拟的&&$是可下载的&&$允许延期交货){
$found=true;
//正确,断开循环
打破
}
}
//真的
如有($已找到){
$order->update_状态(“处理”);
}
}
添加行动(“woocommerce\u Thankyu”,“手工制作的woocommerce\u order”,10,1);

谢谢,但我最初的问题是“如何添加检查产品和变更单状态是否允许延期订单”,目前我无法重新设计插件,想法是在当前架构中再添加一个检查伟大的示例,谢谢!唯一需要提及的是——
code
add_action('woocmerce_checkout_order_processed'、'handwide2_woocmerce_order',10,1)
code
仍在我的网站代码版本中运行,因为对于免费产品,“谢谢”页面对我来说是不可接受的(它显示下载链接)。无论如何谢谢你!此挂钩不适用于
$order->update_status()
,请参阅: