wordpress 功能集成(三):基础知识 -wordpress 过滤器

本贴最后更新于 4378 天前,其中的信息可能已经时过境迁

前一篇文章已经将了wordrpess钩子,过滤器和同样重要,也是插件开发的一个重要接口,过滤器原理跟钩子差不过,只不过功能不一样,“动作钩子”我之前面加个动作,是因为过滤器其实也叫"过滤器钩子"(filter hooks)。动作钩子功能更多的偏向于执行一系列函数,而过滤器的功能是用来在输出一个变量给你一次修改它的机会。

与动作钩子相对应,过滤器基本函数也有两个:apply_filters()\add_filter,这些个函数都位于wp-include/plugin.php文件中。

  1. <?php      
  2.     apply_filters($tag,$value);      
  3.     //$tag  必需、你想创建的过滤器的名称      
  4.     //$value 必需,挂在这个过滤器可以修改的值(参数)      
  5.     //这两个参数是必须的,后面还可以带参数可道官网查看      
  6. ?>    
  1. <?php      
  2.     add_filter($tag,$function_to_add,$priority,$accepted_args);      
  3.     //$tag 必需,钩子名      
  4.     //$function 必需,调用的函数      
  5.     //优先级      
  6.     //接受参数数量,默认1      
  7.     //需要注意的是,用add_filter添加的过滤器必须要有个返回值      
  8. ?>    

apply_filters()函数也是创建并执行一个过滤器,和动作的参数一样,不过它的两个参数都是必需的,因为过滤器的功能是改变变量的值,所以必需传递一个或多个变量。add_filter()往钩子上面挂函数,这些函数必需有个返回值,如果给你修改个参数,然后改没了那是要报错的。
也就是说一个变量如果提供了修改过滤器,那么在输出之前,你可以通过函数再修改它N次。这个最常见的应用应该是seo插件了,通过过滤器来修改页面的信息。
这里再通过一个简单的实例来说明过滤器,以后的教程中再提供几个实例应用。
好吧,那我们也来修改一下网站的title信息。输出title一般都使用了函数wp_title();这个函数位于wp-includes/general-template.php文件第528行。我们查看函数,前面那一大截都是些判断,用来判断当前是什么页面,当前页面标题是什么。看到609行有代码:

 
  1. $title = apply_filters('wp_title', $title, $sep, $seplocation);  

然后这一句的后面就是判断要不要输出了。这里创建并执行了一个名为wp_title的过滤器,然后传递3个参数,$titile就是标题,$sep就是标题的前面或后面截个字符,比如“|”,$seplocation决定字符$sep(“|”)显示在标题左边还是标题右边。这里apply_filers虽然传递了3个参数,但是注意了,主要的是修改$titile这个变量,后面两个是附加提供的参数,一般让你修改的时候还可以使用那两个参数,虽然他传递了3个参数,但是我们的返回值只能是一个,问?函数能返回3个值吗?

下面往主题functions.php文件中添加下面代码来修改$titile信息

  1. add_filter('wp_title','custom_title',10,3);   
  2. function custom_title($title,$a,$b){   
  3.     if( $b === 'right' ){   
  4.         $title = '阿树工作室'.$a;   
  5.     }else{   
  6.         $title = $b.'阿树工作室';   
  7.     }   
  8.     return $title;   
  9. }  

ok咧。就这样,就成功修改了title值,这一篇可能只有一个实例,也许讲的不够细,如果有地方有疑问,你可以查看前一篇,应为动作钩子和过滤器钩子很多地方都一样。
过滤器钩子也有其它函数,例如:has_filter() current_filter() merge_filters() remove_filter() remove_all_filters()...要想继续深入,还是去官网查看

  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 200 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 431 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 133 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1278 回帖 • 1 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 3 关注
  • OnlyOffice
    4 引用 • 24 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 6 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    295 引用 • 750 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    226 引用 • 476 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 4 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 34 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    36 引用 • 155 回帖 • 1 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 618 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    427 引用 • 1250 回帖 • 597 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 20 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 1 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 753 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 2 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 108 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 543 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1440 引用 • 10067 回帖 • 491 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 654 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 459 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 79 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