自定义WooCommerce电子商店

WooCommerce (简称WC)现已是网络上最流行的电子商务平台,此刻正驱动着全球近 35% 电子商店。今天我们给大家分享一下如何修改WooCommerce产品页浏览器标题、隐藏产品页标题、自定义商店每一页产品的显示个数以及显示产品已售数量等等。选择需要的自定义功能,将对应的代码粘帖在主题的functions.php文件中。

修改产品页浏览器标题

WooCommerce店铺首页默认浏览器标题是Products(产品),这个页面其实是一个custom post type归档页面,虽然内容区域的标题跟随该页面的标题,但浏览器标题却是WordPress默认的,Products是一个custom post type,所以它的archive页面标题就是它的label名称。默认标题对SEO没多大作用,为了对店铺首页进行优化,非常有必要修改这个店铺首页标题。

//修改Shop Base页面的浏览器标题//
add_filter('post_type_archive_title', 'theme_wc_shop_browser_title' );
function theme_wc_shop_browser_title( $title ){
    if( $title == __('Products', 'woocommerce')){
        $shop_page_id = woocommerce_get_page_id( 'shop' );
        $page_title   = get_the_title( $shop_page_id );
        return $page_title;
    }
    return $title;
}

上述代码可以让页面的标题改成shop这个页面的标题,而不是默认标题。你可以通过进入shop页面编辑,修改成任意你想要的标题。

隐藏产品页标题

//隐藏Woocommerce商店标题//
add_filter('post_type_archive_title', 'woo_shop_browser_title' );
function woo_shop_browser_title( $title ){
    if( $title == __('Products', 'woocommerce')){
        $shop_page_id = woocommerce_get_page_id( 'shop' );
        $page_title   = get_the_title( $shop_page_id );
        return $page_title;
    }
    return $title;
}

修改产品页选项卡标题

//修改产品页选项卡标题//
add_filter( 'woocommerce_product_tabs', 'woo_new_product_tab' );
function woo_new_product_tab( $tabs ) {
$tabs['description']['title'] = __( '商品描述' );
$tabs['additional_information']['title'] = __( '商品参数' );
$tabs['reviews']['title'] = __( '商品评价' );
return $tabs;
}

自定义每页产品个数

//自定义产品每页显示个数//
add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 32;' ), 20 );

WooCommerce默认每页显示24个产品,修改上述代码中的32即可自定义显示个数。

显示产品已售数量

//在商店页面显示总销量//
add_action( 'woocommerce_after_shop_loop_item_title', 'wc_product_sold_count', 5 );
//在产品详情页面显示总销量//
add_action( 'woocommerce_single_product_summary', 'wc_product_sold_count', 11 );
function wc_product_sold_count() {
    global $product;
    $units_sold = get_post_meta( $product->id, 'total_sales', true );
    echo '<p>' . sprintf( __( '已售 %s 件', 'woocommerce' ), $units_sold ) . '</p>';
}

修改add_action最后的数字可以调整位置,值越大越靠后。

修改“加入购物车”按钮的文字

//修改“加入购物车”按钮的文字//
function woo_custom_cart_button_text() {
    return __('加入购物车', 'woocommerce');//自定义文字
}
add_filter('woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text');

修改首页和分类页每行产品数量

注意,WC每行产品数量是靠给每行第一个产品元素添加.first class、每行最后一个添加.last class实现的,所以这段代码只能决定在哪里强制换行,与宽度无关。也就是说如果你设置一行显示4个产品,你不能期待每个li的宽度就是1/4,这个宽度是样式表设定的,如果样式表设定的宽度只够一行放下3个,而代码设定一行显示4个,那就会出现每行个数不等的情况。

//修改首页和分类页每行产品数量//
add_filter('loop_shop_columns', 'loop_columns');
if (!function_exists('loop_columns')) {
    function loop_columns() {
        return 5;
    }
}

给列表页每个产品添加产品描述

//给列表页每个产品添加产品描述//
function theme_wc_single_excerpt(){
    global $post;
    echo '<div class="product-description">' . apply_filters( 'woocommerce_short_description', $post->post_excerpt ) . '</div>';
}
add_action( 'woocommerce_after_shop_loop_item_title', 'theme_wc_single_excerpt' );

