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

如何从子主题中删除Wordpress主题选项,wordpress,wordpress-theming,Wordpress,Wordpress Theming,我通过为twentyeleven主题写一个儿童主题来开始新的项目。我很少在设计新主题时使用twentyeleven主题中内置的任何选项(例如背景色等)。那些剩余的选择并没有什么坏处,但我想把它们扔掉,因为它们什么都不做 问题在于,主题选项是在父主题的functions.php中声明的,它与子主题的functions.php文件一起加载(而不是一起加载)(因此我可以删除它们,但它们将在下一次升级时返回) 有没有办法从我的子主题中删除或禁用这些主题选项?也许是与“remove_options()”函

我通过为twentyeleven主题写一个儿童主题来开始新的项目。我很少在设计新主题时使用twentyeleven主题中内置的任何选项(例如背景色等)。那些剩余的选择并没有什么坏处,但我想把它们扔掉,因为它们什么都不做

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

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


我确信有了足够的puttering,我可以用CSS或javascript隐藏选项。。。但别这样。

不幸的是,主题继承在Wordpress中的工作方式是子主题函数只是“添加”到父主题函数上

与style.css不同,子主题的functions.php不会覆盖父主题的对应项。相反,它是在父函数的functions.php之外加载的。(具体地说,它是在父文件之前加载的。)(1)

所以,在直接回答你上面的问题时,WordPress处理主题和子主题的方式似乎不可能做到这一点

就我个人而言,我不担心在functions.php文件中有那些额外的函数或变量


  • 经过第二轮挖掘

    这很容易

    您可以通过启动来追溯我的步骤,但代码非常简单:

    add_action( 'init', 'remove_crap' );
        function remove_crap() {
    
        remove_custom_image_header();
        remove_custom_background();
        remove_theme_support('post-formats');
    }
    
    你可以在法典中查到这些。Remove_theme_支持使用几个字符串中的一个来标识各种选项(除了post格式)。我遇到的唯一问题是需要从钩子调用它们(不能将它们转储到functions.php中)。我使用的是
    init
    ,但可能还有另一个更合适

    我唯一还没有弄明白的是如何删除出现在外观下的“主题选项”页面链接。我知道它添加了
    add\u theme\u page()
    ,但似乎没有一个方便的
    remove\u theme\u 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\u options”是twentyeleven主题中使用的菜单slug。显然,这些参数将根据您正在编辑的菜单或子菜单而有所不同。将为您指明正确的方向

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

    从子主题中删除父主题中添加的主题支持的正确方法是,在一个优先级低于父主题的后设置主题操作中调用以删除主题支持

    子主题中的functions.php文件在父主题之前被调用,因此如果您使用after_setup_主题的默认优先级,子主题的after_setup_主题最终会在父主题之前被调用,因此您最终会删除子主题中不存在的主题支持,只是为了在安装主题之后从运行的父级重新添加它

    因此,通过添加优先级较低的子操作,可以确保在父操作调用同一操作后调用它

    因此:


    对于twentyeleven主题,您也可以在child's functions.php中使用整个twentyeleven_设置函数,但这是一种非常不容易实现的方法。

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

    谢谢,但这并没有真正的帮助,因为它实际上重申了原始问题。我相信答案在于,子主题无法删除父主题功能。我编辑了答案,以包括原始的隐含答案。:)这两个建议实际上都不是实现这一点的“正确”方法-删除功能都不推荐使用,支持删除主题,而init调用这些功能为时已晚-应该在“设置主题后”中。“remove_submenu_page”选项仅隐藏菜单,实际上并不禁用支持。正确的方法是使用优先级低于10(即11或更多)的after_setup_主题操作,以确保它在父级调用after_setup_主题后运行(假设父级主题使用默认优先级10)。我将发布一个新答案供参考。谢谢你,SDP。我想知道您是否知道如何从父主题中删除一个选项选项卡,而不是整个
    主题选项
    面板?如果您有时间查看,我的问题将在这里详细介绍:是否有任何方法可以仅从父主题中删除一个选项选项卡,而不是从整个
    主题选项
    面板中删除?如果你有时间看的话,我的问题会在这里详细描述:据推测,西蒙是对的。这是实现它的正确方法。然而,我不能让它在WC店面的儿童主题中工作。不知道如何删除这个该死的代码。
    // 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.
    }