2015-10-15 90 views
1

我的WordPress网站上安装了一个插件。在WordPress中替代插件功能

我想重写插件中的一个函数。我是否在我的主题的functions.php中覆盖了这一点,如果是的话,我该怎么做?

下面是我的插件原来的功能:

/** 
    * sensei_start_course_form function. 
    * 
    * @access public 
    * @param mixed $course_id 
    * @return void 
    */ 
    function sensei_start_course_form($course_id) { 

     $prerequisite_complete = sensei_check_prerequisite_course($course_id); 

     if ($prerequisite_complete) { 
     ?><form method="POST" action="<?php echo esc_url(get_permalink()); ?>"> 

       <input type="hidden" name="<?php echo esc_attr('woothemes_sensei_start_course_noonce'); ?>" id="<?php echo esc_attr('woothemes_sensei_start_course_noonce'); ?>" value="<?php echo esc_attr(wp_create_nonce('woothemes_sensei_start_course_noonce')); ?>" /> 

       <span><input name="course_start" type="submit" class="course-start" value="<?php echo apply_filters('sensei_start_course_text', __('Start taking this Course', 'woothemes-sensei')); ?>"/></span> 

      </form><?php 
     } // End If Statement 
    } // End sensei_start_course_form() 
+1

你不能真正“覆盖”一个函数。如果定义了函数,则不能重新定义或更改它。你最好的办法是创建一个插件的副本并直接改变它的功能。当然,每次插件更新时都必须重复此操作。 –

+0

刚刚发现了这个:-)将复制插件并更新主题。我如何强制WP阅读插件的副本而不是原件? :) – michaelmcgurk

+0

@GeraldSchneider^:) – michaelmcgurk

回答

2

你不能真正“覆盖”一个函数。如果定义了函数,则不能重新定义或更改它。您最好的选择是创建插件的副本并直接更改该功能。当然,每次插件更新时都必须重复此操作。

给插件一个不同的名称以在插件列表中区分它们。禁用原件,启用您的副本。

+0

谢谢杰拉德:) – michaelmcgurk

1

您可以通过使用add_filter()功能做到这一点。
请参阅wordpress stackexchange: Override plugin with functions.php

只需将以下代码添加到主题的functions.php文件中。

add_filter('sensei_start_course_form','MyCustomfilter',$priority = 10, $args = 1); 

function MyCustomfilter($course_id) { 
// Do your logics here 
} 
+0

嗨,诺曼。不幸的是,似乎没有工作:( – michaelmcgurk

+2

'add_filter()'只适用于现有的钩子,你不能使用它重写功能 –

+1

@michaelmcgurk改变优先级('把这个$ priority = 10更改为$ priority = 9999 ')来调用你的自定义过滤器,试着在'MyCustomfilter'函数中加入'die('callingmy function');'' – Noman

2

我知道这是晚了,但在其他人发现这篇文章的事件。更简单的解决方案是,如果可以将主题功能文件复制到该主题功能文件并重命名,以便它不与原始功能发生冲突,则可以制作副本。然后用你的新功能代替原来的。这样,您可以更新插件文件而不影响您的更改。

+0

非常感谢,Braeden - 这个项目看起来像一个很长,很久以前,但我相信你的回答会帮助其他人:) – michaelmcgurk