隐藏相关产品列表

默认产品页面底部有相关产品一栏,要去掉这个栏目,使用下面的代码。

//隐藏相关产品列表//
function wc_remove_related_products( $args ) {
    return array();
}
add_filter('woocommerce_related_products_args','wc_remove_related_products', 10);

修改相关产品列表每行产品数量

用filter: woocommerce_output_related_products_args改变相关产品数量,同样只是改变换行的位置,需要配合适当的css设定宽度才能实现最终效果。

//修改相关产品列表每行产品数量//
add_filter( 'woocommerce_output_related_products_args', 'wc_custom_related_products_args' );
function wc_custom_related_products_args( $args ){
    $args = array(
        'posts_per_page' => 2, //共显示多少产品
        'columns' => 2, //分几栏显示
        'orderby' => 'rand'
    );
    return $args;
}

代码注释:在每个产品页面展示最多10个相关产品,每行显示3个。

修改产品缩略图每行数量

和首页产品每行数量类似,是通过添加.first和.last class实现,要真正达到自己想要的效果,还要添加适当的样式。

//修改产品缩略图每行数量//
add_filter ( 'woocommerce_product_thumbnails_columns', 'woo_thumb_cols' );
function woo_thumb_cols() {
    return 4; // .last class applied to every 4th thumbnail
}

修改货币符号

//修改货币符号//
function change_existing_currency_symbol( $currency_symbol, $currency ) {
    switch( $currency ) {
        case 'AUD': $currency_symbol = 'AUD$'; break;
    }
    return $currency_symbol;
}
add_filter('woocommerce_currency_symbol', 'change_existing_currency_symbol', 10, 2);

代码注释:将澳元的货币符号从默认的$改为AUD$。

添加自定义排序选项

下面的代码演示如何添加一个随机排序(Random)选项,添加其它选项方法类似。

//添加自定义排序选项//
function custom_woocommerce_get_catalog_ordering_args( $args ) {
    $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    if ( 'random_list' == $orderby_value ) {
        $args['orderby'] = 'rand';
        $args['order'] = '';
        $args['meta_key'] = '';
    }   
    return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );
  
function custom_woocommerce_catalog_orderby( $sortby ) {
    $sortby['random_list'] = __('Sort by random order');
    return $sortby;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );

为订单添加附加费用/手续费

以下代码演示收取每单商品费用加运费总和的1%作为附加费用。

//为订单添加附加费用/手续费//
add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
    global $woocommerce;
  
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
  
    $percentage = 0.01;
    $surcharge = ( $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total ) * $percentage;
    $woocommerce->cart->add_fee( 'Surcharge', $surcharge, false, '' );
     
}

付款成功后立刻发送收据

//付款成功后立刻发送收据//
function send_invoice_upon_payment_successful($order_id) {
  global $woocommerce;
  $order = new WC_Order($order_id);
  $mailer = $woocommerce->mailer();
  $mailer->customer_invoice( $order );
}
add_action('woocommerce_payment_complete', 'send_invoice_upon_payment_successful');

产品列表页:加入购物车按钮移动到标题之前

//产品列表页:加入购物车按钮移动到标题之前//
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
add_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_add_to_cart', 10 );

产品列表页:添加链接

下面的代码演示如何在标题之前添加链接。

//产品列表页:添加链接//
add_action( 'woocommerce_before_shop_loop_item_title', 'wc_template_loop_additional_links', 10 );
function wc_template_loop_additional_links(){
    ?>
    <a href="#" class="button1-link button product_type_simple">Button 1 </a>
    <a href="#" class="button2-link button product_type_simple">Button 2 </a>
    <?php
}

修改产品列表页按钮文字

产品列表页的按钮文字一般是:add to cart、select options, view options和read more。下面代码演示如何更改这些按钮文字,使用代码时,只选择需要的即可,比如要修改view options,只需add_filter( ‘grouped_add_to_cart_text’, ‘wc_add_to_cart_text’ ),其它的删掉。

add_filter( 'woocommerce_product_add_to_cart_text' , 'custom_woocommerce_product_add_to_cart_text' );
  
