2012-01-24 102 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。复制要编辑的特定文件,在具有相同名称和内容的子主题中创建新工作表,然后在其中进行编辑。它将首先获取子主题文件,并且您的网站将被更新。