Advertisement
  1. Code
  2. WordPress

50个 WordPress 过滤器介绍之前10个过滤器

Scroll to top
Read Time: 3 min
This post is part of a series called 50 Filters of WordPress.
50 Filters of WordPress: An Introduction to Filters
50 Filters of WordPress: Filters 11-20

() translation by (you can also view the original English article)

在本系列的第一篇文章中,我们介绍了在 WordPress 的过滤器的概念。 在本教程中,我们将会通过对每个过滤器解释他们的用途并给出示例的方式回顾 50 个过滤器。

好了,事不宜迟,这里是我们 50 个的过滤器的第一批 !

更改默认的登录错误消息

当登陆失败的时候,WordPress 会显示一条登录错误信息:"您输入的用户名 barisunver 的密码是不正确的",这给出了太多的信息。 这意味着黑客可以尝试不同的用户名来找出我们所使用的用户名。 您可以禁用此类信息借助于筛选器。

示例︰ 修复"TMI(Too Much Infomation) 问题"

只要将所有的错误信息修改为空的字符串以防止黑客找出我们的凭证。

1
<?php
2
3
add_filter( 'login_errors', 'login_errors_example' );
4
5
function login_errors_example( $error ) {
6
  $error = '';
7
	return $error;
8
}
9
10
?>

这样, 就好多了。

将评论者重定向到另外一个页面

当你在 WordPress 发表玩一个评论,你会留在当前页面。 是的,这事顺理成章的事情,单你可知道你可以将你的评论者重定向到另一个页面当他们成功发布评论的时候。 Comment_post_redirect 筛选器可以让我们做到这一点,我为这个过滤器找到了一个绝佳的示例!

示例︰ 将成功发表评论的用户重定向到订阅页面

评论者更有可能"订阅"你的博文,对吗? 所以,我们将他们重定向到一个页面上面写着“感谢你的评论! 你愿意订阅我的博客吗?”,我们可以把这些话传递给评论者。 在我们可爱的 comment_post_redirect 过滤器的帮助下,这件事一个很容易完成的任务。

1
<?php
2
3
add_filter( 'comment_post_redirect', 'comment_post_redirect_example' );
4
5
function comment_post_redirect_example( $location ) {
6
	return '/thanks-for-your-comment/';
7
}
8
9
?>

请注意,使用 WordPress 的 wp_safe_redirect() 函数,这意味着您必须使用内部页面或者允许的域名内的页面 (见下面的 allowed_redirect_hosts 筛选器)。

Wp_safe_redirect() 函数允许外部重定向

默认情况下,wp_safe_redirect() 函数不允许外部重定向。 通过使用此筛选器,但是,我们可以改变他的行为并指定外部域名。

示例︰ 允许子域重定向

因为 wp_safe_redirect() 函数允许仅在您的 WordPress 安装目录内中重定向,您的子域是域也会被限制。

让我们使得 WordPress 允许这些︰

1
<?php
2
3
add_filter( 'allowed_redirect_hosts', 'allowed_redirect_hosts_example' );
4
5
function allowed_redirect_hosts_example( $content ) {
6
	$content[] = 'forum.mywebsite.com';
7
	$content[] = 'welcome.mywebsite.com';
8
	$content[] = 'help.mywebsite.com';
9
	return $content;
10
}
11
12
// Example source: https://codex.wordpress.org/Plugin_API/Filter_Reference/allowed_redirect_hosts

13
14
?>

<body> 添加类名

Body_class() 函数真是太棒了。 它能够在不同页面上为 body 标签提供不同的类名,你可以更有针对的定义你的CSS 样式。 body_class 同样可以添加或者移除类名。

示例︰ 在文章页面的 body 标签添加目录类名

如果您需要为每个类别定义不同的样式,body_class 过滤器可以帮你在单个文章详情页面的 body 标签上添加包含有分类名字的类名。

示例如下:

1
<?php
2
3
add_filter( 'body_class', 'body_class_example' );
4
5
function body_class_example( $classes ) {
6
	if( is_single() ) {
7
		foreach( get_the_category( get_the_ID() ) as $category )
8
			$classes[] = 'cat-' . $category->category_nicename;
9
	}
10
	return $classes;
11
}
12
13
// Example source: https://codex.wordpress.org/Function_Reference/body_class#Add_Classes_By_Filters

14
15
?>

如果您有一个名为"World"的分类,您可以使用类名 .cat-world 去定义在“World”分类中的文章的样式。

更改语言设置

WordPress 是世界上排名第一的内容管理系统,因为它允许我们翻译其中的任何一个文字。 locale 过滤器允许我们为 WordPress  进行本地化。

