【问题标题】:Override Parent Theme Function in Child Theme? How?在子主题中覆盖父主题功能?如何?
【发布时间】:2015-08-08 08:29:31
【问题描述】:

我想改变这个函数的输出。

function ph_mailchimp($action){
    $msg = get_theme_mod('pic_mailchimp', 'text');
    $output = '
    <div class="newsletter-box well">
      <p>' . $msg  . '</p>
      <form accept-charset="UTF-8" action="'.$action.'" class="new_subscriber" data-remote="true" id="mc-embedded-subscribe-form" method="post">
        <div style="display:none">
          <input name="utf8" type="hidden" value="">
        </div>
        <input class="inputfield" id="mce-EMAIL" name="EMAIL" placeholder="Your email" type="email">
        <input name="subscribe" type="submit" value="Subscribe">
      </form>
    </div>';
    return $output;
}

基本上我想在我的子主题的functions.php 文件中添加一个代码来覆盖上面函数中的输出。

有人可以帮忙吗?谢谢。

【问题讨论】:

  • 该功能是如何与 WordPress 挂钩的?在哪个动作钩子下?
  • 文件中没有该函数的 add_action 行。函数名称 ph_mailchimp 仅在上面的代码中提及。就是这样。
  • 它叫什么名字?在模板中?不能直接覆盖模板改函数名吗?
  • 这是我的 Wordpress 主题中的主要 functions.php 文件。我无法覆盖它。我相信它必须使用过滤器和钩子来完成。

标签: php wordpress function overriding


【解决方案1】:

你可以,如果你有正确的设置。从 PECL 或 runkit 安装 APD。如果你有 runkit,这应该可以解决问题:

runkit_function_remove ( "ph_mailchimp" );

function ph_mailchimp() {
    echo "Foobar";//do stuff here
}

【讨论】:

  • 请注意...如果该函数是通过 WordPress Action 挂钩挂钩的,则 OP 将不需要 APD 或 runkit。否则,这是一个不错的选择。
  • 我在 OP 中添加的函数是父主题的 functions.php 文件中的函数。我想要的是在子主题中以某种方式覆盖输出。
  • 基本上我想在网站上显示不同的表单,而不是函数中的表单。
  • 在此处查看 mevius 的注释。我不知道该动作是否被钩住了,但是由于您正在测试(我假设),我会尝试重写该函数并查看它是否会爆炸。如果没有,您就赢了,如果是,请尝试 APD 或 runkit。如果失败了,JS hack 的可能性总是存在的:P
  • 我不是程序员,所以我不知道如何开始使用 APD 或 runkit。无论如何,必须有一种方法可以覆盖子主题中的功能。人们通常如何覆盖主题中的功能?有人可以帮忙吗?
猜你喜欢
  • 2021-10-19
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
相关资源
最近更新 更多