在网上看别人文章的时候,发现转载声明,于是思前想后,觉得自己也可以做一个~~~
我是使用的wordpress,本来以为应该很简单的,结果最开始竟然没搞定,所以决定记录一下。
首先最直接的想法是修改single.php模版,给页面直接给加上信息,但是这样并没有给RSS中文章加上转载声明。
于是乎,决定改成给the_content过滤器增加一个钩子,直接在文章最后增加信息,结果,由于我的摘要是用the_content('Read More →'),直接导致在文章列表页面每篇文章的后面也都被加上了转载声明。
然后又改成在模版里增加add_action,但是这样还是有和最开始一样的问题,RSS中没有增加声明。
接着研究了半天的the_content(在wp-includes/post-template.php中),发现the_content过滤器里面的的参数确实是只有一个$content,但是,却发现声明了全局变量,其中有一个叫$more,通过这个变量的值,可以判断出来调用the_content的时候,到底是要输出全文还是摘要。于是乎,最终将以下程序加到主题的functions.php中即可:
function add_copyright($content) { global $more; $title = get_the_title(); if ($more && (is_single() || is_feed()) && (mb_strrchr($title, '(', 'utf-8') . '(转载)' !== $title)) { $content .= '<br/><p style="text-indent: 2em;">原文连接:<a href="' . get_permalink() . '">' . $title . '</a>,转载请注明出处。</p>'; } return $content; } add_filter('the_content', 'add_copyright');
其中mb_strrchr处的判断,是为了防止给转载的别人的文章也加上了自己的转载声明(转载的文章标题要以"(转载)"结尾)。
然后用mb_strrchr的时候遇到个奇怪的问题,就是,如果最后参数不加'utf-8'的时候,返回的字符串是从找到的字符到原串结尾,但是加上之后,就变成从原串开头到找到的字符了。。。只能不明觉厉。。。
PS:之前忘记加上is_single() || is_feed()的判断,导致在留言版块中也出现了转载声明,现已改正~~~