WooCommerce - unset “<product> removed notice…” on cart page

爷,独闯天下 提交于 2019-12-01 11:54:37

问题


actions and filters. On my WooCommerce site I get the following message when I remove a product from the shopping cart:

"<product name>" removed. Undo?

Looking over WooCommerce source code I have found a conditional statement in class-wc-form-header.php as part of the function update_cart_action():

$removed_notice .= ' <a href="' . esc_url( WC()->cart->get_undo_url( $cart_item_key ) ) . '">' . __( 'Undo?', 'woocommerce' ) . '</a>';

But I can't find the way to use it for eliminate this notice. I have try css solutions but it didn't work:

PS: that may not be the code snippet that is bothering me, but its the only one I have found that seems to make sense.

How can I remove this bothering notice?

Thanks.


回答1:


You can do that in different ways:

1. Overriding the notices.php template:
You have first (if not done yet) to copy woocommerce templates folder inside your active child theme or theme, then rename it woocommerce. Then open/edit notices/notices.php and try to replace the code:

<?php
/**
 * Show messages
 * ... Blabla ... / ... blabla ...
 * @version     1.6.4
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

if ( ! $messages ){
    return;
}

?>

<?php foreach ( $messages as $message ) : // Change your template code from here
    if ( strpos( $message, 'removed' ) === false ) : ?>
    <div class="woocommerce-info"><?php echo wp_kses_post( $message ); ?></div>
<?php endif;
endforeach; ?>

2. Using hooks:

function remove_added_to_cart_notice()
{
    $notices = WC()->session->get('wc_notices', array());

    foreach( $notices['notices'] as $key => &$notice){
        if( strpos( $notice, 'removed' ) !== false){
            $added_to_cart_key = $key;
            break;
        }
    }
    unset( $notices['notices'][$added_to_cart_key] );

    WC()->session->set('wc_notices', $notices);
}
add_action('woocommerce_before_single_product','remove_added_to_cart_notice',1);
add_action('woocommerce_shortcode_before_product_cat_loop','remove_added_to_cart_notice',1);
add_action('woocommerce_before_shop_loop','remove_added_to_cart_notice',1);

3. Using CSS (with something like):

.woocommerce-cart .woocommerce-message {
    display: none !important;
}

References:

  • Wordpress - Woocommerece remove "Added to Cart" message
  • New wc-notice-functions.php on github



回答2:


I had to change this to get it to work. Specifically, the array field is singular notice or at least it is now.

$notices = WC()->session->get('wc_notices', array());
foreach( $notices['notice'] as $key => &$notice){
    if( strpos( $notice, 'whilst' ) !== false){ 
        $BadNotice_key = $key;
        unset( $notices['notice'][$BadNotice_key] );
        WC()->session->set('wc_notices', $notices);
        break;
    }
}



回答3:


1. Easy way: in wp-content/plugins/woocommerce/includes/class-wc-form-handler.php

2. remove/disable this line: wc_add_notice( $removed_notice ); (line 523) like this

            if ( $product && $product->is_in_stock() && $product->has_enough_stock( $cart_item['quantity'] ) ) {
                $removed_notice  = sprintf( __( '%s removed.', 'woocommerce' ), $item_removed_title );
                $removed_notice .= ' <a href="' . esc_url( wc_get_cart_undo_url( $cart_item_key ) ) . '" class="restore-item">' . __( 'Undo?', 'woocommerce' ) . '</a>';
            } else {
                 $removed_notice = sprintf( __( '%s removed.', 'woocommerce' ), $item_removed_title );
            }
             // wc_add_notice( $removed_notice );
        }


来源:https://stackoverflow.com/questions/38189428/woocommerce-unset-product-removed-notice-on-cart-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!