WordPress的兒童主題不是這樣工作的。您可以在子主題中使用相同路徑覆蓋的唯一文件是「基本」文件:index.php,page.php,style.css ...主要是模板文件。
說到在子主題中覆蓋函數或類。你已經幾種方法來處理它:
- 重新聲明的功能/班
- 複製的功能/班
但是它取決於你的主題是如何建立和如果這是「小孩主題」準備就緒。讓我們看看你的小部件問題。
如果你的父母主題中打開你的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倍,但確實可行。
謝謝@ 2Fwebd的答案。我現在面臨的任務,在這篇文章中描述。你的回答幫助了我。我還想補充一點,如果你沒有「兒童主題就緒」主題,並且除了重命名你的構件類,你還應該使用**重複**你的主題,你應該爲你的構件提供唯一的'id_base'到'parent :: __構造()'使你的widget出現在widget列表中。 – Edward