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

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

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

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

让我们开始吧!

过滤搜索查询

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

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

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

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

<?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 压缩图片

<?php   add_filter( 'wp_editor_set_quality', 'wp_editor_set_quality_example' );   function wp_editor_set_quality_example( $quality ) { return 100; }   ?>

过滤文本小工具

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

让文本小工具支持短代码

<?php   add_filter( 'widget_text', 'do_shortcode' );   ?>

过滤feed 中的文本内容

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

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

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

<?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过滤器,我们可以改变编辑器中第一栏的布局:

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

<?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"。如果你要在列表中排除这两个分类,你可以用下面的代码:

<?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”,你需要让你的编辑员在写文章时候能够选择你的图片样式,那么你需要这么做:

<?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 这个过滤器让我们可以轻易修改之。

例子:在摘要后添加链接

<?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 网站的唯一一个作者,那就没必要显示作者这个栏目啦,下面的函数可以干掉之:

<?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这两个通讯方式。下面的代码可以实现删除之病添加新的几个:

<?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; }   ?>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WeTest质量开放平台团队的专栏

Android性能优化典范(1)

2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App。课程...

12520
来自专栏Java3y

移动商城第一篇【搭建项目环境+数据模型】

前言 本次该项目使用的技术如下: ? 这里写图片描述 搭建Oracle数据库环境 本次我们用Oracle作为我们的服务器,我们一般开发并不是把数据表放在我们练习...

53290
来自专栏我有一个梦想

游戏开发之UE4添加角色到场景中

接着上次继续学习,现在我们已经有了一个场景并且运行了,我们需要添加一个角色到场景中。要这样做,我们必须从UE4的GameFramework类继承它。 一. 创建...

38850
来自专栏移动端开发

Charts 常见使用类型实例

Charts是做什么的:        在我们平时的开发中,当使用到一些统计图表的时候,我们该怎样去做那些柱形的统计图、那些折线统计图、扇形统计图,亦或是你在做...

27980
来自专栏DeveWork

【译】WordPress 中的50个过滤器(1):何为过滤器?

这篇文章是来自tutsplus 上系列文章《50 Filters of WordPress》的开篇文,系列文章还在陆续发表中。Jeff 打算借助Github 进...

19790
来自专栏玉树芝兰

如何用Python智能批量压缩图片?

本文一步步为你介绍,如何用Python自动判断多张图片中哪些超出阈值需要压缩,且保持宽高比。如果你想了解Python图像处理的基础知识,欢迎动手来尝试。

42720
来自专栏Hongten

python开发_常用的python模块及安装方法

adodb:我们领导推荐的数据库连接组件 bsddb3:BerkeleyDB的连接组件 Cheetah-1.0:我比较喜欢这个版本的cheetah cherry...

51830
来自专栏北京马哥教育

LaTeXila:Linux 的多语言 LaTeX 编辑器简介

豌豆贴心提醒,本文阅读时间7分钟 LaTeXila 是一个多语言 LaTeX 编辑器,专为那些偏爱 GTK+ 外观的 Linux 用户设计。这个软件除了操作简...

36590
来自专栏JavaEdge

JDK7新特性概览JSR292:支持动态类型语言(InvokeDynamic)G1 垃圾回收器(Garbage-First Collector)JSR334:小的语言改进(Project Coin)核

796100
来自专栏代码GG之家

google 分屏 横屏模式 按home键界面错乱故障分析(一)

你确定你了解分屏的整个流程? ? 之前分析文章列表: Android 关机对话框概率没有阴影故障分析 android recent key长按事件弹起触发最近列...

24680

扫码关注云+社区

领取腾讯云代金券