本文为系列第三篇,原文:50 Filters of WordPress: Filters 11-20 原文地址
不多说,直接进入正题。
本系列文章翻译自tutsplus,原作者为Barış Ünver,翻译人:Jeff,转载请注明原始来源及翻译人,谢谢!
本文若有修正,不会更新于本页,只会更新到Github项目地址上。
在WordPress 中使用可翻译的数据
WordPress 的有一点强大之处就是几乎每一句语言都可以被翻译。如果你的网站语言是英语,你可能就没有这个需求;但其它语系的客户呢?
gettext
这个过滤器可以让你在WordPress 中轻松玩转可翻译的数据。让我们看一个例子:
例子:更正开发者的语法错误
假设你找到了个非常nice 的插件,但你发现插件的开发者的英语水平实在是不敢恭维,那么你会在代码中看到很多的错误的文本代码。好在所有的参数都是可以被翻译的,那么你就可以用下面的代码借助gettext
这个过滤器操作:
<?php
add_filter( 'gettext', 'gettext_example', 20, 3 );
function gettext_example( $translated_text, $text, $domain ) {
switch ( $translated_text ) {
case 'E-meil Adress' :
$translated_text = __( 'Email Address', 'plugin_text_domain' );
break;
}
return $translated_text
}
// Example source: http://speakinginbytes.com/2013/10/gettext-filter-wordpress/
?>
优化标题url别名
默认中,WordPress 会使用一个名为的函数去优化标题:比如说自动替换空格为“-”并拟保存为url别名。通过sanitize_title
你可以扩展这个函数。
例子:移除标题url别名中的“the”单词
<?php
add_filter( 'sanitize_title', 'sanitize_title_example' );
function sanitize_title_example( $title ) {
$title = str_replace( '-the-', '-', $title );
$title = preg_replace( '/^the-/', '', $title );
return $title;
}
?>
从Texturization 中排除短代码(?)
这个便捷的过滤器可以让你指定哪个短代码不经过函数运行,详情见官方文档。
例子:从Texturization 中排除短代码
如果你想要某个短代码从Texturization 中排除,你可以添加类似的代码:
<?php
add_filter( 'no_texturize_shortcodes', 'no_texturize_shortcodes_example' );
function no_texturize_shortcodes_example( $shortcodes ) {
$shortcodes[] = 'myshortcode';
return $shortcodes;
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/no_texturize_shortcodes
?>
过滤评论的批准状态
在一条评论是否被认定为垃圾评论前WordPress 会有一个算法去判别,然后才去加入评论队列中。通过pre_comment_approve
这个过滤器可以让我们做一个调整。
例子:标记长用户名的评论为垃圾评论
<?php
add_filter( 'pre_comment_approved', 'pre_comment_approved_example', 99, 2 );
function pre_comment_approved_example( $approved, $commentdata ) {
return ( strlen( $commentdata['comment_author'] ) > 75 ) ? 'spam' : $approved;
}
// Example source: https://gist.github.com/norcross/5468979
?>
特别感谢 Andrew Norcross提供的点子!
额外提示:如果你想通过检测评论url是否超过一定长度来判断是否为垃圾评论,那么只需要修改comment_author_url'为 'comment_author'即可。
配置“通过邮箱发文章”功能属性
你是否知道你可以通过邮件在你的WordPress 上发表文章?WordPress 提供了这个功能,相关函数叫enable_post_by_email_configuration
。
例子:关闭“通过邮箱发文章”功能
<?php
add_filter( 'enable_post_by_email_configuration', '__return_false', 100 );
?>
过滤页面标题
WordPress 中通过wp_title()
函数输出页面标题——就是你在浏览器标签栏上看到的那个。
例子:重写页面标题(正确的方式)
这篇文章解释了如何自定义页面标题,详细你可以查看全文,这里直接给出个核心的例子:
<?php
add_filter( 'wp_title', 'wp_title_example', 10, 2 );
function wp_title_example( $title, $sep ) {
global $paged, $page;
if ( is_feed() )
return $title;
// Add the site name.
$title .= get_bloginfo( 'name' );
// Add the site description for the home/front page.
$site_description = get_bloginfo( 'description', 'display' );
if ( $site_description && ( is_home() || is_front_page() ) )
$title = "$title $sep $site_description";
// Add a page number if necessary.
if ( $paged >= 2 || $page >= 2 )
$title = sprintf( __( 'Page %s', 'tuts_filter_example' ), max( $paged, $page ) ) . " $sep $title";
return $title;
}
// Example source: http://tommcfarlin.com/filter-wp-title/
?>
在评论被保存到数据库前进行一些操作
如果你有一些在被保存到数据库前对评论数据(评论id,评论员名称,邮箱地址,网址等等)进行操作的需求,那么preprocess_comment
可以帮助你。
例子:评论自动转化大写文字为小写
<?php
add_filter( 'preprocess_comment', 'preprocess_comment_example' );
function preprocess_comment_example( $commentdata ) {
if( $commentdata['comment_content'] == strtoupper( $commentdata['comment_content'] ))
$commentdata['comment_content'] = strtolower( $commentdata['comment_content'] );
return $commentdata;
}
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/preprocess_comment
?>
管理登录跳转地址
这个过滤器允许你的用户在登录后台后自定义跳转地址。
例子:订阅用户登录后自动跳转到网站首页
<?php
add_filter( 'login_redirect', 'login_redirect_example', 10, 3 );
function login_redirect_example( $redirect_to, $request, $user ) {
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'subscriber', $user->roles ) ) {
return home_url();
} else {
return $redirect_to;
}
}
return;
}
?>
官方codex 中提醒我们一点:确保你是在is_admin()
外边使用add_filter
函数的,因为这种情况下函数在调用的时候会无效。
为插件创建一个设置链接
如果你在开发一个WordPress插件,那么你需要知道在插件页面中如何添加一个设置链接。
添加一个设置链接展示在插件页面
<?php
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'plugin_action_links_example' );
function plugin_action_links_example( $links ) {
$links[] = '<a href="' . get_admin_url( null, 'options-general.php? page=my_plugin_settings' ) . '" rel="nofollow" rel="nofollow">' . __( 'Settings' ) . '</a>';
return $links;
}
// Example source: https://codex.wordpress.org/Plugin_API/Filter_Reference/plugin_action_links_(plugin_file_name)
?>
过滤编辑器中得文本内容
是否想在后台的编辑器上预填充一些内容,或者需要给你的编辑人员一些提醒?如果有这类需求,那么你可以使用the_editor_content
这个过滤器。
例子:编辑提醒
<?php
add_filter( 'the_editor_content', 'the_editor_content_example' );
function the_editor_content_example( $content ) {
// Only return the filtered content if it's empty
if ( empty( $content ) ) {
$template = 'Hey! Don\'t forget to...' . "\n\n";
$template .= '<ul><li>Come up with good tags for the post,</li><li>Set the publish time to 08:00 tomorrow morning,</li><li>Change the slug to a SEO-friendly slug,</li><li>And delete this text, hehe.</li></ul>' . "\n\n";
$template .= 'Bye!';
return $template;
} else
return $content;
}
// Example source: http://wpfilte.rs/the_editor_content/
?>
修改上面$template
参数的内容为你喜欢的。
总结
翻译好累,等待下一篇!