3

アクションとフィルター。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: それは私を悩ませているコード スニペットではないかもしれませんが、私が見つけた唯一の意味をなすものです。

この迷惑な通知を削除するにはどうすればよいですか?

ありがとう。

4

4 に答える 4

4

さまざまな方法でそれを行うことができます:

1. notices.php テンプレートのオーバーライド:
最初に(まだ行っていない場合)templatesアクティブな子テーマまたはテーマ内にwoocommerce フォルダーをコピーし、名前を変更する必要がありwoocommerceます。次に、コードを開いて編集 notices/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;
}

参考文献:

于 2016-07-04T19:52:33.740 に答える
1

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;
    }
}
于 2018-01-12T22:39:56.370 に答える
0

notifications.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 メソッドに追加する必要があったか、通知メッセージ内に「削除された」文字列が見つかりませんでした。これが、このテンプレート オーバーライド メソッドを使用しようとして問題を抱えていた他の人に役立つことを願っています。

于 2020-03-29T17:46:25.623 に答える