【问题标题】:Can I override a PHP Function that is called in another file/plugin?我可以覆盖在另一个文件/插件中调用的 PHP 函数吗?
【发布时间】:2012-11-20 17:32:09
【问题描述】:

首先,我已经阅读了“Override default php function”并且命名空间不能满足我的需要。我也研究了PHP.net's override_function(),但这也不能帮助我解决我的问题。

我正在使用名为 Jigoshop 的 Wordpress 插件作为电子商务解决方案,但在某些情况下,我无法删除将自己的结构应用到“单一产品”页面所需的操作。我不想自己编辑插件文件,因为插件更新可能会否定并删除我以前的更改。本质上,我想通过我的/themes/mytheme/functions.php 文件来控制输出。

之前有没有人遇到过这种情况,因为同样的“更新”原因,原始函数包含在我不想编辑的文件中?

谢谢

编辑(2012-11-21): 我的functions.php 文件中有一个自定义函数,如下所示:

function prepare_jigoshop_wrappers() {
    remove_action('jigoshop_before_main_content', 'jigoshop_breadcrumb', 20);
    add_action('jigoshop_before_main_content', 'custom_jigoshop_breadcrumb', 10);
}
add_action('wp_head', 'prepare_jigoshop_wrappers');

这基本上允许我应用自己的结构和配置。对于其他默认功能,它有点困难。例如,“数量选择器”、“添加到购物车”按钮和“库存可用性”都包含在 jigoshop_template_actions.php 文件中名为 jigoshop_template_single_summary 的函数中,调用 _title_price、@987654330 之类的函数@、_meta_sharing & _add_to_cart

这些显示的顺序,我似乎无法更改。因此,我想从本质上重新定义function jigoshop_template_single_summary() {...}

【问题讨论】:

  • 也许您可以详细说明您的问题的细节,因为可能存在根本不涉及覆盖的替代解决方案。插件函数给出的输出是什么,你想如何修改它?
  • 嗨@Jrod,见上面的编辑。谢谢

标签: php wordpress customization jigoshop


【解决方案1】:

您可能想查看 PECL 扩展。它可以满足您的需求,PHP.NET 上的文档。

runkit_function_redefine

(PECL 运行套件 >= 0.7.0)

【讨论】:

  • runkit 基本上已经死了。没有基于 PHP 5.2 的稳定版本,5.3 或更高版本根本没有。
  • 免责声明,我没有使用过,但是......官方的runkit扩展现在托管在github.com/zenovich/runkit上,当前的master分支完全支持从4.4到5.3和5.4的所有当代PHP版本。跨度>
  • 谢谢大家。不过问题是,我可以用 runkit 函数做类似的事情吗? runkit_function_redefine('original_function', $args, 'my_new_function');我还用更多信息更新了这个问题。干杯
【解决方案2】:

我不太了解这个插件,但可能这就是你需要的Theming with Jigoshop

重写 php 中的一些函数(也是常见的..)从来都不是一个好主意。如果插件没有提供一种方法来挂钩它的功能,有时最好使用替代插件或重写核心代码..

【讨论】:

  • 谢谢@Philipp。我一直遵循 Jigoshop 的说明,但我几乎希望自定义标记更容易,这样我就可以完全按照我的意愿去做。我已经用更多信息更新了原始问题。不过还是谢谢。
猜你喜欢
  • 2012-08-23
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
相关资源
最近更新 更多