【问题标题】:Why is WooCommerce function not overriding the default function in child theme为什么 WooCommerce 功能不会覆盖子主题中的默认功能
【发布时间】:2020-06-24 00:33:40
【问题描述】:

我有一个要覆盖 WooCommerce 函数的子主题。

插件位置中的 WooCommerce 文件:woocommerce/includes/wc-template-hooks.php。我在子主题的同一层次结构中创建了一个新文件,它位于:my-child-theme/woocommerce/includes/wc-template-hooks.php

我编辑的部分是我在子主题中注释掉了产品标题:

/**
 * Product Summary Box.
 *
 * @see woocommerce_template_single_title()
 * @see woocommerce_template_single_rating()
 * @see woocommerce_template_single_price()
 * @see woocommerce_template_single_excerpt()
 * @see woocommerce_template_single_meta()
 * @see woocommerce_template_single_sharing()
 */
//add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 ); //commented
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_sharing', 50 );

但是,当我转到我的产品页面时,我仍然看到标题。

知道我做错了什么吗?

【问题讨论】:

  • 你确定woocommerce/includes/wc-template-hooks.php 是正确的吗?如果是这样,那就是您的问题,因为您只能覆盖 woocommerce 的 templates 目录中的文件。
  • 谢谢,为什么我们不能编辑includes 目录?但不管我更新了template/single-product/ 目录中的title.php,但我也看不到更改。
  • 你的目录结构是什么? template 目录需要在您的主题中的 woocommerce 目录中完全匹配:docs.woocommerce.com/document/template-structure
  • 您的子主题中不需要templates。路径应该是yourtheme\woocommerce\single-product\title.php
  • 是的,您只能覆盖templates 目录。但如果需要,您也可以通过钩子进行更改。祝你好运!

标签: php wordpress woocommerce


【解决方案1】:

您需要删除操作woocommerce_single_product_summary 才能正常工作。

add_action( 'woocommerce_before_single_product', 'remove_woocommerce_single_product_summary', 10 );
function remove_woocommerce_single_product_summary() {
    remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
}

只需将其添加到您的functions.php 即可发挥作用。

您也可以尝试在add_action() 之外添加remove_action()。就这样……

remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 15 );

...直接发送至functions.php

和它一起玩。


提示和技巧

如果您想更改标题中的 HTML 或做任何您想做的事情,这里是示例:

add_action( 'woocommerce_before_single_product', 'remove_woocommerce_single_product_summary', 10 );
function remove_woocommerce_single_product_summary() {

    // First, we remove it
    remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
    
    // Second, we add new title
    add_action( 'woocommerce_single_product_summary', 'woocommerce_my_new_title', 1 );
    
}
function woocommerce_my_new_title(){
    echo '<h1 class="some-my-custom-classes">' . the_title() . '</h1>';
}

如果您的活动主题不支持 Woocommerce 并且您想添加 您的活动主题的 Woocommerce 模板,您必须注册 WooCommerce,或提供 Woocommerce 功能。

查看这些链接了解更多详情:

https://github.com/woocommerce/woocommerce/wiki/Declaring-WooCommerce-support-in-themes

https://docs.woocommerce.com/document/template-structure/

一件重要的事情:

如果您更改 Woocommerce 插件中的模板文件夹,您很可能会在插件更新后丢失设置。这就是为什么最好在一个活跃的主题中工作。

【讨论】:

  • 谢谢@Ivijan!因此,尽管有人告诉我我不能覆盖除 template 文件夹之外的任何内容,但我仍然可以使用 add_action() 覆盖,甚至可以从我的 functions.php 文件中的 include 文件夹中运行,对吧?
  • 如果您只需要更改woocommerce_template_single_title,则无需将 Woocommerce 模板包含到您的主题中。只需将钩子添加到 functions.php 中。但是,如果您的主题不支持 Woocommerce 并且您想将 Woocommerce 模板添加到您的子主题,您需要将 Woocommerce 注册到您的活动主题。检查此链接:github.com/woocommerce/woocommerce/wiki/…
【解决方案2】:
function my_custom_action() { 
    echo '<p>Hello here</p>';
};     
add_action( 'woocommerce_single_product_summary', 'my_custom_action', 15 );

【讨论】:

  • 这将为他的标题添加额外的标题
  • 另外,建议解释您的代码如何解决/解决 OP 的问题。仅代码的答案不受欢迎。添加信息可以让访问者快速放大重要部分,更快地进行认知消化,并帮助激发访问者学习并将知识应用到他们自己的代码中。这有利于知识问答,而不是“给我代码”作为服务问答。它还保持了 SO 作为平台的高质量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 2015-08-08
  • 2015-07-27
相关资源
最近更新 更多