我想修改/覆盖写在woocommerce-functions.php文件中的函数, 但是我不想修改woocommerce-functions.php文件。那就是我想在插件或主题中实现这一点。
#1可以覆盖woocommerce功能, 我最近做了这件事, 并将所有woocommerce扩展功能添加到主题的functions.php文件中, 以便woocommerce插件文件保持不变并可以安全更新。
此页面提供了一个示例, 说明如何删除他们的操作并将其替换为你自己的操作-http://wordpress.org/support/topic/overriding-woocommerce_process_registration-in-child-theme-functionsphp
该页面提供了扩展其功能而不删除其功能以及使用子主题的示例-http://uploadwp.com/customizing-the-woocommerce-checkout-page/
希望这可以帮助 :)
#2WooCommerce提供了一个模板系统。可以覆盖woocommerce功能。无需修改核心文件即可自定义WooCommerce的一种好方法是使用钩子-
如果使用挂钩添加或操作代码, 则可以将自定义代码添加到主题functions.php文件中。
- 使用动作挂钩-
参见下面的示例, 了解将代码放置在何处:
add_action('action_name', 'your_function_name');
function your_function_name()
{
// Your code
}
- 使用过滤钩
要操纵传递的变量, 可以执行以下操作:
add_filter('filter_name', 'your_function_name');
function your_function_name( $variable )
{
// Your code
return $variable;
}
在这里你可以获取WooCommerce操作和筛选器挂钩-https://docs.woothemes.com/wc-apidocs/hook-docs.html#3如果你有子主题, 则可以将相关文件复制到主题并重写副本。该副本将优先于WooCommerce版本使用。
#4我需要为移动设备上的视频添加” 播放” 按钮(默认情况下, 此按钮仅显示在桌面上)。
我需要重写wp-content / themes / gon / framework / theme_functions.php中的函数:
function ts_template_single_product_video_button(){
if( wp_is_mobile() ){
return;
}
global $product;
$video_url = get_post_meta($product->
id, 'ts_prod_video_url', true);
if( !empty($video_url) ){
$ajax_url = admin_url('admin-ajax.php', is_ssl()?'https':'http').'?ajax=true&
action=load_product_video&
product_id='.$product->
id;
echo '<
a class="ts-product-video-button" href="'.esc_url($ajax_url).'">
<
/a>
';
}
}
我发现此说明指出, 如果你使用挂钩添加或操作代码, 则可以将自定义代码添加到主题的functions.php文件中。
【要覆盖写在woocommerce-functions.php文件中的函数】我已经有了wp-content / themes / gon-child / functions.php(即原始的gon主题已复制到gon-child), 所以我要做的是:
// Enable tour video on mobile devices
remove_action('ts_before_product_image', 'ts_template_single_product_video_button', 1);
add_action('ts_before_product_image', 'ts_template_single_product_video_button_w_mobile', 1);
function ts_template_single_product_video_button_w_mobile(){
global $product;
$video_url = get_post_meta($product->
id, 'ts_prod_video_url', true);
if( !empty($video_url) ){
$ajax_url = admin_url('admin-ajax.php', is_ssl()?'https':'http').'?ajax=true&
action=load_product_video&
product_id='.$product->
id;
echo '<
a class="ts-product-video-button" href="'.esc_url($ajax_url).'">
<
/a>
';
}
}?>
推荐阅读
- 想要从主题页脚中删除链接
- 想要使WordPress网站中每个页面加载的脚本保持不变
- 文本和图像的Visual/HTML编辑器问题
- 是否使用WordPress主题定制器( [关闭])
- 使用WordPress作为CMS
- 在WordPress中使用jQuery.load()函数
- 在WordPress中使用Composer
- VLAN概述与交换机的命令(accesstrunk)实验
- 写给初学者,一文搞懂大数据学习岗位面试及简历