WooCommerce - 在购物车页面上取消设置“<product> 删除通知...”
WooCommerce - unset "<product> removed notice…" on cart page
操作和过滤器。在我的 WooCommerce 网站上,当我从购物车中删除产品时收到以下消息:
"<product name>" removed. Undo?
查看 WooCommerce 源代码,我在 class-wc-form-header.php
中找到了条件语句作为函数 update_cart_action()
:
的一部分
$removed_notice .= ' <a href="' . esc_url( WC()->cart->get_undo_url( $cart_item_key ) ) . '">' . __( 'Undo?', 'woocommerce' ) . '</a>';
但是我找不到用它来消除这个通知的方法。我尝试了 css 个解决方案,但没有用:
PS:这可能不是困扰我的代码片段,但它是我发现的唯一似乎有意义的代码片段。
我怎样才能删除这个烦人的通知?
谢谢。
您可以通过不同的方式做到这一点:
1.覆盖 notices.php 模板:
您首先 (如果尚未完成) 将 woocommerce templates
文件夹复制到您的活动子主题或主题中,然后将其重命名 woocommerce
。然后open/editnotices/notices.php
并尝试替换代码:
<?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。使用钩子:
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。使用 CSS(类似的东西):
.woocommerce-cart .woocommerce-message {
display: none !important;
}
参考文献:
- Wordpress - Woocommerece remove "Added to Cart" message
- New wc-notice-functions.php on github
我必须对此进行更改才能使其正常工作。具体来说,数组字段是单数 notice 或至少现在是。
$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;
}
}
1. 简单的方法:在wp-content/plugins/woocommerce/includes/class-wc-form-handler.php
2. remove/disable 这一行:wc_add_notice( $removed_notice );
(第 523 行)像这样
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 );
}
只是关于 覆盖 notices.php 模板的更新:
<?php foreach ( $notices as $notice ) :
if ( strpos( $notice['notice'], 'removed' ) === false ) : ?>
<div class="woocommerce-message"<?php echo wc_get_notice_data_attr( $notice ); ?> role="alert">
<?php echo wc_kses_notice( $notice['notice'] ); ?>
</div>
<?php endif;
endforeach; ?>
必须将 'notice' 数组键添加到 strpos 方法,否则在通知消息中找不到 "removed" 字符串。希望这对尝试使用此模板覆盖方法时遇到问题的其他人有所帮助。
这个问题有一个非常简单的答案,因为有一个挂钩可以挂上。
// This line is to be added in the functions.php
add_filter('woocommerce_cart_item_removed_notice_type', '__return_null');
操作和过滤器。在我的 WooCommerce 网站上,当我从购物车中删除产品时收到以下消息:
"<product name>" removed. Undo?
查看 WooCommerce 源代码,我在 class-wc-form-header.php
中找到了条件语句作为函数 update_cart_action()
:
$removed_notice .= ' <a href="' . esc_url( WC()->cart->get_undo_url( $cart_item_key ) ) . '">' . __( 'Undo?', 'woocommerce' ) . '</a>';
但是我找不到用它来消除这个通知的方法。我尝试了 css 个解决方案,但没有用:
PS:这可能不是困扰我的代码片段,但它是我发现的唯一似乎有意义的代码片段。
我怎样才能删除这个烦人的通知?
谢谢。
您可以通过不同的方式做到这一点:
1.覆盖 notices.php 模板:
您首先 (如果尚未完成) 将 woocommerce templates
文件夹复制到您的活动子主题或主题中,然后将其重命名 woocommerce
。然后open/editnotices/notices.php
并尝试替换代码:
<?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。使用钩子:
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。使用 CSS(类似的东西):
.woocommerce-cart .woocommerce-message {
display: none !important;
}
参考文献:
- Wordpress - Woocommerece remove "Added to Cart" message
- New wc-notice-functions.php on github
我必须对此进行更改才能使其正常工作。具体来说,数组字段是单数 notice 或至少现在是。
$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;
}
}
1. 简单的方法:在wp-content/plugins/woocommerce/includes/class-wc-form-handler.php
2. remove/disable 这一行:wc_add_notice( $removed_notice );
(第 523 行)像这样
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 );
}
只是关于 覆盖 notices.php 模板的更新:
<?php foreach ( $notices as $notice ) :
if ( strpos( $notice['notice'], 'removed' ) === false ) : ?>
<div class="woocommerce-message"<?php echo wc_get_notice_data_attr( $notice ); ?> role="alert">
<?php echo wc_kses_notice( $notice['notice'] ); ?>
</div>
<?php endif;
endforeach; ?>
必须将 'notice' 数组键添加到 strpos 方法,否则在通知消息中找不到 "removed" 字符串。希望这对尝试使用此模板覆盖方法时遇到问题的其他人有所帮助。
这个问题有一个非常简单的答案,因为有一个挂钩可以挂上。
// This line is to be added in the functions.php
add_filter('woocommerce_cart_item_removed_notice_type', '__return_null');