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

eme*_*his 11 wordpress wordpress-theming

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

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

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

我肯定有足够的推特,我可以用CSS或javascript隐藏选项......但是来吧.

eme*_*his 13

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

这很容易!

你可以从这里开始回溯我的步骤,但代码是不言自明的:

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

    remove_custom_image_header();
    remove_custom_background();
    remove_theme_support('post-formats');
}
Run Code Online (Sandbox Code Playgroud)

您可以在手抄本中查看这些内容.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');
}
Run Code Online (Sandbox Code Playgroud)

在我的例子中,'themes.php'以Appearances菜单为目标,'theme_options'是在Twentyeleven主题中使用的menu_slug.显然,这些参数会根据您正在编辑的菜单或子菜单而有所不同.此页面将指向正确的方向.

ps:这里是如何摆脱你不想使用的父主题的模板: 对我的确切问题并不重要,但它与那些试图做我正在做的事情的人密切相关并且可能有用.

  • 这些建议实际上都不是实现这一目标的"正确"方法 - remove_*函数全部弃用而不支持remove_theme_support,并且init太迟而不能调用这些函数 - 应该在"after_setup_theme"中."remove_submenu_page"选项仅隐藏菜单,它实际上不会禁用支持.执行此操作的正确方法是在优先级低于10(即11或更多)的after_setup_theme操作中,以确保它在父调用after_setup_theme之后运行(假设父主题使用默认优先级10).我将发布一个新的答案以供参考. (3认同)

Sim*_*pel 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.
}
Run Code Online (Sandbox Code Playgroud)

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