WooCommerce code sinppets代码片段适合完成一些定制化强、目标明确且比较简单的任务,这些功能往往不需要很复杂的代码,很多插件也包含它们,但使用插件会引入多余的功能, 影响性能。代码片段既可以放在主题的functions.php里,也可以用短代码插件来维护。后者的好处是能明确每段代码的功能,分门别类的管理,启用关闭比较简单,也不用编辑主题文件,因此推荐使用后者,方法是安装插件Code Snippets或WPCode。
禁用Product Gallery灯箱、放大和点击图片的能力
function hio_remove_image_zoom_support() {
remove_theme_support( 'wc-product-gallery-zoom' );
remove_theme_support( 'wc-product-gallery-lightbox' );
}
add_action( 'wp', 'hio_remove_image_zoom_support', 100 );
function hio_remove_product_image_link( $html, $post_id ) {
return preg_replace( "!<(a|/a).*?>!", '', $html );
}
add_filter( 'woocommerce_single_product_image_thumbnail_html', 'hio_remove_product_image_link', 10, 2 );
定制面包屑导航
add_filter( 'woocommerce_breadcrumb_defaults', 'sola_customize_woocommerce_breadcrumb',20 );
function wcc_change_breadcrumb_home_text( $defaults ) {
$defaults['home'] = 'Apartment'; // 更改home/首页的链接文字
$defaults['delimiter'] = '>'; // 更改分隔符
$defaults['wrap_before'] = '<nav class = "woocommerce-breadcrumb">'; //更改面包屑的container的开始标签
$defaults['wrap_after'] = '</nav>';// 更改面包屑container的结束标签
$defaults['before'] = ' '; // 每个链接前面的内容
$defaults['after'] = ' '; // 每个链接后面的内容
return $defaults;
}
定制产品信息tabs
移除默认的Tabs,把三个tab的内容合并到一个tab下。
function sola_merge_product_tabs( $tabs ) {
echo '<pre> ', var_export( $tabs ) ,'</pre>';
unset( $tabs['description'] );
unset( $tabs['reviews'] );
unset( $tabs['additional_information'] );
$tabs['my_custom_tab'] = array(
'title' => '自定义信息',
'prority' => 10,
'callback' => 'render_my_custom_tab'
);
return $tabs;
}
function render_my_custom_tab(){
woocommerce_product_additional_information_tab();
woocommerce_product_description_tab();
comments_template();
}
更改加入购物车按钮的文字
更改产品页按钮的文字
add_filter( 'woocommerce_product_single_add_to_cart_text', 'sola_wc_add_to_cart_button_text_single' );
function sola_wc_add_to_cart_button_text_single() {
return __( 'Add to Bag', 'woocommerce' );
}
还能根据产品类型来显示不同的文字,通常在archives页面使用,这个filter支持第二个参数,如下:
add_filter('woocommerce_product_add_to_cart_text', 'sola_wc_add_to_cart_button_text_archives', 10, 2);
function sola_wc_add_to_cart_button_text_archives($text, $product) {
$product_type = $product->get_type();
switch ($product_type) {
case 'variable':
$text = 'Choose your option';
break;
case 'simple':
$text = 'Add to Bag';
break;
case 'external':
$text = 'Purchase';
break;
}
return $text;
}
产品列表显示“购买过”
如果一个登陆用户购买过某个产品,可以在产品列表里标识出这些产品,比如加一个“购买过”的文字。
function sola_customer_already_bought_product_label() {
if (!is_user_logged_in()){
return;
}
if (wc_customer_bought_product('', get_current_user_id(), get_the_ID())) {
echo '购买过';
}
}
隐藏产品sku
如果不想让用户看到产品sku,或者没有sku,可以用这段代码
add_filter( 'wc_product_sku_enabled', '__return_false' );