在折腾 WordPress 模版代码时经常见到两种触发 function 的方法,一种是用 function_exists()来判断方法存不存在,如果存在则执行;另一种则是用 add_action()或 add_filter()来执行写好的方法,统称 hook(勾子)。
如果用到子主题的话,在父模版中用 function_exists()会更灵活,因为在子主题中可以用相同的方法名字直接覆盖父主题的方法。下面以在子主题中删除父主题指定的方法(function)代码为例,简单整理一下:
方法一:
先查看父主题中的代码。
- // 父主题中function.php的代码
- if ( ! function_exists('print_something') ) {
- function print_something() {
- // 功能代码
- }
- }
如果想要修改父主题中的方法,只需在子主题重新写一个相同名称的方法即可。
- // 子主题中function.php的代码
- function print_something() {
- // 功能代码
- }
方法二:
使用 Hook,用 add_action()或 add_filter()调用方法,本文只以 add_action()为例,父主题中:
- // 父主题中function.php的代码
- function print_something() {
- // 功能代码
- }
- add_action('wp_head', 'print_something');
从代码中可以看出有一个`print_something()`功能方法,然后用`add_action()`触发、执行该方法。其中`add_action()`中有两个参数,分别是“Hook 位置(决定在哪里执行)”,“调用的方法”。有些代码也加上了第三个以数字为主的参数,那是指优先权。
如果我们要删除指定的父主题中的`print_something()`要怎么做呢?我的习惯是这样的三部曲:先写好你要用的新方法,然后再写一个方法用来删除父主题中指定的方法,最后再用`add_action()`或`add_filter()`调用他们。具体:
- // 子主题中function.php的代码
- function new_print_something() {
- // 你要写的、新的功能代码
- }
- function remove_old_function() {
- remove_action ('wp_head', 'print_something');
- }
- add_action('init', 'remove_old_function');
- add_action('wp_head', 'new_print_something');
其中我们写了两个新的方法分别叫 new_print_something()和 remove_old_function(),一个是用来写新的功能的,另一个是用来删除父主题中指定方法的。最下面用`add_action()`调用并执行这两个方法。
细心的话你可能会问为什么要单独写一个 remove_old_function()这样的方法来删除父主题的功能而不是直接用 remove_action()来删除?因为 WordPress 会先执行子主题的代码,然后再执行父主题的代码,如果我们直接删除掉指定的方法,WordPress 会因为父主题的代码还没有运行就执行了删除而找不到需要删除的方法,从而忽略掉这个行为。
文章連結:https://www.wuyanshuo.cn/805.html
更新時間:2022年5月9日
1、本站所有資源均不添加推廣檔案或浮水印,壓縮包內若有廣告檔案和浮水印請勿輕易相信。
2、本站資源均為兩層壓縮,第一層7z(尾碼若為wys,請自行修改為7z)有解壓密碼; 第二層zip或cbz,無解壓密碼,可直接使用漫畫類軟件程式查看; 詳情可參攷解壓教程。
3、本站大部分內容均收集於網絡! 若內容侵犯到您的權益,請發送郵件至:admin#wysacg.top我們將第一時間處理! 資源所需價格並非資源售賣價格,是收集、整理、編輯詳情以及本站運營的適當補貼,並且本站不提供任何免費技術支援。 所有資源僅限於參攷和學習,版權歸原作者所有!