WooCommerce

WooCommerce Code Snippets实用代码

WooCommerce code sinppets代码片段适合完成一些定制化强、目标明确且比较简单的任务,这些功能往往不需要很复杂的代码,很多插件也包含它们,但使用插件会引入多余的功能, 影响性能。代码片段既可以放在主题的functions.php里,也可以用短代码插件来维护。后者的好处是能明确每段代码的功能,分门别类的管理,启用关闭比较简单,也不用编辑主题文件,因此推荐使用后者,方法是安装插件Code SnippetsWPCode

禁用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']   = '&gt;'; // 更改分隔符
	$defaults['wrap_before'] = '<nav class = "woocommerce-breadcrumb">'; //更改面包屑的container的开始标签
	$defaults['wrap_after']  = '</nav>';// 更改面包屑container的结束标签
	$defaults['before']      = '&nbsp;'; // 每个链接前面的内容
	$defaults['after']       = '&nbsp'; // 每个链接后面的内容

	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' );