[カートに追加]ボタンをクリックすると、Woocommerceはメッセージを表示し、カートを表示します。このメッセージを編集し、実際にすべてのスパンを編集し、アイコンを配置します...
Theme /functions.phpにフィルターを追加します。以下のコードは、既存の$ messageをオーバーライドするだけです。これにより、$ messageが、メッセージへの「チェックアウト」リンクを付加するほぼ同一のメッセージで上書きされます。
必ず$ messageを返してください。
もちろん、すべてが最初のparamまたは$ 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> <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;
}
次のようなフィルターを試しましたか
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' );
Ajaxメッセージの更新に応答して、次のような翻訳関数を試してください。
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 );
2017-2019-Woocommerce 3+の場合(カートに追加された複数の製品の処理)
wc_add_to_cart_message_html
フィルターフックに置き換えられ、2番目の関数引数は$products
($product_id
の代わりに)…
this thread :のように、このフックされた関数内のコードに変更を加えることができます。
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 ) . ' × ' : '' ) . sprintf( _x( '“%s”', '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;
}
関連スレッド(Woocommerce 3+の場合):
add-to-cart.js
を見ると、カートに商品を追加するとadded_to_cart
のトリガーが発生します。私はそれに夢中になり、これをしました
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>');
});
ここでは、商品がカートに追加された後、何でも追加できます。
お役に立てば幸いです。
Woocommerce3.0では "wc_add_to_cart_message" 廃止され、機能しなくなりました。したがって、@ zmontecaによる回答は問題ありませんでしたが、Woocommerce3.0では機能しなくなりました。
「wc_add_to_cart_message」を「wc_add_to_cart_message_html」に置き換えるだけで、ボイル...が機能します。
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> <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;}
@Danteは正しいです、@ BradleyDによって提供されるソリューションは、ショップページのajax_add_to_cartでは機能しません。
@Abstractが提供するソリューションは、期待どおりに機能しています。私も彼のソリューションを使用しています。
もう1つのjQueryアプローチは、ドキュメントオブジェクトのajaxSuccessイベントをリッスンし、クリックされたボタンに必要な変更を加えることです。
そのようなものが機能するはずです:
$(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.
}
});