2016-12-04 25 views
2

我想在這裏設在我父主題PHP文件的簡單修改:如何在WordPress中的子主題中重寫一個小部件?

wp-content\themes\sailing\inc\widgets\gallery\tpl\base.php 

所以我在我的子主題創建相同的文件夾結構,做我需要在這個文件的修改。我還複製/粘貼了聲明這個小部件所需的所有PHP文件。

wp-content\themes\sailing\inc\widgets\widgets.php 
wp-content\themes\sailing\inc\widgets\gallery\gallery.php 

wp-content\themes\sailing-child\inc\widgets\widgets.php 
wp-content\themes\sailing-child\inc\widgets\gallery\gallery.php 

我在這裏錯過了什麼?

回答

5

WordPress的兒童主題不是這樣工作的。您可以在子主題中使用相同路徑覆蓋的唯一文件是「基本」文件:index.php,page.php,style.css ...主要是模板文件。

說到在子主題中覆蓋函數或類。你已經幾種方法來處理它:

  1. 重新聲明的功能/班
  2. 複製的功能/班

但是它取決於你的主題是如何建立和如果這是「小孩主題」準備就緒。讓我們看看你的小部件問題。

如果你的父母主題中打開你的widget聲明文件,你會看到類似這樣的:

class Widget_Name extends WP_Widget { 
... 
CODE OF THE WIDGET 
... 

參見:https://codex.wordpress.org/Widgets_API

理想的情況是,你先不要看上面的線但是:

if(!class_exists('Widget_Name')) { 
    class Widget_Name extends WP_Widget { 
    ... 
    CODE OF THE WIDGET 
    ... 

這意味着,你可以複製/粘貼您的文件和會工作得很好,你部件將覆蓋父之一,並沒有錯誤將被拋出因爲父窗口小部件不會被執行。這是「兒童主題準備」的主題。請注意,這與函數(if(!function_exists('function_name'))相同。

不要忘記從你的child-theme/functions.php文件中調用你的文件,因爲它默認不會被調用。

像:

require_once('path/to/your/widget_class.php'); 

其他方式,如果你沒有一個class_exists電話是剛剛複製的文件,用放在require_once調用它。你應該看到一個錯誤,因爲你定義了兩次同一個類。 PHP不會讓這種情況發生,致命的錯誤。

只需重命名:

class Widget_Name2 extends WP_Widget { 

而且地方(大部分在結束的時間)的文件,尋找register_widget(和編輯類名:

register_widget('Widget_Name2'); 

這不是最方便因爲您將擁有相同小部件的2倍,但確實可行。

+0

謝謝@ 2Fwebd的答案。我現在面臨的任務,在這篇文章中描述。你的回答幫助了我。我還想補充一點,如果你沒有「兒童主題就緒」主題,並且除了重命名你的構件類,你還應該使用**重複**你的主題,你應該爲你的構件提供唯一的'id_base'到'parent :: __構造()'使你的widget出現在widget列表中。 – Edward

相關問題