示例︰ 通过 URL 参数更改网站的语言

如果你有一个多语言网站,通过切换 URL 参数来快速切换语言是一个比较容易的解决方案,如下面︰

1
<?php
2
3
add_filter( 'locale', 'locale_example' );
4
5
function locale_example( $lang ) {
6
	if ( 'tr' == $_GET['language'] ) {
7
		return 'tr_TR';
8
	} else {
9
		return $lang;
10
    }
11
}
12
13
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/locale

14
15
?>

现在,当你设置 url 参数比如 mywebsite.com/?language=tr,您的网站的语言将变成土耳其语。 当然文章内容并没有改变,当这是一个开始。

用户名的过滤

WordPress 可以使用名为 sanitize_user() 的过滤函数清理用户名。 通过重写同名过滤器,您可以自定义此函数。

示例︰ 只接受小写的用户名

如果你不想接受包含大写字母的用户名(比如"SHOUTINGBOY88" 或者 "CrazyGirl92"),你可以使用PHP的内置函数 strtolower 并将其挂载到 sanitize_user 过滤器中,就像如下所示:

1
<?php
2
3
add_filter( 'sanitize_user', 'strtolower' );
4
5
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/sanitize_user

6
7
?>

这可能是本系列文章示例中最简单的一个。

过滤文章的内容

这是一个无需太多介绍的过滤器

示例:移除包裹图片的的 <p> 标签

WordPress 默认不允许在一个段落外部展示图片,它经常会用一个 <p> 标签制动包裹它们,这令我很苦恼。 如果你同样对此也很苦恼,那么你可以借助一下的代码小片段去除 <p> 标签。

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

10
11
?>

过滤表单密码保护博文

为了密码保护博客,WordPress 自动用一个密码表单替换博文内容。 通过 the_password_form 过滤器,你可以编辑该表单。

示例︰ 简化密码表单

通常情况下 WordPress 站点密码保护博文会展示“该内容被密码保护,

请在下面输入密码后查看“,这些文字一遍又一遍的重复,你并不需要这样。你可以借助这个代码段的帮助清理并简化密码表单。

1
<?php
2
3
add_filter( 'the_password_form', 'the_password_form_example' );
4
5
function the_password_form_example() {
6
	$output  = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">';
7
	$output .= '<span>' . __( "Enter the password:" ) . ' </span>';
8
	$output .= '<input name="post_password" type="password" size="20" />';
9
	$output .= '<input type="submit" name="Submit" value="' . esc_attr__( "Go" ) . '" />';
10
	$output .= '</form>';
11
	return $output;
12
}
13
14
// Example source: http://codex.wordpress.org/Using_Password_Protection#Password_Form_Text

15
16
?>

在此之后,现在只有三个字,一个密码输入框,一个提交按钮,这些都在一行内搞定。

过滤 the_terms() 函数

如果你对函数 the_terms() 的输出并不满意,或者你只是想用于其他目的,你可以使用同名过滤器 the_terms

例子︰ 使用 the_terms() 函数去除 HTML 标签

几年前,我需要能够使博文的标签以纯文本格式展示。 我花了很多、 很多小时,才找到一个解决方案 — — 原来有一个简单的方法。

1
<?php
2
3
add_filter( 'the_terms', 'strip_tags' );
4
5
?>

你无法想象当我发现只需要往 the_terms 过滤器上挂上一个 PHP 核心函数就能解决该问题时候我脸上的表情。

改表单发送的 Email 地址

当 WordPress 将电子邮件发送给您或您的网站的成员时,它使用像 wordpress@yourwebsite.com 这样的电子邮件地址。 借助这个函数,你可以将其改变。

示例︰ 将您自己的电子邮件地址设置为"电子邮件发送地址"

使用一个返回另一个邮件地址的函数,你就能改变电子邮件的发件人邮箱地址。

1
<?php
2
3
add_filter( 'wp_mail_from', 'wp_mail_from_example' );
4
5
function wp_mail_from_example( $email ) {
6
	return 'my.email.address@mywebsite.com';
7
}
8
9
?>

您可以使用过滤器 wp_mail_from_name 一起使用同样的逻辑,只写一个函数返回一个自定义名称的另一个字符串,并将其挂到 wp_mail_from_name 过滤器。

结束今天的内容

在本文为中我们浏览了50 个过滤器中的10个。 我希望你能喜欢并能够从中学习到新的东西。 期待在下一篇文章与你见面!

同样我也想听到你的 你怎么看待这些筛选器的想法? 在下面发表您的评论;如果你喜欢这篇文章,不要忘记分享它 !

关注我们的公众号
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.