当前位置: 首页 > 知识库问答 >
问题:

WooCommerce上的自定义优惠券错误-“未捕获错误:在null上调用成员函数get_cart()

万志专
2023-03-14

我正在尝试使用PHP在WooCommerce中创建一个自定义优惠券代码,它基本上会将购物车中标签名为“main”的每件商品的价格折扣到10。它通过计算购物车中标记为“main”的商品数量,然后计算每个商品的总价,并由此计算$折扣变量中所需的折扣。请参见下面的代码:

$tag_name = 'main';
$tag_count = 0; 

foreach(WC()->cart->get_cart() as $cart_item)  {
    if( has_term( $tag_name, 'product_tag', $cart_item['product_id'])){
        $tag_count += $cart_item['quantity'];
        $price = $cart_item['data']->get_price();
        $float_value_price += floatval($price); 
    }
}

$discount = $float_value_price - (10*$tag_count);
$discount_string = number_format($discount, 2);


$coupon_code = 'testing'; // Code
$amount = $discount_string; // Amount
$discount_type = 'fixed_cart'; // Type: fixed_cart, percent, fixed_product, percent_product

$coupon = array(
'post_title' => $coupon_code,
'post_content' => '',
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'shop_coupon');

$new_coupon_id = wp_insert_post( $coupon );

// Add meta
update_post_meta( $new_coupon_id, 'discount_type', $discount_type );
update_post_meta( $new_coupon_id, 'coupon_amount', $amount );
update_post_meta( $new_coupon_id, 'individual_use', 'no' );
update_post_meta( $new_coupon_id, 'product_ids', '' );
update_post_meta( $new_coupon_id, 'exclude_product_ids', '' );
update_post_meta( $new_coupon_id, 'usage_limit', '' );
update_post_meta( $new_coupon_id, 'expiry_date', '' );
update_post_meta( $new_coupon_id, 'apply_before_tax', 'yes' );
update_post_meta( $new_coupon_id, 'free_shipping', 'no' );



当我尝试激活此代码时,会收到以下错误消息

您试图保存的代码段在第4行产生了致命错误:

未捕获错误:在/homepages/9/d392621230/htdocs/clickandbuilds/woocmerceexperience/wp content/plugins/code snippets/php/admin menus/class edit menu.php(213):eval()中调用null上的成员函数get_cart()“d代码:4堆栈跟踪:#0/homepages/9/d392621230/htdocs/clickandbuilds/woocmerceexperience/wp content/plugins/code snippets/php/admin menu/class edit menu.php(213):eval()#1/homepages/9/d392621230/htdocs/clickandbuilds/woocmerceexperiment/wp content/plugins/code snippets/php/admin menu/class edit menu.php(263):code snippets\u edit\u menu-


我已经看了一段时间了,似乎找不到解决办法。如果有人能解决这个问题,我将不胜感激。谢谢。

共有1个答案

景永望
2023-03-14

您可以用更简单的方法实现相同的结果。您可以在WooCommerce仪表板中创建优惠券代码,将其设置为固定产品折扣。

然后用您的代码找到所需的产品及其ID。然后,您可以使用set_product_ids()将这些ID传递给您以前创建的优惠券。不要忘记使用保存()保存新的元信息。

然后将新优惠券代码应用到购物车。

代码如下所示:

add_action( 'woocommerce_before_cart', 'cw_coupons_matched' );
function cw_coupons_matched() { 
    global $woocommerce;
    $coupon_code = 'your_discount_code';

    # Get product ID's
    foreach( WC()->cart->get_cart() as $cart_item ){
        var_dump($cart_item['data']->name);
        if (strpos($cart_item['data']->name, 'string_to_search') !== false) { 
            $product_ids[] = $cart_item['product_id'];
        }
    }

    # Adding product ID's to coupon
    $c = new WC_Coupon($coupon_code);
    $c->set_product_ids($product_ids);
    $c->save();

    # Adding discount coupon to cart
    if ( $woocommerce->cart->has_discount( $cw_coupon ) ) return;
    foreach ( $woocommerce->cart->cart_contents as $key => $values ) {
        if( in_array( $values['product_id'], $product_ids ) ) {
            $woocommerce->cart->add_discount( $coupon_code );
            wc_print_notices();
        }
    }

} 
 类似资料:
  • 我收到WordPress发来的关于致命错误的消息。它与WPML字符串翻译插件后端中的特定页面相关。我认为有一个特别的翻译: 访问发现错误的页面(xxxxxxxx/wp admin/admin.php?page=wpml translation management/menu/translations-queue.php) 它还说 错误详细信息===========在文件/nas/content/l

  • 我们一直很好地使用WooCommerce订阅,但是当从用户的“我的帐户”部分查看订单时,它开始引起问题,打开WP_DEBUG显示如下: 未捕获的错误:在/wp-content/plugins/woocommerce-subscriptions/includes/wcs-user-functions.php:381中调用bool中的成员函数get_user_id() 第381行是: 鉴于这是一个官方

  • 这是三个文件 我得到一个错误“Fatal error:Uncattle error:Call to a member function prepare()on null”。这段代码运行在我的localhost上没有问题,但是当它上传到服务器时,我就出现了这个问题。我在本地使用PHP8和xammp软件。我是三年级学生,请帮帮我。 文件database.php: } 文件admin.php

  • 好吧,我知道我试图混合mysql和MySQLI....

  • 问题内容: 我试图与XAMPP和MySQL服务器建立简单连接,但是每当我尝试输入数据或连接到数据库时,都会出现此错误。 致命错误:未捕获错误:在C:\ xampp \ htdocs \ register.php:22中调用未定义函数mysql_connect() 堆栈跟踪:#0 {main}在第22行的C:\ xampp \ htdocs \ register.php中抛出 第22行的示例: 问题

  • 我在尝试访问http://localhost/phpmyadmin/时收到以下错误: 在这里回顾了类似的主题后,我做了以下工作: null 我运行的是Windows10,Apache2.4-64bits、PHP7-64bits和mysqlserver5.7。Apache运行良好,PHP也运行良好(访问info.PHP无需担心) 谢了。