web-dev-qa-db-fra.com

Woocommerce, Comment modifier le message "ajouté au panier"

Lorsque vous cliquez sur le bouton Ajouter au panier, le Woocommerce affiche le message, affiche le panier, je souhaite modifier ce message, modifier en fait toute la durée, mettre une icône, etc.

7
Dante

Ajoutez un filtre à votre thème/functions.php. Le code ci-dessous remplace simplement le message $ existant. Cela écrase le message $ avec un message presque identique qui ajoute un lien "d'extraction" au message.

Assurez-vous de retourner le message $.

Vous pouvez bien sûr simplement modifier le message existant, le tout étant passé sous forme de chaîne via le premier paramètre ou $ message var.

add_filter ( 'wc_add_to_cart_message', 'wc_add_to_cart_message_filter', 10, 2 );
function wc_add_to_cart_message_filter($message, $product_id = null) {
    $titles[] = get_the_title( $product_id );

    $titles = array_filter( $titles );
    $added_text = sprintf( _n( '%s has been added to your cart.', '%s have been added to your cart.', sizeof( $titles ), 'woocommerce' ), wc_format_list_of_items( $titles ) );

    $message = sprintf( '%s <a href="%s" class="button">%s</a>&nbsp;<a href="%s" class="button">%s</a>',
                    esc_html( $added_text ),
                    esc_url( wc_get_page_permalink( 'checkout' ) ),
                    esc_html__( 'Checkout', 'woocommerce' ),
                    esc_url( wc_get_page_permalink( 'cart' ) ),
                    esc_html__( 'View Cart', 'woocommerce' ));

    return $message;
}
12
zmonteca

Avez-vous essayé un filtre comme celui-ci

function your_add_to_cart_message() {
if ( get_option( 'woocommerce_cart_redirect_after_add' ) == 'yes' ) :
    $message = sprintf( '%s<a href="%s" class="your-style">%s</a>', __( 'Successfully added to cart.', 'woocommerce' ), esc_url( get_permalink( woocommerce_get_page_id( 'shop' ) ) ), __( 'Continue Shopping', 'woocommerce' ) );
else :
    $message = sprintf( '%s<a href="%s" class="your-class">%s</a>', __( 'Successfully added to cart.' , 'woocommerce' ), esc_url( get_permalink( woocommerce_get_page_id( 'cart' ) ) ), __( 'View Cart', 'woocommerce' ) );
endif;
return $message;
}
add_filter( 'wc_add_to_cart_message', 'your_add_to_cart_message' );

En réponse à la mise à jour du message ajax, essayez une fonction de traduction du type:

function your_woo_ajax_solution( $translation, $text, $domain ) {
  if ( $domain == 'woocommerce' ) { // your domain name
    if ( $text == 'View Cart' ) { // current text that shows
        $translation = 'Basket updated.'; // The text that you would like to show
    }
  }

  return $translation;
}
add_filter( 'gettext', 'your_woo_ajax_solution', 10, 3 );
4
BradleyD

Si vous examinez add-to-cart.js, un déclencheur added_to_cart est déclenché lors de l'ajout d'un produit au panier. Je me suis accroché à ça et je l'ai fait

jQuery(document.body).on("added_to_cart", function( data ) {
    jQuery('button.added').nextAll().remove();
    jQuery('button.added').after(' <span style="text-align:center;display:block;" class="cart_updated_ajax"><a href="' + wc_add_to_cart_params.cart_url + '" title="' +
                            wc_add_to_cart_params.i18n_view_cart + '">Cart Updated</a></span>');
});

Ici, vous pouvez ajouter n'importe quoi après l'ajout du produit au panier.

J'espère que cela pourra aider!

2
Abstract

2017 - 2019 - Pour Woocommerce 3+ (gestion de plusieurs produits ajoutés au panier)}

Remplacé par wc_add_to_cart_message_html filter hook, le second argument de fonction a été remplacé par $products(au lieu de $product_id)}… 

Vous pouvez apporter des modifications au code dans cette fonction accrochée, comme dans ce fil

add_filter( 'wc_add_to_cart_message_html', 'custom_add_to_cart_message_html', 10, 2 );
function custom_add_to_cart_message_html( $message, $products ) {
    $titles = array();
    $count  = 0;

    foreach ( $products as $product_id => $qty ) {
        $titles[] = ( $qty > 1 ? absint( $qty ) . ' &times; ' : '' ) . sprintf( _x( '&ldquo;%s&rdquo;', 'Item name in quotes', 'woocommerce' ), strip_tags( get_the_title( $product_id ) ) );
        $count += $qty;
    }

    $titles     = array_filter( $titles );
    $added_text = sprintf( _n( '%s has been added to your cart.', '%s have been added to your cart.', $count, 'woocommerce' ), wc_format_list_of_items( $titles ) );

    // The custom message is just below
    $added_text = sprintf( _n("%s item has %s", "%s items have %s", $count, "woocommerce" ),
        $count, __("been added to your basket.", "woocommerce") );

    // Output success messages
    if ( 'yes' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
        $return_to = apply_filters( 'woocommerce_continue_shopping_redirect', wc_get_raw_referer() ? wp_validate_redirect( wc_get_raw_referer(), false ) : wc_get_page_permalink( 'shop' ) );
        $message   = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( $return_to ), esc_html__( 'Continue shopping', 'woocommerce' ), esc_html( $added_text ) );
    } else {
        $message   = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( wc_get_page_permalink( 'cart' ) ), esc_html__( 'View cart', 'woocommerce' ), esc_html( $added_text ) );
    }
    return $message;
}

Discussions connexes (pour Woocommerce 3+):

2
LoicTheAztec

Dans Woocommerce 3.0, "wc_add_to_cart_message" est obsolète et ne fonctionne plus. Alors, alors que la réponse de @zmonteca était correcte, elle ne fonctionne plus sur le Woocommerce 3.0

Il suffit de remplacer "wc_add_to_cart_message" par " wc_add_to_cart_message_html " et de faire voile ... fonctionne.

add_filter ( 'wc_add_to_cart_message', 'wc_add_to_cart_message_filter', 10, 2 );
function wc_add_to_cart_message_filter($message, $product_id = null) {
$titles[] = get_the_title( $product_id );

$titles = array_filter( $titles );
$added_text = sprintf( _n( '%s has been added to your cart.', '%s have been added to your cart.', sizeof( $titles ), 'woocommerce' ), wc_format_list_of_items( $titles ) );

$message = sprintf( '%s <a href="%s" class="button">%s</a>&nbsp;<a href="%s" class="button">%s</a>',
                esc_html( $added_text ),
                esc_url( wc_get_page_permalink( 'checkout' ) ),
                esc_html__( 'Checkout', 'woocommerce' ),
                esc_url( wc_get_page_permalink( 'cart' ) ),
                esc_html__( 'View Cart', 'woocommerce' ));

return $message;}
0
Amouratoglou

@Dante est correct, les solutions fournies par @BradleyD ne fonctionneront pas pour ajax_add_to_cart sur la page boutique.

La solution fournie par @Abstract fonctionne comme prévu. J'utilise aussi sa solution.

Une autre approche jQuery consiste à écouter l'événement ajaxSuccess sur l'objet document et à effectuer les modifications souhaitées pour le bouton cliqué.

Quelque chose comme ça devrait marcher:

$(document).ajaxSuccess(function(event, xhr, settings) {
    if (settings.url.indexOf('?wc-ajax=add_to_cart') !== -1) {
        // You can find the clicked button element under the event.target.activeElement
        // Than you can do whatever you want here. Add new html element and text, etc.
    }

});
0
kostadinovstoil