前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【译】WordPress 中的50个过滤器(2):先介绍10个过滤器

【译】WordPress 中的50个过滤器(2):先介绍10个过滤器

作者头像
Jeff
发布2018-01-22 10:21:55
1.1K0
发布2018-01-22 10:21:55
举报
文章被收录于专栏:DeveWorkDeveWork

在上一篇文章中,我们介绍了WordPress 世界的过滤器;本篇文章的话我们将要探索50个笔者精选的过滤器,并一一通过例子解释其如何工作的。

事不宜迟,让我们开始吧!

本文为系列第二篇,原文:50 Filters of WordPress: The First 10 Filters 原文地址

本系列文章翻译自tutsplus,原作者为baris-unver,翻译人:Jeff,转载请注明原始来源及翻译人,谢谢! 本文若有修正,不会更新于本页,只会更新到Github项目地址上。

修改默认的登录报错信息

默认的话,WordPress 对于登录报错上的提示提供了太多的信息了,比如说如果用户名对但密码不对的话会如下提示:“用户名xxx所对应输入的密码不正确”——无疑,如果你的网站被黑客盯上了的话这是很危险的,因为这意味着黑客可以通过多次尝试获取到用户名甚至是密码。因此非常有必要禁止这类报错信息。

例子:移除登录报错提示信息

我们需要做的就是删除报错的那段文字对应的字符串即可:

&lt;?php add_filter( 'login_errors', 'login_errors_example' ); function login_errors_example( $error ) { $error = ''; return $error; } ?&gt; </code>

重定向评论者的url到作者页面

在WordPress 中发表评论后,你将停留在当前页面上——当然,本身这是个符合逻辑的方式,但如果你想在成功发表评论后将评论者的url 重定向到作者页面该怎么做?

comment_post_redirect函数下刀:

&lt;?php add_filter( 'comment_post_redirect', 'comment_post_redirect_example' ); function comment_post_redirect_example( $location ) { return '/thanks-for-your-comment/'; } ?&gt; </code>

wp_safe_redirect()函数添加外域

默认的话,wp_safe_redirect() 函数不允许外域链接重定向,但通过“过滤”这个函数,我们可以轻易添加外域(相当于添加域名白名单)

例子:允许外域重定向

&lt;?php add_filter( 'allowed_redirect_hosts', 'allowed_redirect_hosts_example' ); function allowed_redirect_hosts_example( $content ) { $content[] = 'forum.mywebsite.com'; $content[] = 'welcome.mywebsite.com'; $content[] = 'help.mywebsite.com'; return $content; } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/allowed_redirect_hosts ?&gt;

<body>标签添加自定义CSS类

WordPress 的body_class()函数是一个非常不错的函数。它在不同的页面情况下提供了不同的相应语义化的CSS 标签,使得你的CSS 能更有效率。同样的,通过“过滤”body_class()函数,你可以添加后删除相关的类。

例子:为<body>标签添加以分类名命名的类名

如果你需要为不同分类下的页面添加不用的CSS 样式,你可以通过下面的代码实现之:

&lt;?php add_filter( 'body_class', 'body_class_example' ); function body_class_example( $classes ) { if( is_single() ) { foreach( get_the_category( get_the_ID() ) as $category ) $classes[] = 'cat-' . $category-&gt;category_nicename; } return $classes; } // Example source: https://codex.wordpress.org/Function_Reference/body_class#Add_Classes_By_Filters ?&gt;

上面的代码实现的效果是:当你有一个分类名称为“world”,那么在该分类的页面下你会在<body> 标签中发现 .cat-world这个类。

修改本地化语言设置

作为一个在全球响当当的CMS,支持多语言当然早就成为标配了。locale 这个过滤器可以让我们在某些情况下设置语言。

例子:依据url 传递的参数自动设置网站语言

如果你有一个多语言网站,通过下面的代码,你就能轻易通过url参数来自动切换网站语言:

&lt;?php add_filter( 'locale', 'locale_example' ); function locale_example( $lang ) { if ( 'tr' == $_GET['language'] ) { return 'tr_TR'; } else { return $lang; } } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/locale ?&gt;

这样,当访客访问类似mywebsite.com/?language=tr的网址的时候,你的网站语言将改为土耳其语。当然,你写的文章是不会自动翻译的,你应该清楚吧?

过滤用户名的不安全字符

