【译】WordPress 中的50个过滤器(4):第21-30个过滤器

2,438
【译】WordPress 中的50个过滤器(4):第21-30个过滤器
  • 5.00 / 5 5
5.00分(2票)
【译】WordPress 中的50个过滤器(4):第21-30个过滤器

本文为系列第四篇,原文:50 Filters of WordPress: Filters 21-30 原文地址

在过去的两篇文章中,我们总共介绍了20个WordPress 的过滤器。在本文中,我们将接触其他类型的过滤器,一如既往,有例子予以加深理解。

本系列文章翻译自tutsplus,原作者为Barış Ünver,翻译人:Jeff,转载请注明原始来源及翻译人,谢谢!

本文若有修正,不会更新于本页,只会更新到Github项目地址上。

让我们开始吧!

过滤搜索查询

在一个WordPress 站点中,搜索是最常用到的功能。借助这个过滤器,你可以非常灵活地处理SQL 查询。

在搜索结果中包含密码保护文章

让我们假设这么个场景:你将你客户的信息写在文章中,且文章全部都是设置了密码保护。然后你将密码告诉了你的客户。

如果你的客户需要搜索相关关键词而非一篇篇文章手动寻找,那么你可以用下面的代码使得在搜索结果中包含密码保护文章。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
add_filter( 'posts_search', 'posts_search_example' );
 
function posts_search_example( $search ) {
global $wpdb;
if( !is_user_logged_in() ) {
    $pattern = " AND ({$wpdb->prefix}posts.post_password = '')";
    $search = str_replace( $pattern, '', $search );
}
return $search;
}
 
// Example source: http://wpsnipp.com/index.php/functions-php/include-password-protected-posts-in-search-results/
 
?>

如果你的网站的客户是注册用户,那么你不必用上面的代码:只要他们登录了就能搜索密码保护文章的数据——当然,他们依然不能看到全文除非输入密码。

设置上传图片的压缩率

默认的,WordPress 会对上传到多媒体的图片进行压缩,通过wp_editor_set_quality这个过滤器,你可以修改压缩率或者禁止这个压缩功能。

例子:禁止WordPress 压缩图片

1
2
3
4
5
6
7
8
9
<?php
 
add_filter( 'wp_editor_set_quality', 'wp_editor_set_quality_example' );
 
    function wp_editor_set_quality_example( $quality ) {
return 100;
}
 
?>

过滤文本小工具

WordPress 默认的小工具都有相关的过滤器。比如文本小工具的就是widget_text

让文本小工具支持短代码

1
2
3
4
5
<?php
 
add_filter( 'widget_text', 'do_shortcode' );
 
?>

过滤feed 中的文本内容

正如过滤文章的文本内容是通过the_content函数,你可以过滤feed的文本内容,相关函数是the_content_feed

例子:在feed中插入特色图像

在feed中插入特色图像应该有不少人有这个需求,下面就给出这个例子代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
add_filter( 'the_content_feed', 'the_content_feed_example' );
 
function the_content_feed_example( $content ) {
$featured_image = '';
$featured_image = get_the_post_thumbnail( get_the_ID(), 'thumbnail', array( 'style' => 'float:left;margin-right:.75em;' ) );
$content = get_the_excerpt() . ' <a href="'. get_permalink() .'">' . __( 'Read More' ) . '</a>';
if( '' != $featured_image )
    $content = '<div>' . $featured_image . $content . '<br style="clear:both;" /></div>';
return $content;
}
 
?>

如果你想特色图像的布局是在右侧,那么你需要将代码中的float:left;margin-right:.75em;改为float:right;margin-left:.75em;

修改可视化编辑器的按钮

WordPress 中默认的编辑器叫TinyMCE,通过这个mce_buttons过滤器,我们可以改变编辑器中第一栏的布局:

移除可视化编辑器中不想要的按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
add_filter( 'mce_buttons', 'mce_buttons_example' );
 
function mce_buttons_example( $buttons ) {
$remove_array = array( 'strikethrough', 'blockquote', 'hr', 'alignleft', 'aligncenter', 'alignright', 'wp_more', 'wp_adv' );
// full list (WP version 3.9)
// 'bold', 'italic', 'strikethrough', 'bullist', 'numlist', 'blockquote', 'hr', 'alignleft', 'aligncenter', 'alignright', 'link', 'unlink', 'wp_more', 'spellchecker', 'fullscreen', 'wp_adv'
foreach( $remove_array as $remove ) {
    if ( ( $key = array_search( $remove, $buttons ) ) !== false )
        unset( $buttons[ $key ] );
}
return $buttons;
}
 
