个性化阅读
专注于IT技术分析

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

我通过为twentyeleven主题编写一个儿童主题来开始新项目。我很少设计新主题以使用twentyeleven主题中内置的任何选项(例如背景色等)。这些剩余的选项并没有真正伤害任何东西, 但是我想摆脱它们, 因为它们什么也没做。

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

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

我敢肯定, 有了足够的推杆, 我可以用CSS或javascript隐藏该选项…但是请来吧。


#1


经过第二轮的挖掘…

这很简单!

你可以从此处开始来追溯我的步骤, 但是代码非常不言自明:

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。显然, 这些参数将根据你正在编辑的菜单或子菜单而有所不同。该页面将为你指明正确的方向。

ps:以下是从你不想使用的父主题中删除模板的方法:这对于我的确切问题不是必不可少的, 但是它与我想做的事情密切相关, 可能对尝试做我正在做的事情的人有用。


#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.
}

对于twentyeleven主题, 你还可以在孩子的functions.php中覆盖整个twentyeleven设置函数, 但这是实现这一目标的一种非常微妙的方法。


#3


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

与style.css不同, 子主题的functions.php不会覆盖其父主题中的对应对象。相反, 除了父项的functions.php之外, 还会加载它。 (具体来说, 它是在父文件之前加载的。)(1)

因此, 直接回答上述问题时, WordPress处理主题和子主题的方式可能看起来不可能(2)。

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

  1. http://codex.wordpress.org/Child_Themes
  2. http://wordpress.org/support/topic/theme-options-in-child-theme

#4


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

赞(0) 打赏
未经允许不得转载:srcmini » 如何从子主题中删除WordPress主题选项
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