2012-01-24 138 views
7

我通過爲twentyeleven主題編寫子主題來開始新項目。我很少設計新的主題來使用內置於二十世紀主題中的任何選項(例如背景顏色等)。這些剩餘選項並沒有真正傷害任何東西,但我想擺脫它們,因爲它們什麼都不做。如何從子主題中刪除Wordpress主題選項

問題在於,主題選項是在父主題的functions.php中聲明的,它隨同(而不是)兒童主題的functions.php文件一起加載(所以我可以刪除它們但它們會回來下次升級)。

有沒有辦法從我的孩子主題中刪除或禁用這些主題選項?也許沿着「remove_options()」函數的一些東西?或者,也許可以實現這種效果的東西?換句話說,的問題是,是否可以刪除theme_options而不刪除/覆蓋添加它們的原始函數。

我敢肯定,有足夠的推,,我可以隱藏與CSS或javascript的選項......但來吧。

回答

12

第二輪挖後...

這完全是很容易!

您可以通過啓動here折回我的腳步,但代碼是不言自明:

add_action('init', 'remove_crap'); 
    function remove_crap() { 

    remove_custom_image_header(); 
    remove_custom_background(); 
    remove_theme_support('post-formats'); 
} 

可以在食品中查看這。 Remove_theme_support採用幾個字符串中的一個來標識各種選項(除了後期格式)。我遇到的唯一問題是他們需要從一個鉤子中調用(你不能將它們壓制到functions.php中)。我正在使用init,但可能有另一個更適用。

我唯一還沒弄清楚的是如何刪除出現在外觀下的「主題選項」頁面鏈接。我知道它已加入add_theme_page(),但似乎並不方便remove_theme_page()

更新:我找到了! 這是非常糟糕記錄,但最終這是很容易做到:

add_action('admin_init', 'remove_twentyeleven_theme_options', 11); 
    function remove_twentyeleven_theme_options() { 
remove_submenu_page('themes.php', 'theme_options'); 
} 

在我的例子,「themes.php」目標的外觀菜單和「theme_options」是twentyeleven主題使用的menu_slug。很明顯,這些參數會根據您正在編輯的菜單或子菜單而有所不同。 This page會指引您正確的方向。

PS:這裏是如何擺脫來自父主題模板,你不想使用: THIS是不是我的確切問題至關重要,但它密切相關的,可能有用的人誰是試圖做我在做什麼。

+2

這兩個建議實際上都不是實現這個目標的「正確」方式 - remove_ *函數都被棄用而不是remove_theme_support,並且init不能調用這些函數 - 應該是在「after_setup_theme」中。 「remove_submenu_page」選項僅隱藏菜單,但實際上並不禁用支持。正確的做法是在after_setup_theme action中使用優先級低於10(即11或更多)的操作來確保它在父級對after_setup_theme的調用之後運行(假定父級主題使用默認優先級10)。我會發佈一個新的答案供參考。 –

+0

謝謝你,SDP。我想知道如果你知道從父主題中刪除* one * option選項卡而不是整個'theme options'面板的方法嗎?我的問題在這裏詳細描述,如果你有時間看看它:http://wordpress.stackexchange.com/questions/138584/how-do-i-remove-a-parents-theme-option-tab-through-孩子主題 – J82

1

不幸的是,主題繼承在Wordpress中的應用方式是,子主題功能只是「添加到」父主題功能。

與style.css不同,子主題的functions.php不會覆蓋父對象的對應部分。相反,除了父級的functions.php之外,它還會被加載。 (1)

所以,直接回答你的問題上面,它看起來像(2)這樣可能無法用WordPress處理主題和孩子的方式主題。

就我個人而言,我不擔心在functions.php文件中有那些額外的函數或變量。

  1. http://codex.wordpress.org/Child_Themes
  2. http://wordpress.org/support/topic/theme-options-in-child-theme
+0

謝謝,但這不是真的有用,因爲它基本上重申了原來的問題。 – emersonthis

+0

我相信答案在於,兒童主題不能移除父主題功能。 – summea

+0

我編輯了答案,以包含原始的,隱含的答案。 :) – summea

8

從子主題中刪除父主題中添加的主題支持的正確方法是在after_setup_theme操作中調用remove_theme_support,該操作的優先級低於父類的優先級。

子主題中的functions.php文件在父主題的前面被調用,所以如果你使用after_setup_theme的默認優先級,那麼孩子的after_setup_theme最終會在父類之前被調用,所以你最終刪除您的孩子中不存在的主題支持,只是讓它從運行after_setup_theme的父級添加回來。

因此,通過添加具有較低優先級的子動作,可以確保它在父對同一動作調用後被調用。

所以:

// added to child's functions.php  

add_action('after_setup_theme', 'child_after_setup_theme', 11); 
// Parent theme uses the default priority of 10, so 
// use a priority of 11 to load after the parent theme. 

function child_after_setup_theme() 
{ 
    remove_theme_support('custom-background'); 
    remove_theme_support('custom-header'); 
    remove_theme_support('post-formats'); 
    // ... etc. 
} 

在twentyeleven主題的情況下,你也只是過騎在你的孩子的functions.php整個twentyeleven_setup功能,但是這是實現這一目標的,而那麼直接的方法。

+0

有沒有什麼辦法從父主題中刪除* one * option選項卡而不是整個'theme options'面板?我的問題在這裏詳細描述,如果你有時間看看它:http://wordpress.stackexchange。com/questions/138584/how-do-i-remove-a-parents-theme-option-tab-through-the-child-theme – J82

+0

假設西蒙是對的。這是實現它的正確方法。不過,我無法讓它在WC店面的兒童主題中工作。不知道如何刪除這個該死的代碼。 – retroriff

1

這是一個古老的線程,所以我只是想添加如果有人進入這個地方,並希望得到答案。我通過採取確切的文件,製作副本並將其添加到兒童主題來解決兒童主題。我有插件「高級代碼編輯器」,所以我不需要進入FTP。複製要編輯的特定文件,在具有相同名稱和內容的子主題中創建新工作表,然後在其中進行編輯。它將首先獲取子主題文件,並且您的網站將被更新。