Notice: Trying to access array offset on value of type bool in /www/wwwroot/weimahe.com/wp-content/advanced-cache.php on line 472

Notice: Trying to access array offset on value of type bool in /www/wwwroot/weimahe.com/wp-content/advanced-cache.php on line 472
WordPress删除父主题中指定函数功能的方法 - 微码盒
!
也想出现在这里? 联系我们
广告位

WordPress删除父主题中指定函数功能的方法

在折腾 WordPress 模版代码时经常见到两种触发 function 的方法,一种是用 function_exists()来判断方法存不存在,如果存在则执行;另一种则是用 add_action()或 add_filter()来执行写好的方法,统称 hook(勾子)。

如果用到子主题的话,在父模版中用 function_exists()会更灵活,因为在子主题中可以用相同的方法名字直接覆盖父主题的方法。下面以在子主题中删除父主题指定的方8 n 3 ^ s P )法(function)代码为例,简单整理一下:

方法& m Q p # x \ 5一:

先查看父主题中的代码。

  1. // 父主题中function.php的代码
  2. if ( ! function_j % ,existk 9 f a Js('print_something'^ t b ^ } h D !) ) {
  3. function print_something() {
  4. // 功能代码
  5. }
  6. }

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

  1. // 子主题中function.php的代码
  2. function print_something() {
  3. // 功能代码
  4. g b @ 6 n5;

方法二:

使用 Hook,用 add_acN # X R Rtion()或 add_filter()调用方法,本文只以 add_a} g 7 - [ / i k /ctionp g S -()为例,父主题中:

  1. // 父主题中function.php的代码
  2. function pB V & U e : irint_something() {
  3. // 功能代码
  4. }
  5. a\ b K 3 { : d n jdd_action('wp_head', 'print_sometR z S C {hing');

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

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

  1. // 子主题中function.php的代码
  2. function new_print_something() {
  3. // 你要写的、新的功能代码
  4. }
  5. function remove_old_function() {
  6. remove_action& ? h A t 0 ('wp_head', 'print_something');
  7. }
  8. add_action('init', 'remove_old_function');
  9. add_X x R ;action('wp_head', 'new_print_something'&Z A ` M }#41;;

其中我们写了两个新的方法分别叫 n& 7 bem 6 D 9 lw_print_something()和 remove_old_function(),一个是用来写新的功能的,另一个是用来删除父主l e + ) b题中O , f w J指定方法的。最下面用`add_action()`调用并执行这两个方法。

细心的话你可能会问为什么要单独写一个 remove_old| l ,_function()这S x H样的方法来删除父主题的功能而不是直接用 remove_action()来删除?因为 WordPress` Z f - 2 u B B n 会先执行子主题的代码,然后再执行父主题的代码,如果我们直接删除掉指定的方法,WordPress 会因为父主题的代码还没有运行就执行了删除Y - | y N {而找不到需要删除的方法,从而忽略掉这个行为。

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

纯代码实现 WordPress 支持 WebP 格式图片上传

2022-9-16 11:47:42

WordPress教程

DPlayer Lite 视频插件支持m3u8格式

2022-9-16 11:49:26

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索