2015-10-15 93 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