WooCommerce 实用代码汇总自定义WooCommerce功能
用过了一段 时间后,发现 WooCommerce 在打造 商城这一块功能相当强大,也很成熟了。但是在刚刚接触 WooCommerce 时却遇到了不少的麻烦,一是中文相关的 WooCommerce 参考资料真的是太少了,不知道与国内的用户少有关系。
另一方面发现 WooCommerce 对于国人来说还存在很大的“改进”空间。例如添加到购物车,只有简单的链接,没有像淘宝那样的购物车侧边栏。最大的问题就是 WooCommerce 的账户管理中心功能简陋,想要的东西没有(当然,提供了接口可以自已添加)。
最先想到解决 WooCommerce 这些问题,是通过 WooCommerce 插件来搞定 。搜索了一下 WooCommerce 的相关插件,确实非常多,几乎想要的功能都可以找到对应的 WooCommerce 插件。但是本着少用插件的原则,最后还是找到一些 WooCommerce 实用代码,作用与插件是一样的。
大家在使用这些 WooCommerce 代码记得先学习一下 WooCommerce 的官方文档,实际上相当多的代码 WooCommerce 官方已经给出了示例,我们只需要在的函数文件中调用即可。另外,WooCommerce 的版本也在不断地更新当中,有些代码可能在某些版本的 WooCommerce 没有效果,请注意看自己用的版本和代码对应的版本有没有出入。
本篇文章就来分享一下 WooCommerce 实用代码,涉及到购物车、订面、店铺首页、商品详情页面、结算页面等,通过这些代码我们可以有针对性地进行相应的调整。
第一次接触 WooCommerce 商城的朋友,请参考:WordPress 商城搭建-WooCommerce 安装和 Paypal,支付宝,微信设置。注意:代码如果没有特别说明,就放在 functions.php 文件的”?>”前面。
文章目录
- 1 购物车中排除已设置为隐藏的产品
- 2 若商品在购物车中已存在,则重名“添加到购物车”按钮
- 3 调整货币符号
- 4 在店铺页面按照库存排序显示产品
- 5 店铺首页中显示商品品牌
- 6 店铺显示某用户已经购买过某商品
- 7 禁用或者修改面包屑导航位置
- 8 产品没有描述时设置一个默认的描述
- 9 隐藏相关产品推荐
- 10 添加“继续购物”按钮
- 11 使用视频作为产品展示而不是静态的图片
- 12 调整相关产品的数量
- 13 WooCommerce 订单管理中添加自定义栏
- 14 去掉结算页面的“什么是 Paypal”“What is PayPal?”
- 15 显示用户已经购买过的产品
- 16 添加新的菜单到账户中心
- 17 联系我们
- 18 相关文章
- 19 发表评论
- 20 热门文章
- 21 站长必备
- 22 热销模板
- 23 按文章类型进行搜索
- 24 分享到微信朋友圈
- 25 觉得文章有用请给作者打赏!
- 26 觉得文章有用请给作者打赏!
购物车中排除已设置为隐藏的产品
WooCommerce 有些设置为隐藏的商品,如果用户购买了后会显示在购物车中,利用以下代码就可以将设置为隐藏的产品在购物车中不可见。
-
1/**
-
1* @snippet Exclude Hidden Products from Cart Count - WooCommerce
-
1* @author Rodolfo Melogli
-
1> * @compatible WooCommerce 3.4.5
-
1*/
-
1
-
1// PLEASE NOTE: EMPTY THE CART BEFORE TESTING</span>
-
1
-
1add_filter<span class="br0">(</span> <span class="st_h">'woocommerce_cart_contents_count'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_exclude_hidden_minicart_counter'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw2">function</span> bbloomer_exclude_hidden_minicart_counter<span class="br0">(</span> <span class="re0">$quantity</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$hidden</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
-
1<span class="kw1">foreach</span><span class="br0">(</span> WC<span class="br0">(</span><span class="br0">)</span><span class="sy0">-></span><span class="me1">cart</span><span class="sy0">-></span><span class="me1">get_cart</span><span class="br0">(</span><span class="br0">)</span> <span class="kw1">as</span> <span class="re0">$cart_item</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$product</span> <span class="sy0">=</span> <span class="re0">$cart_item</span><span class="br0">[</span><span class="st_h">'data'</span><span class="br0">]</span><span class="sy0">;</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> <span class="re0">$product</span><span class="sy0">-></span><span class="me1">get_catalog_visibility</span><span class="br0">(</span><span class="br0">)</span> <span class="sy0">==</span> <span class="st_h">'hidden'</span> <span class="br0">)</span> <span class="re0">$hidden</span> <span class="sy0">+=</span> <span class="re0">$cart_item</span><span class="br0">[</span><span class="st_h">'quantity'</span><span class="br0">]</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1<span class="re0">$quantity</span> <span class="sy0">-=</span> <span class="re0">$hidden</span><span class="sy0">;</span>
-
1<span class="kw1">return</span> <span class="re0">$quantity</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
若商品在购物车中已存在,则重名“添加到购物车”按钮
如果想要 WooCommerce 在用户点击添加到购物车后,提示该商品已经在购物车中了,你可以用以下方法。
-
1>/**
-
1* @snippet Change "Add to Cart" Button Label if Product Already @ Cart
-
1>* @testedwith Woo 3.3.4
-
1*/
-
1
-
1// Part 1</span>
-
1
-
1// Edit Single Product Page Add to Cart</span>
-
1
-
1add_filter<span class="br0">(</span> <span class="st_h">'woocommerce_product_single_add_to_cart_text'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_custom_add_cart_button_single_product'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw2">function</span> bbloomer_custom_add_cart_button_single_product<span class="br0">(</span> <span class="re0">$label</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">foreach</span><span class="br0">(</span> WC<span class="br0">(</span><span class="br0">)</span><span class="sy0">-></span><span class="me1">cart</span><span class="sy0">-></span><span class="me1">get_cart</span><span class="br0">(</span><span class="br0">)</span> <span class="kw1">as</span> <span class="re0">$cart_item_key</span> <span class="sy0">=></span> <span class="re0">$values</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$product</span> <span class="sy0">=</span> <span class="re0">$values</span><span class="br0">[</span><span class="st_h">'data'</span><span class="br0">]</span><span class="sy0">;</span>
-
1<span class="kw1">if</span><span class="br0">(</span> get_the_ID<span class="br0">(</span><span class="br0">)</span> <span class="sy0">==</span> <span class="re0">$product</span><span class="sy0">-></span><span class="me1">get_id</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$label</span> <span class="sy0">=</span> __<span class="br0">(</span><span class="st_h">'已添加到购物车,还要一个?'</span><span class="sy0">,</span> <span class="st_h">'woocommerce'</span><span class="br0">)</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1<span class="br0">}</span>
-
1
-
1<span class="kw1">return</span> <span class="re0">$label</span><span class="sy0">;</span>
-
1
-
1<span class="br0">}</span>
-
1
-
1// Part 2</span>
-
1// Edit Loop Pages Add to Cart</span>
-
1add_filter<span class="br0">(</span> <span class="st_h">'woocommerce_product_add_to_cart_text'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_custom_add_cart_button_loop'</span><span class="sy0">,</span> <span class="nu0">99</span><span class="sy0">,</span> <span class="nu0">2</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw2">function</span> bbloomer_custom_add_cart_button_loop<span class="br0">(</span> <span class="re0">$label</span><span class="sy0">,</span> <span class="re0">$product</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> <span class="re0">$product</span><span class="sy0">-></span><span class="me1">get_type</span><span class="br0">(</span><span class="br0">)</span> <span class="sy0">==</span> <span class="st_h">'simple'</span> <span class="sy0">&&</span> <span class="re0">$product</span><span class="sy0">-></span><span class="me1">is_purchasable</span><span class="br0">(</span><span class="br0">)</span> <span class="sy0">&&</span> <span class="re0">$product</span><span class="sy0">-></span><span class="me1">is_in_stock</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">foreach</span><span class="br0">(</span> WC<span class="br0">(</span><span class="br0">)</span><span class="sy0">-></span><span class="me1">cart</span><span class="sy0">-></span><span class="me1">get_cart</span><span class="br0">(</span><span class="br0">)</span> <span class="kw1">as</span> <span class="re0">$cart_item_key</span> <span class="sy0">=></span> <span class="re0">$values</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$_product</span> <span class="sy0">=</span> <span class="re0">$values</span><span class="br0">[</span><span class="st_h">'data'</span><span class="br0">]</span><span class="sy0">;</span>
-
1<span class="kw1">if</span><span class="br0">(</span> get_the_ID<span class="br0">(</span><span class="br0">)</span> <span class="sy0">==</span> <span class="re0">$_product</span><span class="sy0">-></span><span class="me1">get_id</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$label</span> <span class="sy0">=</span> __<span class="br0">(</span><span class="st_h">'已添加到购物车,还要一个?'</span><span class="sy0">,</span> <span class="st_h">'woocommerce'</span><span class="br0">)</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1<span class="br0">}</span>
-
1
-
1<span class="br0">}</span>
-
1<span class="kw1">return</span> <span class="re0">$label</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
调整货币符号
将澳元的货币符号从默认的$改为 AUD$。
-
1<span class="kw2">function</span> change_existing_currency_symbol<span class="br0">(</span> <span class="re0">$currency_symbol</span><span class="sy0">,</span> <span class="re0">$currency</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">switch</span><span class="br0">(</span> <span class="re0">$currency</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">case</span> <span class="st_h">'AUD'</span><span class="sy0">:</span> <span class="re0">$currency_symbol</span> <span class="sy0">=</span> <span class="st_h">'AUD$'</span><span class="sy0">;</span> <span class="kw1">break</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1<span class="kw1">return</span> <span class="re0">$currency_symbol</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1add_filter<span class="br0">(</span><span class="st_h">'woocommerce_currency_symbol'</span><span class="sy0">,</span> <span class="st_h">'change_existing_currency_symbol'</span><span class="sy0">,</span> <span class="nu0">10</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">)</span><span class="sy0">;</span>
在店铺页面按照库存排序显示产品
WooCommerce 默认的的店铺首页会有按钮热度、关注度、价格等来排序,我们可以自己添加一个自定义排序,设置按照产品库存排序。
1: Sort Products by Stock Status @ WooCommerce Shop
-
1/**
-
1* @snippet Sort Products By Stock Status - WooCommerce Shop
-
1*/
-
1
-
1add_action<span class="br0">(</span> <span class="st_h">'woocommerce_product_query'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_sort_by_stock_status_then_alpha'</span><span class="sy0">,</span> <span class="nu0">999</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw2">function</span> bbloomer_sort_by_stock_status_then_alpha<span class="br0">(</span> <span class="re0">$query</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> is_admin<span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span> <span class="kw1">return</span><span class="sy0">;</span>
-
1<span class="re0">$query</span><span class="sy0">-></span><span class="me1">set</span><span class="br0">(</span> <span class="st_h">'meta_key'</span><span class="sy0">,</span> <span class="st_h">'_stock_status'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="re0">$query</span><span class="sy0">-></span><span class="me1">set</span><span class="br0">(</span> <span class="st_h">'orderby'</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">(</span> <span class="st_h">'meta_value'</span> <span class="sy0">=></span> <span class="st_h">'ASC'</span> <span class="br0">)</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
2: Sort Products SHORTCODE by Stock Status
-
1/**
-
1* @snippet Sort Products Shortcode By Stock Status
-
1* @author Rodolfo Melogli
-
1* @compatible WooCommerce 3.4.5
-
1*/
-
1
-
1// Note: products shortcode docs https://docs.woocommerce.com/document/woocommerce-shortcodes/#section-6</span>
-
1// In order for the snippet to work, you must add the parameter orderby = "stock" to the shortcode</span>
-
1// You can add more parameters to it of course e.g. limit, paginate, etc. It's all in the docs</span>
-
1add_filter<span class="br0">(</span><span class="st_h">'woocommerce_shortcode_products_query'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_sort_by_stock_status_shortcode'</span><span class="sy0">,</span> <span class="nu0">999</span><span class="sy0">,</span> <span class="nu0">3</span><span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw2">function</span> bbloomer_sort_by_stock_status_shortcode<span class="br0">(</span> <span class="re0">$args</span><span class="sy0">,</span> <span class="re0">$atts</span><span class="sy0">,</span> <span class="re0">$type</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> <span class="re0">$atts</span><span class="br0">[</span><span class="st_h">'orderby'</span><span class="br0">]</span> <span class="sy0">==</span> <span class="st0">"stock"</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$args</span><span class="br0">[</span><span class="st_h">'orderby'</span><span class="br0">]</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">(</span> <span class="st_h">'meta_value'</span> <span class="sy0">=></span> <span class="st_h">'ASC'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="re0">$args</span><span class="br0">[</span><span class="st_h">'meta_key'</span><span class="br0">]</span> <span class="sy0">=</span> <span class="st_h">'_stock_status'</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1<span class="kw1">return</span> <span class="re0">$args</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
店铺首页中显示商品品牌
WooCommerce 默认的不会显示某一个产品的品牌,当然我们可以用以下方法搞定:
-
1add_action<span class="br0">(</span> <span class="st_h">'woocommerce_after_shop_loop_item_title'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_show_woocommerce_brands_loop'</span><span class="sy0">,</span> <span class="nu0">8</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw2">function</span> bbloomer_show_woocommerce_brands_loop<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw2">global</span> <span class="re0">$post</span><span class="sy0">;</span>
-
1<span class="kw1">echo</span> get_brands<span class="br0">(</span> <span class="re0">$post</span><span class="sy0">-></span><span class="me1">ID</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
店铺显示某用户已经购买过某商品
-
1add_action<span class="br0">(</span> <span class="st_h">'woocommerce_after_shop_loop_item'</span><span class="sy0">,</span> <span class="st_h">'user_logged_in_product_already_bought'</span><span class="sy0">,</span> <span class="nu0">30</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw2">function</span> user_logged_in_product_already_bought<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> is_user_logged_in<span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw2">global</span> <span class="re0">$product</span><span class="sy0">;</span>
-
1<span class="re0">$current_user</span> <span class="sy0">=</span> wp_get_current_user<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> wc_customer_bought_product<span class="br0">(</span> <span class="re0">$current_user</span><span class="sy0">-></span><span class="me1">user_email</span><span class="sy0">,</span> <span class="re0">$current_user</span><span class="sy0">-></span><span class="me1">ID</span><span class="sy0">,</span> <span class="re0">$product</span><span class="sy0">-></span><span class="me1">get_id</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span> <span class="br0">)</span> <span class="kw1">echo</span> <span class="st_h">'</span>
-
1<span class="st_h">♥ Hey '</span> <span class="sy0">.</span> <span class="re0">$current_user</span><span class="sy0">-></span><span class="me1">first_name</span> <span class="sy0">.</span> <span class="st_h">', you've purchased this in the past. Buy again?</span>
-
1<span class="st_h">'</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1<span class="br0">}</span>
禁用或者修改面包屑导航位置
删除禁用默认的面包屑导航
-
1remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0);
将导航添加到其它位置,例如放在 header.php 中,则直接在 header.php 适当位置插入如下代码
-
1if( function_exists( 'woocommerce_breadcrumb') ) woocommerce_breadcrumb();
也可以用 add_action 添加,例如
-
1add_action( 'woocommerce_after_main_content', 'woocommerce_breadcrumb' );
修改面包屑导航的参数:
-
1// Code source: https://gist.github.com/dwiash/4064836</span>
-
1<span class="kw2">function</span> my_woocommerce_breadcrumbs<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">return</span> <span class="kw3">array</span><span class="br0">(</span>
-
1<span class="st_h">'delimiter'</span> <span class="sy0">=></span> <span class="st_h">' / '</span><span class="sy0">,</span>
-
1<span class="st_h">'wrap_before'</span> <span class="sy0">=></span> <span class="st_h">'</span>
-
1<span class="st_h">'</span><span class="sy0">,</span>
-
1<span class="st_h">'wrap_after'</span> <span class="sy0">=></span> <span class="st_h">'</span>
-
1<span class="st_h">'</span><span class="sy0">,</span>
-
1<span class="st_h">'before'</span> <span class="sy0">=></span> <span class="st_h">''</span><span class="sy0">,</span>
-
1<span class="st_h">'after'</span> <span class="sy0">=></span> <span class="st_h">''</span><span class="sy0">,</span>
-
1<span class="st_h">'home'</span> <span class="sy0">=></span> _x<span class="br0">(</span> <span class="st_h">'Home'</span><span class="sy0">,</span> <span class="st_h">'breadcrumb'</span><span class="sy0">,</span> <span class="st_h">'woocommerce'</span> <span class="br0">)</span><span class="sy0">,</span>
-
1<span class="br0">)</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1
-
1add_filter<span class="br0">(</span> <span class="st_h">'woocommerce_breadcrumb_defaults'</span><span class="sy0">,</span> <span class="st_h">'my_woocommerce_breadcrumbs'</span> <span class="br0">)</span><span class="sy0">;</span>
参数注释:
delimiter:分隔符
wrap_before:起始标签
wrap_after:结束标签
before:起始标签之后、面包屑导航链接之前的内容
after:面包屑导航链接之后、结束标签之前的内容
home:首页文字,例如像给首页加 font-awesome,可以这样设置
-
1'home' => _x( '<i class="icon-home"></i> Home', 'breadcrumb', 'woocommerce' ),
产品没有描述时设置一个默认的描述
WooCommerce 的商品页面如何没有描述会显示空白,这显然不怎么好看,我们可以设置一个段描述用于在没有描述的情况作为默认显示内容。
-
1/**
-
1* @snippet Show Custom Content When Short Description Empty - WooCommerce
-
1* @author Rodolfo Melogli
-
1* @compatible WooCommerce 3.4.5
-
1*/
-
1
-
1add_filter<span class="br0">(</span> <span class="st_h">'woocommerce_short_description'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_echo_short_desc_if_no_short_desc'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw2">function</span> bbloomer_echo_short_desc_if_no_short_desc<span class="br0">(</span> <span class="re0">$post_excerpt</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> <span class="kw3">empty</span> <span class="br0">(</span> <span class="re0">$post_excerpt</span> <span class="br0">)</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$post_excerpt</span> <span class="sy0">=</span> <span class="st_h">'</span>
'
1<span class="sy0">;</span> -
12<span class="re0">$post_excerpt</span> <span class="sy0">.=</span> <span class="st_h">'This is the default, global, short description.It will show if <b>no short description has been entered!</b>'</span><span class="sy0">;</span>
-
1<span class="re0">$post_excerpt</span> <span class="sy0">.=</span> <span class="st_h">''</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1<span class="kw1">return</span> <span class="re0">$post_excerpt</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
隐藏相关产品推荐
WooCommerce 默认的会在商品的页面下方显示 4 个相关的产品,如果你不想要,可以用以下代码去掉它。
-
1remove_action<span class="br0">(</span> <span class="st_h">'woocommerce_after_single_product_summary'</span><span class="sy0">,</span> <span class="st_h">'woocommerce_output_related_products'</span><span class="sy0">,</span> <span class="nu0">20</span> <span class="br0">)</span><span class="sy0">;</span>
添加“继续购物”按钮
当用户在 WooCommerce 的产品页面点击添加到购物车后,如果你希望增加一个显示“继续购物”的按钮,可以使用以下代码:
-
1add_action<span class="br0">(</span> ‘woocommerce_single_product_summary’<span class="sy0">,</span> ‘bbloomer_continue_shopping_button’<span class="sy0">,</span> <span class="nu0">31</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw2">function</span> bbloomer_continue_shopping_button<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> wp_get_referer<span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span> <span class="kw1">echo</span> ‘<span class="sy0">a <span class="kw2">class</span><span class="sy0">=</span>”button <span class="kw1">continue</span>” href<span class="sy0">=</span>”‘ <span class="sy0">.</span> wp_get_referer<span class="br0">(</span><span class="br0">)</span> <span class="sy0">.</span> ‘”<span class="sy0">></span>继续购物a<span class="sy0">></span>’<span class="sy0">;</span></span>
-
1<span class="br0">}</span>
使用视频作为产品展示而不是静态的图片
WooCommerce 默认的是用图片作为产品展示,我们也可以使用以下代码来让产品变成视频展示。
-
1add_action<span class="br0">(</span> ‘woocommerce_before_single_product’<span class="sy0">,</span> ‘bbloomer_show_video_not_image’ <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw2">function</span> bbloomer_show_video_not_image<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
-
1
-
1// Do this for product ID = 282 only</span>
-
1
-
1<span class="kw1">if</span> <span class="br0">(</span> is_single<span class="br0">(</span> <span class="st_h">'282'</span> <span class="br0">)</span> <span class="br0">)</span> <span class="br0">{</span>
-
1
-
1remove_action<span class="br0">(</span> <span class="st_h">'woocommerce_before_single_product_summary'</span><span class="sy0">,</span> <span class="st_h">'woocommerce_show_product_images'</span><span class="sy0">,</span> <span class="nu0">20</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1remove_action<span class="br0">(</span> <span class="st_h">'woocommerce_product_thumbnails'</span><span class="sy0">,</span> <span class="st_h">'woocommerce_show_product_thumbnails'</span><span class="sy0">,</span> <span class="nu0">20</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1add_action<span class="br0">(</span> <span class="st_h">'woocommerce_before_single_product_summary'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_show_product_video'</span><span class="sy0">,</span> <span class="nu0">30</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="br0">}</span>
-
1
-
1<span class="br0">}</span>
-
1
-
1<span class="kw2">function</span> bbloomer_show_product_video<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
-
1
-
1<span class="kw1">echo</span> <span class="st_h">'</span>
';
-
1
-
1// get video embed from YouTube</span>
-
1
-
1<span class="kw1">echo</span> <span class="st_h">'<iframe width="560" height="315" src="https://ggplus.com/embed/JHN7viKRxbQ?rel=0&showinfo=0" frameborder="0" allowfullscreen="allowfullscreen"></iframe>'</span><span class="sy0">;</span>
-
1
-
1<span class="kw1">echo</span> ‘div<span class="sy0">></span>’<span class="sy0">;</span>
-
1
-
1<span class="br0">}</span>
-
调整相关产品的数量
WooCommerce 默认的相关产品数量是 4 个,你可以自定义显示数量。
-
1add_filter<span class="br0">(</span> <span class="st_h">'woocommerce_output_related_products_args'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_change_number_related_products'</span><span class="sy0">,</span> <span class="nu0">9999</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw2">function</span> bbloomer_change_number_related_products<span class="br0">(</span> <span class="re0">$args</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$args</span><span class="br0">[</span><span class="st_h">'posts_per_page'</span><span class="br0">]</span> <span class="sy0">=</span> <span class="nu0">4</span><span class="sy0">;</span> // # of related products</span>
-
1<span class="re0">$args</span><span class="br0">[</span><span class="st_h">'columns'</span><span class="br0">]</span> <span class="sy0">=</span> <span class="nu0">4</span><span class="sy0">;</span> // # of columns per row</span>
-
1<span class="kw1">return</span> <span class="re0">$args</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
WooCommerce 订单管理中添加自定义栏
以下代码可以在 WooCommerce 的订单管理页面添加到以国家为参数的列。
-
1/**
-
1* @snippet Add Column to Orders Table (e.g. Billing Country) - WooCommerce
-
1* @author Rodolfo Melogli
-
1* @compatible WooCommerce 3.4.5
-
1*/
-
1
-
1add_filter<span class="br0">(</span> <span class="st_h">'manage_edit-shop_order_columns'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_add_new_order_admin_list_column'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw2">function</span> bbloomer_add_new_order_admin_list_column<span class="br0">(</span> <span class="re0">$columns</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$columns</span><span class="br0">[</span><span class="st_h">'billing_country'</span><span class="br0">]</span> <span class="sy0">=</span> <span class="st_h">'Country'</span><span class="sy0">;</span>
-
1<span class="kw1">return</span> <span class="re0">$columns</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1add_action<span class="br0">(</span> <span class="st_h">'manage_shop_order_posts_custom_column'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_add_new_order_admin_list_column_content'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw2">function</span> bbloomer_add_new_order_admin_list_column_content<span class="br0">(</span> <span class="re0">$column</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw2">global</span> <span class="re0">$post</span><span class="sy0">;</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> <span class="st_h">'billing_country'</span> <span class="sy0">===</span> <span class="re0">$column</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$order</span> <span class="sy0">=</span> wc_get_order<span class="br0">(</span> <span class="re0">$post</span><span class="sy0">-></span><span class="me1">ID</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw1">echo</span> <span class="re0">$order</span><span class="sy0">-></span><span class="me1">get_billing_country</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1<span class="br0">}</span>
去掉结算页面的“什么是 Paypal”“What is PayPal?”
WooCommerce 在使用 Paypal 付款时会显示一个“什么是 Paypal”“What is PayPal?”的提示,如果你觉得不好看的话可以用以下方法来删除它:
-
1add_filter<span class="br0">(</span> <span class="st_h">'woocommerce_gateway_icon'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_remove_what_is_paypal'</span><span class="sy0">,</span> <span class="nu0">10</span><span class="sy0">,</span> <span class="nu0">2</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw2">function</span> bbloomer_remove_what_is_paypal<span class="br0">(</span> <span class="re0">$icon_html</span><span class="sy0">,</span> <span class="re0">$gateway_id</span> <span class="br0">)</span> <span class="br0">{</span>
-
1
-
1// the apply_filters comes with 2 parameters: $icon_html, $this->id</span>
-
1
-
1// hence we declare 2 parameters within the function</span>
-
1
-
1// and the hook above takes the "2" as we decided to pass 2 variables</span>
-
1
-
1<span class="kw1">if</span><span class="br0">(</span> <span class="st_h">'paypal'</span> <span class="sy0">==</span> <span class="re0">$gateway_id</span> <span class="br0">)</span> <span class="br0">{</span>
-
1
-
1// we use one of the passed variables to make sure we only</span>
-
1
-
1// run this function for the gateway ID == 'paypal'</span>
-
1
-
1<span class="re0">$icon_html</span> <span class="sy0">=</span> <span class="st_h">'<img src="wzfou.com/wp-content/plugins/woocommerce/includes/gateways/paypal/assets/images/paypal.png" alt="PayPal Acceptance Mark" />'</span><span class="sy0">;</span>
-
1
-
1// in here we define our own $icon_html</span>
-
1
-
1// note there is no mention of the "What is PayPal"</span>
-
1
-
1// all we want is to repeat the part with the paypal logo</span>
-
1
-
1<span class="br0">}</span>
-
1
-
1// endif</span>
-
1
-
1<span class="kw1">return</span> <span class="re0">$icon_html</span><span class="sy0">;</span>
-
1
-
1// we send the $icon_html variable back to the system</span>
-
1
-
1// if PayPal, the system will use our custom $icon_html</span>
-
1
-
1// if not, the system will use the original $icon_html</span>
-
1
-
1<span class="br0">}</span>
显示用户已经购买过的产品
如果你想让用户首先在 WooCommerce 的个人订单管理页面看到自己曾经购买过的产品列表,可以先在 function.php 文件中添加以下代码:
-
1/**
-
1* @snippet Display All Products Purchased by User via Shortcode - WooCommerce
-
1* @author Rodolfo Melogli
-
1* @compatible Woo 3.4.5
-
1*/
-
1
-
1// Note: this will only return purchased products for completed and processing orders</span>
-
1
-
1add_shortcode<span class="br0">(</span> <span class="st_h">'my_products'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_user_products_bought'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw2">function</span> bbloomer_user_products_bought<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw2">global</span> <span class="re0">$product</span><span class="sy0">,</span> <span class="re0">$woocommerce</span><span class="sy0">,</span> <span class="re0">$woocommerce_loop</span><span class="sy0">;</span>
-
1<span class="re0">$columns</span> <span class="sy0">=</span> <span class="nu0">3</span><span class="sy0">;</span>
-
1<span class="re0">$current_user</span> <span class="sy0">=</span> wp_get_current_user<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1<span class="re0">$args</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">(</span>
-
1<span class="st_h">'post_type'</span> <span class="sy0">=></span> <span class="st_h">'product'</span><span class="sy0">,</span>
-
1<span class="st_h">'post_status'</span> <span class="sy0">=></span> <span class="st_h">'publish'</span><span class="sy0">,</span>
-
1<span class="st_h">'posts_per_page'</span> <span class="sy0">=></span> <span class="sy0">-</span><span class="nu0">1</span>
-
1<span class="br0">)</span><span class="sy0">;</span>
-
1<span class="re0">$loop</span> <span class="sy0">=</span> <span class="kw2">new</span> WP_Query<span class="br0">(</span><span class="re0">$args</span><span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw3">ob_start</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1
-
1woocommerce_product_loop_start<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw1">while</span> <span class="br0">(</span> <span class="re0">$loop</span><span class="sy0">-></span><span class="me1">have_posts</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span> <span class="sy0">:</span> <span class="re0">$loop</span><span class="sy0">-></span><span class="me1">the_post</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1<span class="re0">$theid</span> <span class="sy0">=</span> get_the_ID<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1<span class="kw1">if</span> <span class="br0">(</span> wc_customer_bought_product<span class="br0">(</span> <span class="re0">$current_user</span><span class="sy0">-></span><span class="me1">user_email</span><span class="sy0">,</span> <span class="re0">$current_user</span><span class="sy0">-></span><span class="me1">ID</span><span class="sy0">,</span> <span class="re0">$theid</span> <span class="br0">)</span> <span class="br0">)</span> <span class="br0">{</span>
-
1wc_get_template_part<span class="br0">(</span> <span class="st_h">'content'</span><span class="sy0">,</span> <span class="st_h">'product'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1<span class="kw1">endwhile</span><span class="sy0">;</span>
-
1
-
1woocommerce_product_loop_end<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1
-
1woocommerce_reset_loop<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1wp_reset_postdata<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
-
1
-
1<span class="kw1">return</span> <span class="st_h">'</span>
-
1<span class="st_h">'</span> <span class="sy0">.</span> <span class="kw3">ob_get_clean</span><span class="br0">(</span><span class="br0">)</span> <span class="sy0">.</span> <span class="st_h">'</span>
-
1<span class="st_h">'</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
然后在你需要显示用户所购买过的所有产品的页面添加以下短代码即可:
-
1[my_products]
添加新的菜单到账户中心
默认的话,在 WooCommerce 的账户中心只显示资料、订单、地址、退出等菜单,我们可以用以下方法来添加新的菜单。
-
1//添加my-account自定义导航及页面</span>
-
1/**
-
1* @snippet WooCommerce Add New Tab @ My Account
-
1* @credits https://github.com/woothemes/woocommerce/wiki/2.6-Tabbed-My-Account-page
-
1* @author Rodolfo Melogli
-
1* @testedwith WooCommerce 3.4.5
-
1*/
-
1
-
1
-
1// ——————</span>
-
1// 1. Register new endpoint to use for My Account page</span>
-
1// Note: Resave Permalinks or it will give 404 error</span>
-
1
-
1<span class="kw2">function</span> bbloomer_add_premium_support_endpoint<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
-
1add_rewrite_endpoint<span class="br0">(</span> <span class="st_h">'premium-support'</span><span class="sy0">,</span> EP_ROOT <span class="sy0">|</span> EP_PAGES <span class="br0">)</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1
-
1add_action<span class="br0">(</span> <span class="st_h">'init'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_add_premium_support_endpoint'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1
-
1// ——————</span>
-
1// 2. Add new query var</span>
-
1
-
1<span class="kw2">function</span> bbloomer_premium_support_query_vars<span class="br0">(</span> <span class="re0">$vars</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$vars</span><span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="st_h">'premium-support'</span><span class="sy0">;</span>
-
1<span class="kw1">return</span> <span class="re0">$vars</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1
-
1add_filter<span class="br0">(</span> <span class="st_h">'query_vars'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_premium_support_query_vars'</span><span class="sy0">,</span> <span class="nu0">0</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1
-
1// ——————</span>
-
1// 3. Insert the new endpoint into the My Account menu</span>
-
1
-
1<span class="kw2">function</span> bbloomer_add_premium_support_link_my_account<span class="br0">(</span> <span class="re0">$items</span> <span class="br0">)</span> <span class="br0">{</span>
-
1<span class="re0">$items</span><span class="br0">[</span><span class="st_h">'premium-support'</span><span class="br0">]</span> <span class="sy0">=</span> <span class="st_h">'联系我们'</span><span class="sy0">;</span>
-
1<span class="kw1">return</span> <span class="re0">$items</span><span class="sy0">;</span>
-
1<span class="br0">}</span>
-
1
-
1add_filter<span class="br0">(</span> <span class="st_h">'woocommerce_account_menu_items'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_add_premium_support_link_my_account'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1
-
1
-
1// ——————</span>
-
1// 4. Add content to the new endpoint</span>
-
1
-
1<span class="kw2">function</span> bbloomer_premium_support_content<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
-
1<span class="kw1">echo</span> <span class="st_h">'</span>
联系我们
有任何问题,欢迎与站长Qi取得联系。Qi的QQ号:xxxxxx,微信号:xxxxx。添加好友请注明“店铺订单”字样。更多的联系方式在:。
'
1<span class="sy0">;</span> -
1// echo do_shortcode( ' /* your shortcode here */ ' );</span>
-
1<span class="br0">}</span>
-
1
-
1add_action<span class="br0">(</span> <span class="st_h">'woocommerce_account_premium-support_endpoint'</span><span class="sy0">,</span> <span class="st_h">'bbloomer_premium_support_content'</span> <span class="br0">)</span><span class="sy0">;</span>
-
1// Note: add_action must follow 'woocommerce_account_{your-endpoint-slug}_endpoint' format</span>
WooCommerce 虽然说是国外人开发的插件,但是却提供非常多的 Hook,我们可以通过主题的函数文件自定义 WooCommerce 各种设置,上面的代码只是 wzfou.com 在使用过程觉得可以用得上的,实际上官方还提供非常多的自定义函数。
当然,也有朋友会觉得修改代码有些困难,WooCommerce 其实已经有类似的插件了,例如 WooCommerce 菜单插件,可以方便你自由地添加自定义链接到“我的账户”中,另外相关 WooCommerce 插件,基本上是整合了以下的代码。
热销模板
本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!
').css('display','block');
};
window.xh_social_view.warning=function(msg,parent){
var s = parent?(parent+'.fields-error'):'.fields-error';
$(s).html('
').css('display','block');
};
window.xh_social_view.success=function(msg,parent){
var s = parent?(parent+'.fields-error'):'.fields-error';
$(s).html('
').css('display','block');
};
})(jQuery);
1. 带 [亲测] 说明源码已经被站长亲测过!
2. 下载后的源码请在24小时内删除,仅供学习用途!
3. 分享目的仅供大家学习和交流,请不要用于商业用途!
4. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
5. 本站所有资源来源于站长上传和网络,如有侵权请邮件联系站长!
6. 没带 [亲测] 代表站长时间紧促,站长会保持每天更新 [亲测] 源码 !
7. 盗版ripro用户购买ripro美化无担保,若设置不成功/不生效我们不支持退款!
8. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
9. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
10.如果您购买了某个产品,而我们还没来得及更新,请联系站长或留言催更,谢谢理解 !
GG资源网 » WooCommerce 实用代码汇总自定义WooCommerce功能