WooCommerce实现商品加购人数展示并按数量条件切换提示文案
你可以通过两种方案实现文案的条件化调整,修改后代码完全兼容原有逻辑:
方案1:简单条件判断(适合不需要多语言的中文站点)
直接修改原有代码的输出逻辑即可,代码更轻量:
function show_no_of_people_added_in_cart(){ global $wpdb, $product; $in_basket = 0; $wc_session_data = $wpdb->get_results( "SELECT session_key FROM {$wpdb->prefix}woocommerce_sessions" ); $wc_session_keys = wp_list_pluck( $wc_session_data, 'session_key' ); if( $wc_session_keys ) { foreach ( $wc_session_keys as $key => $_customer_id ) { // 如需排除当前访问用户自己的加购统计保留此行,不需要可直接删除 if( WC()->session->get_customer_id() == $_customer_id ) continue; $session_contents = WC()->session->get_session( $_customer_id, array() ); $cart_contents = maybe_unserialize( $session_contents['cart'] ); if( $cart_contents ){ foreach ( $cart_contents as $cart_key => $item ) { if( $item['product_id'] == $product->get_id() ) { $in_basket += 1; } } } } } if( $in_basket ) { $cart_tip = $in_basket === 1 ? '当前有1人将这件商品加入了购物车' : "当前有{$in_basket}人将这件商品加入了购物车"; echo '<div class="in-basket">' . $cart_tip . '</div>'; } } add_action( 'woocommerce_after_shop_loop_item_title', 'show_no_of_people_added_in_cart', 11 ); add_action( 'woocommerce_single_product_summary', 'show_no_of_people_added_in_cart', 21 );
方案2:WordPress标准单复数处理(适合需要做多语言翻译的站点)
使用WordPress内置的_n()函数处理单复数,符合WP开发规范,后续适配多语言无需二次修改:
function show_no_of_people_added_in_cart(){ global $wpdb, $product; $in_basket = 0; $wc_session_data = $wpdb->get_results( "SELECT session_key FROM {$wpdb->prefix}woocommerce_sessions" ); $wc_session_keys = wp_list_pluck( $wc_session_data, 'session_key' ); if( $wc_session_keys ) { foreach ( $wc_session_keys as $key => $_customer_id ) { // 如需排除当前访问用户自己的加购统计保留此行,不需要可直接删除 if( WC()->session->get_customer_id() == $_customer_id ) continue; $session_contents = WC()->session->get_session( $_customer_id, array() ); $cart_contents = maybe_unserialize( $session_contents['cart'] ); if( $cart_contents ){ foreach ( $cart_contents as $cart_key => $item ) { if( $item['product_id'] == $product->get_id() ) { $in_basket += 1; } } } } } if( $in_basket ) echo '<div class="in-basket">' . sprintf( _n( '当前有%d人将这件商品加入了购物车', '当前有%d人将这件商品加入了购物车', $in_basket, 'text-domain' ), $in_basket ) . '</div>'; } add_action( 'woocommerce_after_shop_loop_item_title', 'show_no_of_people_added_in_cart', 11 ); add_action( 'woocommerce_single_product_summary', 'show_no_of_people_added_in_cart', 21 );
内容的提问来源于stack exchange,提问作者Syrehn
相关产品推荐
相关产品推荐

