【译】WordPress 中的50个过滤器(5):第31-40个过滤器
本文为系列第三篇,原文:50 Filters of WordPress: Filters 31-40 原文地址
在过去的两篇文章中,我们总共介绍了30个WordPress 的过滤器。在本文中,我们将接触其他类型的过滤器,一如既往,有例子予以加深理解。
本系列文章翻译自tutsplus,原作者为Barış Ünver,翻译人:Jeff,转载请注明原始来源及翻译人,谢谢! 本文若有修正,不会更新于本页,只会更新到Github项目地址上。
过滤默认的相册样式
WordPress 中会使用[ gallery]
这个短代码来加载预定义的CSS。这些默认设置你通过use_default_gallery_style
函数自定义。
禁止默认样式
<?php add_filter( 'use_default_gallery_style', '__return_false' ); ?> |
---|
上面的代码起作用后,<style>
标签不会主动添加到[ gallery]
这个短代码中。
过滤附件url
相关过滤器名称为wp_get_attachment_url()
。
避免“混合内容”的警示
(这个涉及到https的相关知识)如果你的网站是使用ssl的,那么wp_get_attachment_url()
函数默认会返还http的url而非https,也因此会有访客警示。下面的代码会解决这个问题:
<?php add_filter( 'wp_get_attachment_url', 'wp_get_attachment_url_example' ); function wp_get_attachment_url_example( $url ) { $http = site_url( false, 'http' ); $https = site_url( false, 'https' ); if ( $_SERVER['HTTPS'] == 'on' ) return str_replace( $http, $https, $url ); else return $url; } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_get_attachment_url ?> |
---|
设置电子邮件的默认文本类型
wp_mail()
函数默认会使用text/plain
作为文本类型,通过这个wp_mail_content_type
过滤器,你可以自定义之。
例子:WordPress 中使用HTML文本类型方式电子邮件
<?php add_filter( 'wp_mail_content_type', 'wp_mail_content_type_example' ); function wp_mail_content_type_example( $content_type ) { return 'text/html'; } ?> |
---|
保存评论者的ip地址
WordPress 在数据库中会保留每一个评论员的ip地址,如果你想修改之,可以使用这个pre_comment_user_ip
过滤器。
例子:保存评论员的真实ip地址
如果你的评论员是使用代理进行评论的,WordPress会记录的是代理的ip而非真实ip。真实ip可以在HTTP头部的X-Forwarded-For
找到。下面的代码就能实现在数据库中记录的是真实的ip地址。
<?php add_filter( 'pre_comment_user_ip', 'pre_comment_user_ip_example' ); function pre_comment_user_ip_example() { $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; if ( !empty( $_SERVER['X_FORWARDED_FOR'] ) ) { $X_FORWARDED_FOR = explode( ',', $_SERVER['X_FORWARDED_FOR'] ); if ( !empty( $X_FORWARDED_FOR ) ) $REMOTE_ADDR = trim( $X_FORWARDED_FOR[0] ); } elseif( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $HTTP_X_FORWARDED_FOR = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ); if ( !empty( $HTTP_X_FORWARDED_FOR ) ) $REMOTE_ADDR = trim( $HTTP_X_FORWARDED_FOR[0] ); } return preg_replace( '/[^0-9a-f:., ]/si', '', $REMOTE_ADDR ); } // Example source: https://codex.wordpress.org/Plugin_API/Filter_Reference/pre_comment_user_ip ?> |
---|
想知道有关HTTP头部X-Forwarded-For
的更多知识?请点击喂鸡百科。
修改文章的保存版本控制数量
你可能找到WordPress 有个“修订版本”的功能,要设置的话你需要通过控制wp-config.php
中的WP_POST_REVISIONS
常量。
但是你如果想这个自定义功能也能在其他文章类型中起作用呢?该如何操作?使用这个wp_revisions_to_keep
过滤器试下。
禁止某些特定文章类型使用“修订版本”功能
下面的代码需要修改$post
变量为你的,代码中为“even”。
<?php add_filter( 'wp_revisions_to_keep', 'wp_revisions_to_keep_example', 10, 2 ); function wp_revisions_to_keep_example( $num, $post ) { if ( 'event' == $post->post_type ) { return 0; } return $num; } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_revisions_to_keep ?> |
---|
重写[ caption]
短代码
[ caption]
短代码可以让你很简单地通过字幕包裹某张图片,如果你想修改下,往下看。
例子:用HTML5标记图像字幕
HTML5 标准中建议我们使用<figure>
或<figcaption>
这两个图片相关的新标签,在这里例子我们重写之:
<?php add_filter( 'img_caption_shortcode', 'img_caption_shortcode_example', 10, 3 ); function img_caption_shortcode_example( $empty, $attr, $content ) { $attr = shortcode_atts( array( 'id' => '', 'align' => 'alignnone', 'width' => '', 'caption' => '' ), $attr ); if ( 1 > (int) $attr['width'] || empty( $attr['caption'] ) ) { return ''; } if ( $attr['id'] ) { $attr['id'] = 'id="' . esc_attr( $attr['id'] ) . '" '; } $figure_atts = $attr['id'] . ' class="caption ' . esc_attr( $attr['align'] ) . '" ' . 'style="max-width: ' . ( 10 + (int) $attr['width'] ) . 'px;"'; $output = '<figure ' . $figure_atts . '>'; $output .= do_shortcode( $content ); $output .= '<figcaption>' . $attr['caption'] . '</figcaption>'; $output .= '</figure>'; return $output; } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/img_caption_shortcode ?> |
---|
添加文章CSS类名
body_class
这个过滤器在WordPress 开发中常常用到,那么你知道有个post_class
过滤器可以让你在文章内添加自定义的CSS 类吗?
例子:在循环中为第一篇文章添加特别标记的类
<?php add_filter( 'post_class', 'post_class_example' ); function post_class_example( $classes ) { global $wp_query; if ( 0 == $wp_query->current_post ) { $classes[] = 'first-post'; } return $classes; } // Example source: http://www.billerickson.net/code/first-post-class/ ?> |
---|
这样就为你的WordPress 网站的第一篇文章添加了.first-post
这个类,之后在开发中你就可通过CSS 自定义.first-post
的样式而不用担心因为使用:first
这个伪类而产生的跨浏览器兼容问题了。
在附件中增加自定义的输入框
在WordPress 中,附件大体上相当于一种额外的文章类型——仅仅有小小区别。attachment_fields_to_edit
这个过滤器可以让我们进行一些自定义操作——当你上传或编辑附件的时候。
例子:为上传的图片增加许可证信息
让我们假设你有有个摄影相关的博客,你需要为你博客上上传的每一张图片进行许可证声明。通过下面的代码即可为你增加个“license”的输入框。
<?php add_filter( 'attachment_fields_to_edit', 'attachment_fields_to_edit_example', 10, 2 ); function attachment_fields_to_edit_example( $form_fields, $post ) { $field_value = get_post_meta( $post->ID, 'license', true ); $form_fields['license'] = array( 'value' => $field_value ? $field_value : '', 'label' => __( 'License' ), 'helps' => __( 'Specify the license type used for this image' ) ); return $form_fields; } add_action( 'edit_attachment', 'save_new_attachment_field' ); function save_new_attachment_field( $attachment_id ) { $license = $_REQUEST['attachments'][$attachment_id]['license']; if ( isset( $license ) ) { update_post_meta( $attachment_id, 'license', $license ); } } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/attachment_fields_to_edit ?> |
---|
修改自动摘要的文字数量
默认WordPress 的摘要会裁剪55个单词,如果你想修改之,可以通过这个excerpt_length
过滤器修改下。
例子:修改自动摘要的文字数量
下面的代码可以使得摘要裁剪15个单词——如果你想做有个类似Pinterest 风格的布局,那么可能需要这个:
<?php add_filter( 'excerpt_length', 'excerpt_length_example' ); function excerpt_length_example( $words ) { return 15; } ?> |
---|
很容易,不是吗?
处理后台仪表盘中的“批量操作”功能
在WordPress的仪表盘那里罗列着类似文章、页面、用户、多媒体等等的栏目,当你点击某个栏目可以进行批量操作。下面讲到的过滤器会让你处理下这小小的下拉菜单。
例子:禁止批量处理垃圾文章
如果你拥有个新闻网站,且对于编辑人员意外清空垃圾文章这种行为是很谨慎的,那么你需要下面的代码来禁止之:
<?php add_filter( 'bulk_actions-edit-post', 'bulk_actions_edit_post_example' ); function bulk_actions_edit_post_example( $actions ) { unset( $actions['trash'] ); return $actions; } ?> |
---|
类似$screenid
这种变量,如果你想了解更多,可以参考官方codex。
- goroutine背后的系统知识
- 从PowerVM,KVM到Docker:存储池的配置与调优---第一篇(第2子篇)
- 2017最后一天的学习-TensorFlow
- 从PowerVM,KVM到Docker:存储池的配置与调优---第一篇(第1子篇)
- 36小时,造一个亚马逊无人商店 | 实战教程+代码
- 使用Echarts来实现数据可视化
- 手把手教你用TensorFlow实现看图说话 | 教程+代码
- 自动化平台开发的几点总结
- epoll入门
- 使用Go开发一个简单的服务器程序
- [Go语言]一种用于网游服务器的支持多路复用的网络协议处理框架
- 设计包导出接口的随想
- [Go语言]实现可以枚举的map
- 游戏服务器框架 Leaf/go
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java面试高频知识点汇总 网络协议专题
- 「Mysql优化大师一」mysql服务性能剖析工具
- FPGA设计心得(12)如何正确使用 in_system_ibert ?
- Java面试高频知识点汇总 垃圾回收(GC)机制专题
- Celery-分布式任务队列学习笔记
- Java面试高频知识点汇总 数据库专题
- Java面试高频知识点总结 Redis
- Java面试高频知识点总结 Spring
- 杂谈小程序
- pytest封神之路第四步 内置和自定义marker
- (译)SDL编程入门(3)事件驱动编程
- 一个简单的Angular search UI实现
- (译)SDL编程入门(2)在屏幕上显示图像
- 【Vue进阶】手把手教你在 Vue 中使用 JSX
- (译)SDL编程入门(1)Hello SDL