- Windows 本地安装 Kibana 查询 Elasticsearch
- Windows 本地安装和使用 Elasticsearch
- WooCommerce 请登录 链接不工作
- 使 WooCommerce 订单搜索支持自定义字段
- 如何使用 WooCommerce Session
- 获取 WooCommerce 页面地址的方法
- WooCommerce后台通过自定义字段检索产品
- WooCommerce 自定义订单号
- WooCommerce Login / Register Redirect
- WooCommerce自带的shortcodes
- WooCommerce 打印订单
- WooCommerce 新用户注册管理员通知
- WooCommerce 移除产品页商品图片的url
- WooCommerce Email 模版增加全局内容的一个方法
- 错误:Call to a member function is_visible() on a non-object
- WooCommerce实用代码集合
- WooCommerce根据支付方式收取额外费用(2021)
- WooCommerce 订单管理
- WooCommerce移除登出账户的确认提示
- WooCommerce列出所有产品分类(2021)
- WooCommerce收据功能的实现
- WooCommerce Dynamic Pricing动态价格表(2021)
- 如何免费试用WordPress付费插件
- 写代码定制WooCommerce产品页模板(2021)
- 自定义WooCommerce Order Details模板明细部分(2021)
- WooCommerce Class WC_Order
- WooCommerce 产品搜索支持 SKU
- WooCommerce定制产品的Additional Information选项卡(2021)
- WooCommerce 定制产品页选项卡(2021)
- WooCommerce admin bar快捷菜单
- WooCommerce库存管理插件Stock Manager for WooCommerce(2021)
- WordPress备份插件UpdraftPlus(2021)
- 隐藏WooCommerce的购物功能
- WooCommerce目录模式Catalog Mode(2021)
- 构建基于WooCommerce和WPML的多语言电商网站 - 概述篇
- 构建基于WooCommerce和WPML的多语言电商网站 - 安装WooCommerce和测试数据
- 配置WordPress运行环境 - Wampserver安装图解
- 构建基于WooCommerce和WPML的多语言电商网站 - 安装和配置 WPML 插件
- 构建基于 WooCommerce 和 WPML 的多语言电商网站 - 使 WooCommerce 和 WPML 协同工作
- WooCommerce Paypal & RMB
- WooCommerce 2.0 来袭
- 如何修改 WooCommerce 插件的模版
- WooCommerce 显示每个产品的总销量
- WooCommerce 中的 Custom JavaScript Event
- WooCommerce Authorize.net CIM Gateway
- 用WooCommerce Fees API 添加手续费
- WooCommerce 产品加入购物车后直接结账
- 设置 Paypal Sandbox 测试 WooCommerce Subscription 产品
- WooCommerce Conditional Tags 详解
- WooCommerce Single Category Selector
- WooCommerce 自定义结账字段(2021)
- WooCommerce 将产品属性加入网站菜单(2021)
- WooCommerce Product API(2021)
- WooCommerce 添加附加费 surcharge(2021)
- WooCommerce 安装中文语言包(2021)
- WooCommerce 营销:订阅促销弹窗和潜在客户发掘(2021)
- WooCommerce 邮件定制、预览和测试(2021)
- WooCommerce 在线站点付款测试(2021)
- WooCommerce Product Archive Image Slider(2021)
- woocommerce_form_field() examples
- WooCommerce 商店页插入 shortcode 问题
- WooCommerce 在 Email Header 中获取用户信息
- WooCommerce 自定义结账字段图文详解
- WooCommerce 2.1.12 - 如何修改相关产品列表
- 修改 WooCommerce My Account 页面的地址格式
- Woocommerce:如何根据国家设置支付方式
- Woocommerce 支付宝插件初探
- 支付宝集成 如何在回调地址中使用自定义参数
- Woocommerce Settings API 如何使用
- Woocommerce 中文货币符号错误如何解决
- WooCommerce 如何扩展支付方式
- Woo commerce 搭建 WordPress 电子商务网站
- WooCommerce 查看所有用户购物车(2021)
- WooCommerce 最近一个月销量排行(2021)
- WooCommerce 后台自定义产品选项(2021)
- WooCommerce 自定义产品列表带分页(2021)
- WooCommerce 设置 - 自定义选项卡和字段(2021)
- WooCommerce My Account Menu Links 定制方法(2021)
- WooCommerce 产品列表增加数量字段
- WooCommerce 可变产品变种的数量限制
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
写代码定制WooCommerce产品页模板(2021)
定制WooCommerce产品页模板的方法有很多,最常见的是用插件或主题自带的功能,例如flatsome主题就支持用拖拽的方式定制产品模板,且能给每个产品使用不同的模板,有兴趣的可以自行研究,这里就不展开描述了。本文要介绍的是写代码定制的方法,灵活省事。
定制WooCommerce产品页模板用到的钩子
产品页相关的模板主要有single-product.php
和content-single-product.php
,我们用代码把模板里主要的action和挂载到action上的function都显示出来,用默认主题twenty twenty-one来测试,如下图所示,函数名称后面的数字是优先级,action控制元素的位置,而优先级可以决定同一位置的元素的显示的顺序。
hooks.wpdesk.org这个网站可以查看更详细的钩子位置。
如果你喜欢用插件,Show Hooks可以很方便的查看当前页面的action设filter。
通过调整模块位置定制模板
标题、价格、gallery等这些元素是卡片,action是卡槽,先把想重排的卡片从卡槽里拿出来,再按照希望的顺序重新放回去。首先,用remove_all_actions
函数把卡片拿出来,注释掉的是不想重设的actions。
/**
* Remove the default content of the single product template
*/
add_action( 'template_redirect', 'sola_reset_product_actions' );
function sola_reset_product_actions(){
$hooks = array(
//'woocommerce_before_main_content',
'woocommerce_after_main_content',
'woocommerce_sidebar',
//'woocommerce_before_single_product',
'woocommerce_before_single_product_summary',
'woocommerce_single_product_summary',
'woocommerce_after_single_product_summary',
'woocommerce_after_single_product',
);
foreach( $hooks as $hook ){
remove_all_actions( $hook );
}
}
重新放到自己希望的位置。
add_action( 'template_redirect', 'sola_custom_single_product_template' );
function sola_custom_single_product_template(){
$elements = array(
'woocommerce_before_single_product_summary' => array(
'woocommerce_show_product_sale_flash',
'woocommerce_show_product_images',
'woocommerce_template_single_sharing',
'woocommerce_template_single_title',
'woocommerce_template_single_price',
'woocommerce_template_single_add_to_cart',
'woocommerce_template_single_rating',
'woocommerce_template_single_meta',
'woocommerce_output_product_data_tabs'
),
'woocommerce_after_single_product_summary' => array(
'woocommerce_upsell_display',
'woocommerce_output_related_products'
),
);
foreach( $elements as $action => $functions ){
$priority = 10;
foreach( $functions as $function ){
add_action( $action, $function, $priority );
$priority += 10;
}
}
}
再来查看一下action上的元素,已经变成程序里指定的样子,如下图所示,因为没有写css美化,样子就凑合看吧。
附:查看action位置使用的代码
class Sola_Show_Hook_Position{
public $included_hooks = false;
public $excluded_hooks = false;
public $hook_has_string = '';
public $after_action = '';
public function run(){
if( is_admin() ){
return;
}
add_filter( 'all', [$this, 'hook_into_all_actions'] );
}
function hook_into_all_actions( $hook ){
global $wp_actions;
if( !isset( $wp_actions[$hook]) ){
return;
}
if( $this->hook_has_string && strpos($hook, $this->hook_has_string) === false ){
return;
}
if( is_array($this->included_hooks) && sizeof($this->included_hooks) && in_array($hook, $this->included_hooks) === false ){
return;
}
if( is_array($this->excluded_hooks) && sizeof($this->excluded_hooks) && in_array($hook, $this->excluded_hooks) !== false) {
return;
}
if ( $this->after_action && !did_action($this->after_action) ){
return;
}
$this->show_position( $hook );
}
function show_position( $hook ){
echo '<div style="background:#eff8fe;padding:2rem;font-size:1.2rem;margin:1rem 0;clear:both;color:#0075dd">
<h3 style="color:#0075dd;font-weight:bold;line-height:1.2">',
$hook,
'</h3>',
$this->render_callbacks($hook),
'</div>';
}
function render_callbacks( $hook ){
global $wp_filter;
if( empty($hook) || !isset($wp_filter[$hook]) ){
return;
}
$actions = $wp_filter[$hook]->callbacks;
foreach( $actions as $priority => $callbacks ){
foreach( $callbacks as $key => $callback ){
$function_name = $this->get_callback_name( $key, $callback );
printf( "%s - %s<br>",esc_html($function_name), esc_html($priority) );
}
}
}
function get_callback_name( $key, $callback ){
$function = $callback['function'] ?? false;
if( ! $function ){
return;
}
$callback_name = '';
if( is_string($function) ){
$callback_name = $function;
} else if( is_array($function) && sizeof($function) ){
if ( is_object( $function[0] ) ) {
$callback_name = get_class($function[0] );
}
$callback_name .= '–>' . $function[1];
} else {
$callback_name = 'An anonymous function with key:' . $key;
}
return $callback_name;
}
}
$show_hooks = new Sola_Show_Hook_Position();
$show_hooks->included_hooks = array(
'woocommerce_before_main_content',
'woocommerce_after_main_content',
'woocommerce_sidebar',
'woocommerce_before_single_product',
'woocommerce_before_single_product_summary',
'woocommerce_single_product_summary',
'woocommerce_after_single_product_summary',
'woocommerce_after_single_product',
);
$show_hooks->run();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论