我通过为twentyeleven主题编写一个儿童主题来开始新项目。我很少设计新主题以使用twentyeleven主题中内置的任何选项(例如背景色等)。这些剩余的选项并没有真正伤害任何东西, 但是我想摆脱它们, 因为它们什么也没做。
麻烦的是, 主题选项在父主题的functions.php中声明, 该选项与子主题的functions.php文件一起加载(而不是替代)(因此我可以删除它们, 但它们将在下一次升级时返回)。
有没有办法从我的子主题中删除或禁用那些主题选项?也许类似于”
remove_options()”
函数的东西?也许会达到这种效果的东西?换句话说, 问题是是否可以在不删除/覆盖添加了它们的原始函数的情况下删除theme_options。
【如何从子主题中删除WordPress主题选项】我敢肯定, 有了足够的推杆, 我可以用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.phpadd_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文件中包含那些额外的函数或变量。
- http://codex.wordpress.org/Child_Themes
- http://wordpress.org/support/topic/theme-options-in-child-theme
推荐阅读
- 如何在wordpress中更新更新后的元数据上保存多个复选框()
- mysql配置主从配置遇到的坑
- AWS EKS Horizontal Pod Autoscaler(HPA)
- web服务之源码编译安装LAMP(编译安装PHP 解析环境)
- python自动化测试六
- LAMP(ApacheMySQLPHP)
- 运维工程师必备利器|一招实现运维智能化!
- Web服务之Nginx优化与防盗链
- 自动化集成(Pipeline整合Docker+K8S)