sanitize_user()是WordPress 中一个用来清理用户名,去掉所有不安全的字符的函数,作为一个安全相关的函数,你可以进一步增强其安全规则。

例子:只接受小写形式的用户名

如果你不想接受有大写字母的用户名(比如说"SHOUTINGBOY88" 或者 "CrazyGirl92"),你可以使用PHP的strtolower函数来hook 这个sanitize_user函数:

&lt;?php add_filter( 'sanitize_user', 'strtolower' ); // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/sanitize_user ?&gt;

过滤文章的文本内容

这个就不用多介绍了,用到的是the_content的函数,直接上例子:

例子:移除包裹在<img>标签上的<p>标签

WordPress 默认并不允许我们单独在一个段落中展示图片——它会自动添加一个<p>到图片中,如果你想移除之可以用下面的代码:

&lt;?php add_filter( 'the_content', 'the_content_example' ); function the_content_example( $content ) { return preg_replace('/&lt;p&gt;\s*(&lt;a .*&gt;)?\s*(&lt;img .* \/&gt;)\s*(&lt;\/a&gt;)?\s*&lt;\/p&gt;/iU', '\1\2\3', $content); } // Example source: http://wpsnipp.com/index.php/functions-php/remove-p-tag-from-around-images-in-the_content/ ?&gt;

过滤密码保护文章的表单提示

对于设置了密码保护的文章,在前端页面WordPress 会显示为一个密码填写的表单。如果你需要,可以自定义这个表单的显示情况,过滤的是the_password_form函数。

例子:简化密码输入表单

默认的话,WordPress输出的提示文字是“This content is password protected. To view it please enter your password below:”,下面给出一个简化整个表单的例子:

&lt;?php add_filter( 'the_password_form', 'the_password_form_example' ); function the_password_form_example() { $output = '&lt;form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post"&gt;'; $output .= '&lt;span&gt;' . __( "Enter the password:" ) . ' &lt;/span&gt;'; $output .= '&lt;input name="post_password" type="password" size="20" /&gt;'; $output .= '&lt;input type="submit" name="Submit" value="' . esc_attr__( "Go" ) . '" /&gt;'; $output .= '&lt;/form&gt;'; return $output; } // Example source: http://codex.wordpress.org/Using_Password_Protection#Password_Form_Text ?&gt;

经过上面的代码作用,整个输入表单仅仅剩下三个单词,一个密码输入框跟提交按钮。怎样,够简洁吧?

过滤 the_terms()函数

如果你不满意默认输出的the_terms()函数,或者说你想将这个函数用于另外的目的(待修改),那么你可以做一样的工作,且看下面的例子:

例子:从the_terms()函数移除HTML标签

下面找个函数可以让the_terms()函数在输出时候不包括HTML标签(纯文本),顺带一提,strip_tags是PHP 中剥去 HTML、XML 以及 PHP 的标签的函数。

&lt;?php add_filter( 'the_terms', 'strip_tags' ); ?&gt;

修改发送端的默认的Email 地址

当WordPress 程序发送邮件的时候,它会使用类似的邮箱地址作为发送人。借助下面找个过滤器,你可以修改它。

自定义发送人的Email 地址

&lt;?php add_filter( 'wp_mail_from', 'wp_mail_from_example' ); function wp_mail_from_example( $email ) { return 'my.email.address@mywebsite.com'; } ?&gt;

同样的逻辑,你只要自定义返回的参数的值,你就可以自定义为你需要的用户名了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014/11/14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 修改默认的登录报错信息
    • 例子:移除登录报错提示信息
    • 重定向评论者的url到作者页面
    • 为wp_safe_redirect()函数添加外域
      • 例子:允许外域重定向
        • 为<body>标签添加自定义CSS类
          • 例子:为<body>标签添加以分类名命名的类名
          • 修改本地化语言设置
            • 例子:依据url 传递的参数自动设置网站语言
            • 过滤用户名的不安全字符
              • 例子:只接受小写形式的用户名
              • 过滤文章的文本内容
                • 例子:移除包裹在<img>标签上的<p>标签
                • 过滤密码保护文章的表单提示
                  • 例子:简化密码输入表单
                  • 过滤 the_terms()函数
                    • 例子:从the_terms()函数移除HTML标签
                    • 修改发送端的默认的Email 地址
                      • 自定义发送人的Email 地址
                      相关产品与服务
                      机器翻译
                      机器翻译(Tencent Machine Translation,TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档