当前位置: 首页 > 面试题库 >

WooCommerce操作挂钩和覆盖模板

叶恩
2023-03-14
问题内容

我已经开始学习如何使用WooCommerce创建模板,但遇到了一个小问题。例如,在Woocommerce插件的php文件content-single-
product.php中,我有这样的字符串:

     <?php
        /**
         * woocommerce_single_product_summary hook.
         *
         * @hooked woocommerce_template_single_title - 5
         * @hooked woocommerce_template_single_rating - 10
         * @hooked woocommerce_template_single_price - 10
         * @hooked woocommerce_template_single_excerpt - 20
         * @hooked woocommerce_template_single_add_to_cart - 30
         * @hooked woocommerce_template_single_meta - 40
         * @hooked woocommerce_template_single_sharing - 50
         */
        do_action( 'woocommerce_single_product_summary' );

    ?>

例如,当我要编辑此内容(删除一些字段并更改结构)时,我尝试擦除字符串:

do_action(’woocommerce_single_product_summary’);

然后写成这样:

<?php
        /**
         * woocommerce_single_product_summary hook.
         *
         * @hooked woocommerce_template_single_title - 5
         * @hooked woocommerce_template_single_rating - 10
         * @hooked woocommerce_template_single_price - 10
         * @hooked woocommerce_template_single_excerpt - 20
         * @hooked woocommerce_template_single_add_to_cart - 30
         * @hooked woocommerce_template_single_meta - 40
         * @hooked woocommerce_template_single_sharing - 50
         */
        //do_action( 'woocommerce_single_product_summary' );
        do_action('woocommerce_template_single_title');
    ?>

你能告诉我为什么这不起作用吗?

什么是正确的编辑方式?

谢谢


问题答案:

首先在 下面的参考中, 您将找到如何通过主题
正确覆盖woocommerce模板
(避免编辑插件模板)

在您的第一个代码段中,如您对 woocommerce_single_product_summaryhook所看到的,您必须使用WordPress函数对 @hooked 位于此 hook位置的 所有不同模板进行排序
do_action()

do_action( 'woocommerce_single_product_summary' );

因此,在您的自定义代码(第2的代码片段)你刚更换过 ,用 钩模板蛞蝓 _(即 不是 一个钩)_和将 工作为切入点
行动挂钩 。请参阅此答案底部的参考,以获取WooCommerce操作列表并过滤现有的挂钩

后果:* 如果您将钩子替换为模板slug ,则注释列表代码中所有其他钩子模板(以 @hooked 开头)将丢失。 *

说明 (如何)

如何-具体示例

您要 自定义woocommerce_template_single_titlehook中的
woocommerce_single_product_summary 钩子 模板

THE HOOK NAME:  woocommerce_single_product_summary hook.

THE TEMPLATES HOOKED (+priority order number)  => corresponding template

file name:
— woocommerce_template_single_title (5) => single-
product/title.php
— woocommerce_template_single_rating (10) => single-
product/rating.php
— woocommerce_template_single_price (10) => single-
product/price.php
— woocommerce_template_single_excerpt (20) => single-product/short-
description.php
— woocommerce_template_single_add_to_cart(30) => single-product/add-to-
cart/ (6 files depending on product type)
— woocommerce_template_single_meta (40) => single-product/review-
meta.php
— woocommerce_template_single_sharing - (50) => single-
product/share.php

然后,您将需要 编辑 位于 (子文件夹)中 的相应 woocommerce_single_product_summary 钩子
。。。一旦我们了解了模板结构文件和该模板中的钩子,最后并没有那么复杂。 title.php single-product __

优先数 ,给出了钩模板的顺序:先中更小,在年底大…

其他方式:

您还可以使用所有现有模板的挂钩 来针对非常特定的更改或自定义,并将自定义功能置于 function.php
活动子主题(或主题)的文件或任何插件文件中。

使用add_action()WordPress函数的示例:

// define the woocommerce_single_product_summary callback function

function my_custom_action() { 
    echo '<p>This is my custom action function</p>';
};     
add_action( 'woocommerce_single_product_summary', 'my_custom_action', 15 );

这个函数的优先级序号 15 ,并显示 “这是我的自定义操作功能” 字符串文本,之间 product price
product short description

此挂钩函数的此挂钩函数的可选参数:
-模板slug(字符串)。
-优先级(int)。



 类似资料:
  • 问题内容: 如果要覆盖django中应用程序随附的模板(在app / templates / app /中),请在另一个目录中创建相同名称的模板,模板加载器会在应用程序的模板目录之前检查该模板。如果您只想覆盖模板的某些块,则还必须复制整个模板广告,更改该块,这实际上不是很干。 有人知道一种方法来覆盖原始模板,同时扩展它,以便您只需要覆盖要更改的特定块吗?(这样做是在不更改模板名称的情况下进行的,因

  • 问题内容: 我正在写入txt文件,但是每次我执行写入过程时,它都会覆盖那里已经写入的内容。如何更改代码,使程序的这一部分不会覆盖已经存在的内容? 问题答案: 将true作为第二个参数传递给FileWriter以打开“附加”模式。

  • 我写一些模块为PrestaShop 1.7。但是我有一个新的钩子的问题。 我注册hook,然后给他写方法。 有人知道我的代码哪里出错了,我在1.6中使用了这个功能,一切都很好,但在1.7中却没有。如果我的问题含糊不清,我很抱歉,但我的研究以失败告终。 感谢所有的帮助!

  • 问题内容: 我是django的新人。 我想创建一个自定义窗口小部件。 forms.py: widget.py: project / widgets / filter.html: 但是它不会呈现新模板,而是仍然呈现旧方法。 你能给我一些提示吗? 问题答案: Django版本 <1.11: 小部件必须实现该方法才能呈现不同的模板: Django 1.11版: 在渲染器的文档中,我们可以找到以下内容:

  • 问题内容: 我有一个.net Core Web Api,其配置文件位于名为Config的文件夹下。我从中创建了图像和一个容器,并且使用终端可以正确看到该容器中包含文件夹和配置文件。 我的问题是,到目前为止,按照要求,我找不到找到将相同的容器安装/绑定Config文件夹绑定到物理路径的容器的方法: 1)将Config文件夹挂载到特定的主机位置 2)在创建容器时,Config文件夹应填充映像中的文件

  • 问题内容: 假设我在课堂上说两种方法 和 那是什么感觉 重载还是重载? 问题答案: 重载是指两个或多个具有相同名称但参数不同的方法,就像您的示例一样。重载是从接口或抽象类实现一个方法的,因此超类中的方法具有实现,而子类中的方法具有不同的实现,它们仍然具有相同的方法名称和参数。