如果产品已经在购物篮中,我正在尝试从单个页面和产品上的“添加到购物车”按钮更改链接和文本

问题描述 投票:0回答:1

如果产品已经在购物篮中,我正在尝试通过单页和产品上的“添加到购物车”按钮更改链接和文本。我在主题中添加了此代码

add_filter('woocommerce_product_add_to_cart_text', 'wc_product_add_to_cart_text', 10, 2 );
add_filter('woocommerce_product_single_add_to_cart_text', 'wc_product_add_to_cart_text', 10, 2 );

function wc_product_add_to_cart_text( $text, $product ){

    $product_cart_id = WC()->cart->generate_cart_id( $product->get_id() );
    $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );

    if ( $in_cart ) {
        $text = "Click View Cart";
    }
    return $text;
}

add_action( 'woocommerce_simple_add_to_cart', 'wc_simple_add_to_cart' );
function wc_simple_add_to_cart(){
    global $product;
    $product_cart_id = WC()->cart->generate_cart_id( $product->get_id() );
    $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );

    if ( $in_cart ) {
        remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );
        echo sprintf( '<form class="cart"><a href="%s" class="single_add_to_cart_button button alt">%s</a></form>', wc_get_cart_url(), __( 'Click View Cart', 'woocommerce' ) );
    }
}

add_filter('woocommerce_product_add_to_cart_url', 'wc_product_add_to_cart_url', 10, 2 );
function wc_product_add_to_cart_url( $url, $product ){
    $product_cart_id = WC()->cart->generate_cart_id( $product->get_id() );
    $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );

    if ( $in_cart && is_shop() ) {
        $url = wc_get_cart_url();
    }
    return $url;
}

而且效果很好,所以问题是,有时当我从wp-admin发布内容时,有时会出现网站错误,但是错误只是片刻,当我再次将其恢复为正常状态时,我收到了一封电子邮件通知,

Error Details
=============
An error of type E_ERROR was caused in line 494 of the file /home/u920807414/domains/hbfonts.com/public_html/wp-content/themes/dokan-theme-develop/functions.php. Error message: Uncaught Error: Call to a member function generate_cart_id() on null in /home/u920807414/domains/hbfonts.com/public_html/wp-content/themes/dokan-theme-develop/functions.php:494
Stack trace:
#0 /home/u920807414/domains/hbfonts.com/public_html/wp-includes/class-wp-hook.php(288): wc_product_add_to_cart_url('?add-to-cart=14...', Object(WC_Product_Simple))
#1 /home/u920807414/domains/hbfonts.com/public_html/wp-includes/plugin.php(206): WP_Hook->apply_filters('?add-to-cart=14...', Array)
#2 /home/u920807414/domains/hbfonts.com/public_html/wp-content/plugins/woocommerce/includes/class-wc-product-simple.php(51): apply_filters('woocommerce_pro...', '?add-to-cart=14...', Object(WC_Product_Simple))
#3 /home/u920807414/domains/hbfonts.com/public_html/wp-content/plugins/woocommerce/templates/loop/add-to-cart.php(26): WC_Product_Simple->add_to_cart_url()
#4 /home/u920807414/domains/hbfonts.com/public_html/wp-content/plugins/woocommerce/includes/wc-core-functions.php(249): include('/home/u92080741...')
#5 /home/u920807414/d

有人可以帮我吗谢谢

php wordpress xcode function add
1个回答
0
投票

使用此选项,您必须添加代码以停止ajax调用。首次单击按钮后,它将滑动到顶部。

add_action( 'woocommerce_simple_add_to_cart', 'wc_simple_add_to_cart' );
function wc_simple_add_to_cart(){
    global $product;
    $product_cart_id = WC()->cart->generate_cart_id( $product->get_id() );
    $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );
$url = 'http://example.com'; // add your url here

    if ( $in_cart ) {
        remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );
        echo sprintf( '<form class="cart"><a href="%s" class="single_add_to_cart_button button alt">Button Title</a></form>', $url, __( 'View Cart', 'woocommerce' ) );
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.