如何从子主题中删除Wordpress主题选项

时间:2012-01-24 22:02:36

标签: wordpress wordpress-theming

我通过为二十二主题编写一个子主题来开始新项目。我很少设计新主题来使用二十二主题中内置的任何选项(例如背景颜色等)。那些剩余的选择并没有真正伤害任何东西,但我想摆脱他们,因为他们什么都不做。

麻烦的是主题选项是在父主题的functions.php中声明的,它与子主题的functions.php文件一起加载(而不是代替)所以我可以删除但是他们会在下次升级时回来。

有没有办法从我的子主题中删除或禁用这些主题选项?或许类似于" remove_options()"功能?或者可能达到这种效果的东西?换句话说,问题是是否可以删除theme_options而不删除/覆盖添加它们的原始函数。

我确信有足够的推特,我可以用CSS或javascript隐藏选项...但是c' mon。

4 个答案:

答案 0 :(得分:13)

经过第二轮挖掘......

这很容易!

您可以通过启动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'以Appearances菜单为目标,'theme_options'是在Twentyeleven主题中使用的menu_slug。显然,这些参数会根据您正在编辑的菜单或子菜单而有所不同。 This page会指出正确的方向。

ps:以下是如何从您不想使用的父主题中删除模板: THIS对我的确切问题并不重要,但它与任何试图做我正在做的事情的人密切相关并且可能有用。

答案 1 :(得分:9)

从子主题中删除父主题中添加的主题支持的正确方法是在调用的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.
}

在二十二主题的情况下,您也可以在孩子的functions.php中覆盖整个Twentyeleven_setup函数,但这是实现此目的的一种相当不明智的方法。

答案 2 :(得分: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

答案 3 :(得分:1)

这是一个旧线程,所以我只想添加一个人进入这个地方并想要一个答案。我通过获取该确切文件,制作副本并将其添加到子主题来解决子主题。我有插件“高级代码编辑器”所以我不需要进入FTP。复制要编辑的特定文件,在子主题中创建具有相同名称和内容的新工作表,然后执行所需的编辑。它将首先获取子主题文件,并且您的站点将被更新。