【问题标题】:How to use str_replace, WordPress hooks, and WooCommerce functions如何使用 str_replace、WordPress 钩子和 WooCommerce 函数
【发布时间】:2013-02-28 23:00:37
【问题描述】:

在 WooCommerce 中,有一个主模板,一切都在运行。

这里:https://github.com/woothemes/woocommerce/blob/master/woocommerce-template.php#L1315

line 1315 及以下我们开始 html 进行结帐,但问题是所有内容都在 <p> 标记中。我想将其更改为<div><li><dd>(未定)。尽管如此,我还是想更改标签。

我希望通过str_replace("<p","<div",$some_variable);str_replace("/p>","/div>",$some_variable); 来实现,但我对调用什么钩子感到非常困惑。

哦,我不编辑主文件的原因是因为插件的每次更新都会被覆盖且效率低下:]

【问题讨论】:

    标签: php wordpress hook woocommerce


    【解决方案1】:

    在 Switch 结束时,您可以编辑 if 语句,使其看起来像这样替换 第 1468 行

    发件人:

    if ( $args['return'] ) return $field; else echo $field;
    

    收件人:

    if ( $args['return'] ) {
        str_replace("<p","<div",$field);
        str_replace("/p>","/div>",$field);
        return $field;
    } else {
        str_replace("<p","<div",$field);
        str_replace("/p>","/div>",$field);
        echo $field;
    }
    

    或者您可以在 break

    之前将其添加到每个 case
    case "country" :
    
        ...
        ...
        ...
    
        str_replace("<p","<div",$field);
        str_replace("/p>","/div>",$field);
    break;       
    

    您可以尝试编辑模板

    http://docs.woothemes.com/document/template-structure/

    您可以通过覆盖以安全升级的方式编辑这些文件。 只需将其复制到主题中名为 /woocommerce 的目录中, 保持相同的文件结构。

    示例:要覆盖管理员订单通知,请复制: woocommerce/templates/emails/admin-new-order.php 到 yourtheme/woocommerce/emails/admin-new-order.php

    复制的文件现在将覆盖 WooCommerce 默认模板 文件。不要在核心插件本身中编辑这些文件,因为它们 在升级过程中被覆盖,任何自定义将 迷路了。

    【讨论】:

    • 没有办法上钩吗?添加到wordpress的functions.php?
    • 我会继续我的最后一次更新,然后走那条路。 Woocommerce 为每个钩子设置了 do_action,所以我认为您不能将其绑定到插件/变量以使其输出不同。您可以重新创建模板文件,而不是让它输出您想要的内容。
    • 我仍然不清楚该怎么做,因为 do_action 链接到 woocommerce_template.php 文件。但是,如果我的想法正确,您是否建议将 form-checkout.php 中的 do_action( 'woocommerce_checkout_billing' ); 钩子替换为我的 function.php 中的自定义钩子,其中包含来自 woocommerce-template.php 的内容?
    • 是的,如果您不想编辑插件数据,因为我们都知道这不是一个好主意,您必须创建自己的 do_action 来替换已经存在的内容。基本上创建自己的函数和直接与 woocommerce 交互的钩子。您也可以将此作为参考docs.woothemes.com/document/hooks
    • 就我个人而言,我不知道一种方法,但您可以通过在 do_action 中使用 add_filter 作为单独的函数并在单独的插件中从中返回 str_replace() 来摆脱困境。 codex.wordpress.org/Function_Reference/add_filter
    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 2020-10-25
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多