WordPress 上文章添加转载申明

Reading time ~1 minute

在网上看别人文章的时候,发现转载声明,于是思前想后,觉得自己也可以做一个~~~

我是使用的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()的判断,导致在留言版块中也出现了转载声明,现已改正~~~

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017