WordPress中文论坛 - WordPress Chinese Forums

 找回密码
 注册
推荐网站:HOSTUCAN主机点评网
查看: 438|回复: 2

[技术分享] 实用的WordPress主题函数使用技巧(五) [复制链接]

WP 大师

北斗天狼

Rank: 7Rank: 7Rank: 7Rank: 7

金钱
1158 WPB
积分
2073
发表于 2010-6-20 10:44:23 |显示全部楼层
23,设定文章从发布到出现在RSS中的时间长短
通过RSS订阅来阅读博文的朋友可能都会有这个体验:经常发现RSS中的文字或者细节有错误,而返回到页面的时候却发现错误已经没有了。这种情况最有可能是因为
RSS最大的好处是快捷、直接,但这个最大的好处有时候对作者来说却会引发某些尴尬。所以,有时候有必要让文章发布后到读者从RSS中按到有一个小小的时间差,方便作者排查某些问题。以下的代码可以做到以下几点:

  1. function publish_later_on_feed($where) {
  2.     global $wpdb;

  3.     if ( is_feed() ) {
  4.     // timestamp in WP-format
  5.     $now = gmdate(‘Y-m-d H:i:s’);

  6.     // value for wait; + device
  7.     $wait = ‘10′; // integer

  8.     // http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
  9.     $device = ‘MINUTE’; //MINUTE, HOUR, DAY, WEEK, MONTH, YEAR

  10.     // add SQL-sytax to default $where
  11.     $where .= ” AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, ‘$now’) > $wait “;
  12.     }
  13.     return $where;
  14.     }

  15.     add_filter(‘posts_where’, ‘publish_later_on_feed’);
复制代码

这段代码设置的时间是10分钟,你可以把10改成任何你想要的时间。
24,自定义摘要输出时的符号
一般设定自动摘要输出,你会经常在WordPress博客的首页看到“[。..]”这样的符号。为了界面的美观,或者是个性化的需要,你可以把这个默认的符号改变为其他的符号。而以下的代码就是为了实现这个而写:

  1. // custom excerpt ellipses for 2.9
  2.     function custom_excerpt_more($more) {
  3.     return '…';
  4.     }
  5.     add_filter('excerpt_more', 'custom_excerpt_more');

  6.     /* custom excerpt ellipses for 2.8-
  7.     function custom_excerpt_more($excerpt) {
  8.     return str_replace('[...]', '…', $excerpt);
  9.     }
  10.     add_filter('wp_trim_excerpt', 'custom_excerpt_more');
  11.     */
复制代码

25,自定义摘要输出的文字长度
假如你比较懒,不想在撰写文章的时候每篇文章都输入摘要,就可以让系统自动截取一定长度的文字来作为摘要输出。下面的代码默认是100个字节,也就是50个汉字。你可以把数值修改成符合你需要的数字。

  1. function new_excerpt_length($length) {
  2.     return 100;
  3.     }
  4.     add_filter('excerpt_length', 'new_excerpt_length');
复制代码

26,显示精确评论数
WordPress默认是把trackbacks 和 pings 都算作评论的,因此当你设置不显示trackbacks 和 ping的时候,评论数看起来总是不对头。以下的代码则以让WordPress只计算评论的数量,而不把trackbacks 和 pings也计算进去。

  1. add_filter('get_comments_number', 'comment_count', 0);
  2.     function comment_count( $count ) {
  3.     if ( ! is_admin() ) {
  4.     global $id;
  5.     $comments_by_type = &separate_comments(get_comments('status=approve&post_id=' . $id));
  6.     return count($comments_by_type['comment']);
  7.     } else {
  8.     return $count;
  9.     }
  10.     }
复制代码

27,取消RSS输出
对于某些博客而言,或者因为被太多人采集了,或者因为不想让别人通过RSS订阅,想取消RSS输出。WordPress默认是没有这个功能的,但你可以通过以下的代码来取消RSS输出。

  1. function fb_disable_feed() {
  2.     wp_die( __('No feed available,please visit our <a href="'. get_bloginfo('url') .'">homepage</a>!') );
  3.     }

  4.     add_action('do_feed', 'fb_disable_feed', 1);
  5.     add_action('do_feed_rdf', 'fb_disable_feed', 1);
  6.     add_action('do_feed_rss', 'fb_disable_feed', 1);
  7.     add_action('do_feed_rss2', 'fb_disable_feed', 1);
  8.     add_action('do_feed_atom', 'fb_disable_feed', 1);
复制代码

28,显示Twitter 的订阅数以及其他资料
Twitter系统以及很多第三方的客户端都可以让你在WordPress博客的侧边栏暂时Twitter的订阅数以及一些其他的资料。这种做法往往很多时候都没办法跟博客已有的界面结合的很好。而以下的代码则可以让你自定义Twitter 在博客上的显示外观。

  1. function rarst_twitter_user( $username, $field, $display = false ) {
  2.     $interval = 3600;
  3.     $cache = get_option('rarst_twitter_user');
  4.     $url = 'http://api.twitter.com/1/users/show.json?screen_name='.urlencode($username);

  5.     if ( false == $cache )
  6.     $cache = array();

  7.     // if first time request add placeholder and force update
  8.     if ( !isset( $cache[$username][$field] ) ) {
  9.     $cache[$username][$field] = NULL;
  10.     $cache[$username]['lastcheck'] = 0;
  11.     }

  12.     // if outdated
  13.     if( $cache[$username]['lastcheck'] < (time()-$interval) ) {

  14.     // holds decoded JSON data in memory
  15.     static $memorycache;

  16.     if ( isset($memorycache[$username]) ) {
  17.     $data = $memorycache[$username];
  18.     }
  19.     else {
  20.     $result = wp_remote_retrieve_body(wp_remote_request($url));
  21.     $data = json_decode( $result );
  22.     if ( is_object($data) )
  23.     $memorycache[$username] = $data;
  24.     }

  25.     if ( is_object($data) ) {
  26.     // update all fields, known to be requested
  27.     foreach ($cache[$username] as $key => $value)
  28.     if( isset($data->$key) )
  29.     $cache[$username][$key] = $data->$key;

  30.     $cache[$username]['lastcheck'] = time();
  31.     }
  32.     else {
  33.     $cache[$username]['lastcheck'] = time()+60;
  34.     }

  35.     update_option( 'rarst_twitter_user', $cache );
  36.     }

  37.     if ( false != $display )
  38.     echo $cache[$username][$field];
  39.     return $cache[$username][$field];
  40.     }
复制代码

把上面的代码复制到 functions.php后,再把下面代码复制到你想出现的地方即可。

  1. echo rarst_twitter_user('wpbeginner', 'name').' has '.
  2.     rarst_twitter_user('wpbeginner', 'followers_count').' followers after '.
  3.     rarst_twitter_user('wpbeginner', 'statuses_count').' updates.';
复制代码
Hostucan主机点评

WP 大师

北斗天狼

Rank: 7Rank: 7Rank: 7Rank: 7

金钱
1158 WPB
积分
2073
发表于 2010-6-20 22:11:55 |显示全部楼层
回复 2# demond
兄弟,我的沙发都被你坐了,呵呵

使用道具 举报

Rank: 6Rank: 6Rank: 6

金钱
752 WPB
积分
1367
发表于 2010-6-21 19:38:58 |显示全部楼层
呵呵

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|网站合作|WordPress中文论坛 - CNWP ( 鲁ICP备05045147号 )

GMT+8, 2012-2-4 14:10 , Processed in 0.038075 second(s), 13 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部