//修改产品列表页按钮文字//
function custom_woocommerce_product_add_to_cart_text() {
    global $product;
     
    $product_type = $product->product_type;
     
    switch ( $product_type ) {
        case 'external':
            return __( 'Buy product', 'woocommerce' ); 
        break;
        case 'grouped':
            return __( 'View products', 'woocommerce' );
        break;
        case 'simple':
            return __( 'Add to cart', 'woocommerce' );
        break;
        case 'variable':
            return __( 'Select options', 'woocommerce' );
        break;
        default:
            return __( 'Read more', 'woocommerce' );
    }
     
}

无论产品是否有属性,添加到购物车的按钮名称都是Purchase.

屏蔽产品页评价选项卡

//屏蔽产品页评价选项卡//
add_filter( 'woocommerce_product_tabs', 'wc_remove_reviews_tab' );
function wc_remove_reviews_tab( $tabs ){   
    unset($tabs['reviews']);
    return $tabs;
}

产品页添加自定义选项卡

添加一个features选项卡,内容可以用custom field来写。

//产品页添加自定义选项卡//
add_filter( 'woocommerce_product_tabs', 'wc_add_features_tab' );
function wc_add_features_tab( $tabs ){    
    global $product;
    $content = get_post_meta( $product->id, 'product_features', true );
    if( !empty($content) ) {
        $tabs[ 'features' ] = array(
            'title'    => 'Features',
            'priority' => 1,
            'callback' => 'wc_features_tabs_panel_content',
            'content'  => $content,  // custom field
        );
    }
    return $tabs;
}
function wc_features_tabs_panel_content( $key, $tab ){
    echo  '<h2>' . $tab['title'] . '</h2>';
    echo $tab['content'];
}

用户访问时将产品自动添加到购物车

//用户访问时将产品自动添加到购物车//
add_action( 'init', 'add_product_to_cart' );
function add_product_to_cart() {
    if (!is_admin()) {
        global $woocommerce;
        $product_id = 64;
        $found = false;
        //check if product already in cart
        if (sizeof($woocommerce->cart->get_cart()) > 0) {
            foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) {
                $_product = $values['data'];
                if ($_product->id == $product_id)
                    $found = true;
            }
        // if product not found, add it
            if (!$found)
                $woocommerce->cart->add_to_cart($product_id);
        } else {
        // if no products in cart, add it
            $woocommerce->cart->add_to_cart($product_id);
        }
    }
}

虚拟产品:付款成功后订单状态立即变为完成

//虚拟产品:付款成功后订单状态立即变为完成//
add_filter( 'woocommerce_payment_complete_order_status', 'virtual_order_payment_complete_order_status', 10, 2 );
  
function virtual_order_payment_complete_order_status( $order_status, $order_id ) {
  $order = new WC_Order( $order_id );
  
  if ( 'processing' == $order_status &&
       ( 'on-hold' == $order->status || 'pending' == $order->status || 'failed' == $order->status ) ) {
  
    $virtual_order = null;
  
    if ( count( $order->get_items() ) > 0 ) {
  
      foreach( $order->get_items() as $item ) {
  
        if ( 'line_item' == $item['type'] ) {
  
          $_product = $order->get_product_from_item( $item );
  
          if ( ! $_product->is_virtual() ) {
            // once we've found one non-virtual product we know we're done, break out of the loop
            $virtual_order = false;
            break;
          } else {
            $virtual_order = true;
          }
        }
      }
    }
  
    // virtual order, mark as completed
    if ( $virtual_order ) {
      return 'completed';
    }
  }
  
  // non-virtual order, return original status
  return $order_status;
}

在产品页显示已售数量和产品更新日期

您需要付费解锁才能查看当前内容

自定义WooCommerce电子商店插图白银免费
自定义WooCommerce电子商店插图1黄金免费
自定义WooCommerce电子商店插图2铂金免费
已付费?登录刷新

本文来自【年年有鱼铂金】的投稿,部分内容可能来源于互联网,不代表【最省事】的观点和立场。侵权投诉>>

本文著作权归博主所有,并授权【最省事】独家使用,未经博主授权,请勿转载。授权申请>>

(71)
上一篇 2021年1月25日 16:53
下一篇 2021年4月24日 08:29

相关推荐

发表回复

登录后才能评论