PHP学习笔记(七)

《wordpress 50个过滤钩子》 11-20

 

11.gettext: 过滤wordpress的翻译数据。

在wordpress中,使用__(), _e(), _x(), _ex(), 的内容可以在翻译文件中生成,病根据不同的location加载不同的po文件从而翻译。使用gettext钩子,可以过滤翻译的内容。

 1 <?php
 2  
 3 add_filter( 'gettext', 'gettext_example', 20, 3 );
 4  
 5 function gettext_example( $translated_text, $text, $domain ) {
 6     switch ( $translated_text ) {
 7         case 'E-meil Adress' :
 8             $translated_text = __( 'Email Address', 'plugin_text_domain' );
 9             break;
10     }
11     return $translated_text
12 }
13  
14 // Example source: http://speakinginbytes.com/2013/10/gettext-filter-wordpress/
15  
16 ?>

 

ps: __() 和_e()都是返回对应当前语言的字符串内容,区别是__()没有输出而_e()有输出,即:_e('hello') = echo __('hello'), 带e的都表示echo ...

_x()表示翻译的根据上下文,_n()表示进行单复数编译(单数的字符串,复数的字符串,引用的数字)。

 

12.sanitize_title: 修改slug

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

13.no_texturize_shortcode: 指定shortcode不进行自动转义。

wptexturize是wordpress中的自动转义功能,如果希望指定的shortcode代码不自动进行转义,使用该钩子将指定的shortcode添加到数组中,返回数组即可:

 1 <?php
 2  
 3 add_filter( 'no_texturize_shortcodes', 'no_texturize_shortcodes_example' );
 4  
 5 function no_texturize_shortcodes_example( $shortcodes ) {
 6     $shortcodes[] = 'myshortcode';
 7     return $shortcodes;
 8 }
 9  
10 // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/no_texturize_shortcodes
11  
12 ?>

14.pre_comment_approve: 过滤评论审核

如果需要在代码中添加对评论的审核逻辑,可以使用该钩子获取评论内容病添加逻辑,修改审核结果:

 1 <?php
 2  
 3 add_filter( 'pre_comment_approved', 'pre_comment_approved_example', 99, 2 );
 4  
 5 function pre_comment_approved_example( $approved, $commentdata ) {
 6     return ( strlen( $commentdata['comment_author'] ) > 75 ) ? 'spam' : $approved;
 7 }
 8  
 9 // Example source: https://gist.github.com/norcross/5468979
10  
11 ?>

15.enable_post_by_email_configuration: 打开或关闭Post_By_Email功能:

关闭:

<?php
 
add_filter( 'enable_post_by_email_configuration', '__return_false', 100 );
 
?>

打开:

<?php
 
add_filter( 'enable_post_by_email_configuration', '__return_true', 100 );
 
?>

16.wp_title: 重写你的page title.

 1 <?php
 2  
 3 add_filter( 'wp_title', 'wp_title_example', 10, 2 );
 4  
 5 function wp_title_example( $title, $sep ) {
 6     global $paged, $page;
 7  
 8     if ( is_feed() )
 9         return $title;
10  
11     // Add the site name.
12     $title .= get_bloginfo( 'name' );
13  
14     // Add the site description for the home/front page.
15     $site_description = get_bloginfo( 'description', 'display' );
16     if ( $site_description && ( is_home() || is_front_page() ) )
17         $title = "$title $sep $site_description";
18  
19     // Add a page number if necessary.
20     if ( $paged >= 2 || $page >= 2 )
21         $title = sprintf( __( 'Page %s', 'tuts_filter_example' ), max( $paged, $page ) ) . " $sep $title";
22  
23     return $title;
24 }
25  
26 // Example source: http://tommcfarlin.com/filter-wp-title/
27  
28 ?>

17. preprocess_comment:在评论存入DB之前修改和加工它们

 1 <?php
 2  
 3 add_filter( 'preprocess_comment', 'preprocess_comment_example' );
 4  
 5 function preprocess_comment_example( $commentdata ) {
 6     if( $commentdata['comment_content'] == strtoupper( $commentdata['comment_content'] ))
 7         $commentdata['comment_content'] = strtolower( $commentdata['comment_content'] );
 8     return $commentdata;
 9 }
10  
11 // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/preprocess_comment
12  
13 ?>

18.login_redirect: 管理界面登录后重定向。

注意,该filter 一定要在is_admin()之外使用add_filter(),因为在is_admin()被调用的时候这个钩子还不可用。

 1 <?php
 2  
 3 add_filter( 'login_redirect', 'login_redirect_example', 10, 3 );
 4  
 5 function login_redirect_example( $redirect_to, $request, $user ) {
 6     global $user;
 7     if ( isset( $user->roles ) && is_array( $user->roles ) ) {
 8         if ( in_array( 'subscriber', $user->roles ) ) {
 9             return home_url();
10         } else {
11             return $redirect_to;
12             }
13     }
14     return;
15 }
16  
17 ?>

19.plugin_aciton_links_插件文件名:给你的插件加上链接

<?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' ) . '">' . __( 'Settings' ) . '</a>';
    return $links;
}
 
// Example source: https://codex.wordpress.org/Plugin_API/Filter_Reference/plugin_action_links_(plugin_file_name)
 
?>

20.the_editor_content: 过滤post editor中的内容

 1 <?php
 2  
 3 add_filter( 'the_editor_content', 'the_editor_content_example' );
 4  
 5 function the_editor_content_example( $content ) {
 6     // Only return the filtered content if it's empty
 7     if ( empty( $content ) ) {
 8         $template  = 'Hey! Don\'t forget to...' . "\n\n";
 9         $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";
10         $template .= 'Bye!';
11         return $template;
12     } else
13         return $content;
14 }
15  
16 // Example source: http://wpfilte.rs/the_editor_content/
17  
18 ?>

 

 

原文链接:http://code.tutsplus.com/tutorials/50-filters-of-wordpress-filters-11-20--cms-21296

posted @ 2016-03-26 23:02  Jacob_乔  阅读(199)  评论(0编辑  收藏  举报