?>

正如我所说,上面的mce_buttons过滤器是处理第一栏的,如果你想对第二栏或第三栏的按钮进行自定义,那么久过滤相关函数吧:mce_buttons_2mce_buttons_3

排除列表中的某些分类

例子:排除插件创建的分类

想象下你开发了个插件需要创建两个分类:”Favorited-MyPlugin” 和 “Hated-MyPlugin”。如果你要在列表中排除这两个分类,你可以用下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 
add_filter( 'list_terms_exclusions', 'list_terms_exclusions_example', 10, 2 );
 
function list_terms_exclusions_example( $exclusions, $args ) {
// IDs of terms to be excluded
$exclude = "42,132";
$exterms = wp_parse_id_list( $exclude );
foreach ( $exterms as $exterm ) {
    if ( empty( $exclusions ) )
        $exclusions  = ' AND ( t.term_id <> ' . intval( $exterm ) . ' ';
    else
        $exclusions .= ' AND t.term_id <> ' . intval( $exterm ) . ' ';
}
if ( !empty( $exclusions ) )
    $exclusions .= ')';
return $exclusions;
}
 
// Example source: http://shailan.com/2598/how-to-exclude-categories-and-tags-from-your-widgets/
 
?>

修改下拉列表的图片尺寸

如果你打算插入张图片在你的文章中,你需要提前确定图片的尺寸。下面的例子的过滤器允许我们添加自定义的图片尺寸(通过函数提前产生)到可选择的下拉列表中。

例子:让读者选择自定义的图片尺寸

假设你已经创建了一个自定义图片样式命名为“golden-ratio-thumb”,你需要让你的编辑员在写文章时候能够选择你的图片样式,那么你需要这么做:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
add_filter( 'image_size_names_choose', 'image_size_names_choose_example' );
 
function image_size_names_choose_example( $sizes ) {
return array_merge( $sizes, array(
    'golden-ratio-thumb' => __( 'Golden Ratio Thumbnail' )
) );
}
 
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/image_size_names_choose
 
?>

修改摘要中的more标签

WordPress 默认的在首页输出的摘要会截取55 个单词,余下的会用[...] 代替之。幸运的是,excerpt_more 这个过滤器让我们可以轻易修改之。

例子:在摘要后添加链接

1
2
3
4
5
6
7
8
9
10
<?php
 
add_filter( 'excerpt_more', 'excerpt_more_example' );
 
function excerpt_more_example( $text ) {
global $post;
return '... <a class="read-more-link" href="' . get_permalink( $post->ID ) . '">Read more</a>';
}
 
?>

管理文章列表的栏目

在仪表盘的所有文章页面,你可以查看你当前发表的文章——包括其他诸如作者、分类、标签的额外信息。manage_posts_columns函数允许我们通过动作机制隐藏或增加文章。

移除作者栏目

如果你是你的WordPress 网站的唯一一个作者,那就没必要显示作者这个栏目啦,下面的函数可以干掉之:

1
2
3
4
5
6
7
8
9
10
<?php
 
add_filter( 'manage_posts_columns', 'manage_posts_columns_example' );
 
function manage_posts_columns_example( $columns ) {
unset( $columns['author'] );
return $columns;
}
 
?>

其他几个栏目的名称分别是:cb (the checkboxes)、title、author、categoriestags、comments、date

如果你的是自定义文章类型,可以使用类似manage_$post_type_posts_columns的函数,$post_type为你的文章类型id。

编辑用户联系信息相关表单

你想在用户信息那个页面删除或添加部分表单吗?借助下面的user_contactmethods过滤器就可以做到。

添加新的社交网络账号

这个功能需求应该很大——你可以看看WordPress居然还在用着AIM、Jabber这两个通讯方式。下面的代码可以实现删除之病添加新的几个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
add_filter( 'user_contactmethods', 'user_contactmethods_example' );
 
function user_contactmethods_example( $contactmethods ) {
unset( $contactmethods['yim'] );
unset( $contactmethods['aim'] );
unset( $contactmethods['jabber'] );
$contactmethods['facebook']     = 'Facebook'; 
$contactmethods['twitter']      = 'Twitter';
$contactmethods['gplus']        = 'Google+';
$contactmethods['linkedin']     = 'LinkedIn';
$contactmethods['instagram']    = 'Instagram';
return $contactmethods;
}
 
?>

总结

ye~又搞定一篇了,翻译得好累!

暂时木有评论啊,等您坐沙发呢!

打破沉默,我来发表评论鸟~