【问题标题】:How to remove Wordpress theme options from child theme如何从子主题中删除 Wordpress 主题选项
【发布时间】:2012-02-18 04:12:12
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: wordpress wordpress-theming


    【解决方案1】:

    经过第二轮挖掘……

    这非常简单!

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

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

    【讨论】:

    • 这些建议实际上都不是实现这一目标的“正确”方法——remove_* 函数都已弃用,取而代之的是 remove_theme_support,而 init 调用这些函数为时已晚——应该在“after_setup_theme ”。 “remove_submenu_page”选项只是隐藏菜单,它实际上并没有禁用支持。执行此操作的正确方法是在优先级低于 10(即 11 或更高)的 after_setup_theme 操作中,以确保它在父主题调用 after_setup_theme 之后运行(假设父主题使用默认优先级 10)。我将发布一个新答案以供参考。
    • 感谢您,SDP。我想知道您是否知道从父主题中删除 one 选项选项卡而不是整个theme options 面板的方法?我的问题在这里详细描述,如果你有时间看的话:wordpress.stackexchange.com/questions/138584/…
    【解决方案2】:

    从子主题中删除父主题中添加的主题支持的正确方法是在优先级低于父主题的 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 中覆盖整个二十一设置函数,但这是实现此目的的相当简单的方法。

    【讨论】:

    • 有没有办法从父主题中删除 one 选项选项卡而不是整个theme options 面板?我的问题在这里详细描述,如果你有时间看的话:wordpress.stackexchange.com/questions/138584/…
    • 据说,西蒙是对的。这是实现它的正确方法。但是我不能让它在 WC Storefront 的子主题中工作。不知道如何删除这个该死的代码。
    【解决方案3】:

    不幸的是,在 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

    【讨论】:

    • 谢谢,但这并没有真正的帮助,因为它基本上重申了原始问题。
    • 我相信答案在于子主题无法移除父主题功能。
    • 我编辑了答案以包含原始的隐含答案。 :)
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 2015-09-29
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多