WordPress删除父主题中指定功能的两种方法 | 关于hook:add_action()用法的学习笔记

WordPress删除父主题中指定功能的两种方法 | 关于hook:add_action()用法的学习笔记

在折腾WordPress模版代码时经常见到两种触发function的方法,一种是用function_exists()来判断方法存不存在,如果存在则执行;另一种则是用add_action()或add_filter()来执行写好的方法,统称hook(勾子)。如果用到子主题的话,在父模版中用function_exists()会更灵活,因为在子主题中可以用相同的方法名字直接覆盖父主题的方法。下面以在子主题中删除父主题指定的方法(function)代码为例,简单整理一下:

 

方法一:function_exists()

先查看父主题中的代码。

如果想要修改父主题中的方法,只需在子主题重新写一个相同名称的方法即可。

 

方法二:使用Hook,用add_action()add_filter()调用方法

本文只以add_action()为例,父主题中:

从代码中可以看出有一个print_something()功能方法,然后用add_action()触发、执行该方法。其中add_action()中有两个参数,分别是“Hook位置(决定在哪里执行)”,“调用的方法”。有些代码也加上了第三个以数字为主的参数,那是指优先权。

如果我们要删除指定的父主题中的print_something()要怎么做呢?我的习惯是这样的三部曲:先写好你要用的新方法,然后再写一个方法用来删除父主题中指定的方法,最后再用add_action()或add_filter()调用他们。具体:

其中我们写了两个新的方法分别叫new_print_something()和remove_old_function(),一个是用来写新的功能的,另一个是用来删除父主题中指定方法的。最下面用add_action()调用并执行这两个方法。

细心的话你可能会问为什么要单独写一个remove_old_function()这样的方法来删除父主题的功能而不是直接用remove_action()来删除?因为WordPress会先执行子主题的代码,然后再执行父主题的代码,如果我们直接删除掉指定的方法,WordPress会因为父主题的代码还没有运行就执行了删除而找不到需要删除的方法,从而忽略掉这个行为。

以上即是制作子主题时常见的php文件功能修改的方法。

 

参考文献:WordPress Child Themes Tutorial

相关阅读:Action APIFilter API

 

</catmee> 文章全部原创、谢绝转载,作者「BianLei」,如果喜欢欢迎分享链接,相关内容参见本站版权声明
如果您觉得本站的存在对您多少有所帮助,可以用手机支付宝扫一扫以下二维码支付任意金额作为支持:支付宝
本站相关:QQ空间 | Facebook
Tagged . Bookmark the permalink.

WordPress免插件更改默认匿名Gravatar头像
WordPress免插件更改默认匿名Gravatar头像

查看各个WordPress插件占用资源多少的插件:Plugin Performance Profiler
查看各个WordPress插件占用资源多少的插件:Plugin Performance Profiler

WordPress批量替换评论作者URL的方法 | 通过SQL语句在数据库批量修改评论作者URL
WordPress批量替换评论作者URL的方法 | 通过SQL语句在数据库批量修改评论作者URL

免插件修改WordPress后台登陆网址 | 修改wp-login.php后台地址
免插件修改WordPress后台登陆网址 | 修改wp-login.php后台地址

WordPress在文章编辑器添加pre自定义标签按钮
WordPress在文章编辑器添加pre自定义标签按钮

COMMENT: 1

  1. 老杨 says:

    干货,主题很多地方用了方法二,不过自己写的倒没试过。

Comment Anonymously? No Problem! | 可以匿名评论了我会说?

Fill up Email address to subscribe reply and display your avatar from Gravatar (If any)
填写邮箱即可显示您在Gravatar的头像