Posted on 05-02-2015
Filed Under (技术) by waterlin

前两天介绍了 WordPress 实现需要用户登陆后才能查看文章的功能,如果需要真正的注意到隐私保护,还需要补充两点功能。

1. 需要关掉 RSS 全文输出功能

根据之前的方法,用户在没有权限的情况下无法查看你的 WordPress 博客,但是如果用户不小心获取了你的 RSS 订阅地址,依然可以通过 RSS 阅读器抓到你的更新。

所以,如果你对你的文章的隐私特别关心的话,需要在后台把 RSS 输出功能关掉。

2. 使用 Email 来通知用户有文章更新

如果你把 RSS 功能关掉了,那用户如何知道你有更新站点内容呢?现在这个社会大家都这么忙,不可能让大家天天来检查一遍吧?

这时,最好再添加一个功能: Email 通知文章更新!这样订阅者依然可以及时地获取你的更新,不会漏掉任何一篇文章。

你可以安装 subscribe2 这个插件,这样你每次有文章更新,你的订阅者就可以收到一个提醒邮件。

对于一些 WordPress 的管理员来说,使用的是虚拟主机来搭建的博客服务,这个时候,用 subscribe2 来发送邮件可能会提示说如下错误:

You appear to be sending notifications from admin@youdomain.com, which has a different domain name than your blog server qinqinsese.org. This may result in failed emails.

即你在 WordPress 里的管理员邮箱可能无法发送邮件。如果你的空间服务器的邮箱不支持发送 Email,则你可以设置 WordPress 使用外部的 SMTP 服务来发送邮件。要实现这个功能,最简单的办法就是使用 WP Mail SMTP 这个 WordPress 插件。安装了这个插件后,你就可以使用 Gmail 或是 QQMail 之类的 SMTP 服务来发送订阅邮件了。

另外,如果不喜欢使用 subscribe2 这个插件,也可以使用 Jetpack 这个插件,里面同样有发送订阅邮件的功能。

(0) Comments    Read More   
Posted on 04-02-2015
Filed Under (技术) by waterlin

我一直都是使用自己搭建的 WordPress 站点来写博客,根据不同的需求用子域名的方式建立了几个子站点。不过前段时间有一个子站点无法加载模板,不管是新的模板、旧的模板、刚生效的模板,选择任何一个模板后主页永远是模板加载失败的无格式样式,在该子站点的控制面板里同样也无法看到该模板的预览画面,如下图所示:

WordPress no theme loaded

这个问题的原因我找了很久,甚至把官方网站的文档都找了一遍,突然今天才恍然大悟。要解释这个原因,估计得从头说起了。

  1. 我在 Bluehost 上买了一个域名和空间,假设这个域名名叫 http://test.com 及其子域名来访问服务器的资源。
  2. 然后我用 WordPress 搭建了一个多博客系统,并且用不同的子域名来指向不同的博客,比如说 http://a.test.comhttp://b.test.com 分别指向不同的博客子站点,针对不同的主题。这个设置很简单,只需要在 WordPress 总管理员那里设置即可。
  3. 在子站点的控制面板 http://a.test.com/wp-admin 里,绑定一个正式的域名 http://testA.comhttp://a.test.com,这样用户就通过 http://testA.com 来访问我的子站点,对于用户来说,这个子站点看起来像是一个完整独立的网站。
  4. 平时都是使用 http://testA.com 这个域名来进行博客服务访问的,基本上忘记了 http://a.test.com 这个子域名的存在。某一天,我突然心血来潮,想在 test.com 的子域名下建立一个新的站点脚本来测试一下,结果就选择了把 a.test.com 这个子域名指向了 bluehost 服务器上的新目录,并且在这里安装了新的服务来进行测试。
  5. 于是,出现了在 http://a.test.com 子站点里的控制面板里,无法正确加载模板的问题了。 看来,不管 WordPress 是否绑定了新域名,WordPress 最终还是用最原始的域名来进行资源定位的

要解决这个问题很简单,只需要把 a.test.com 重新指向正确的服务器路径即可。原因很简单,只是被坑了好久!

(0) Comments    Read More   
Posted on 04-02-2015
Filed Under (技术) by waterlin

WordPress 是一个针对公众阅读的博客系统,所以原生系统对阅读权限的设置并不出色,比如说系统就不提供限制为只允许登陆用户查看文章(或是查看指定目录、标签文章)的功能。WordPress 更像一个私人出版系统,所以这些功能不完善也可以理解。

对于我自己来说,我有一个自己的小博客系统,用来记录一下生活中的事情,这些内容并非不可公开,只是没有太多必要公开,因为我只是想写给自己看一下,并且其他人看这样的生活琐事并没有什么太大的价值。我想把这个做成自己的 QQ 空间,想让我允许的人来观看,仅此而已,不希望这个自留地太过于吵杂。

或者有人会问,那你为什么不用 QQ 空间?很简单,我不喜欢,太杂乱了,乱七八糟的广告、无聊的功能太多了。

要把 WordPress 加上一个授权用户才可以访问的权限也很简单,虽然有几个插件能实现这样的功能,但是反响并不好。最好的办法就是自己来 DIY 模板,这篇文章就对这个问题进行了详细的讨论,我这里加上一点自己的使用体会。

1. 先在模板的 functions.php 文件里定制一个用户权限检查的函数

最简单的,对于登陆用户的权限检查可以使用下面的例子代码:

function my_force_login() {
    global $post;

    if (!is_single()) return;

    $ids = array(188, 185, 171); // array of post IDs that force login to read

    if (in_array((int)$post->ID, $ids) && !is_user_logged_in()) {
        auth_redirect();
    }
} 

如果你需要更严格一点,比如说需要确定本用户是属于这个博客的(现在的 WordPress 支持多博客),可以使用类似下面的代码,重点是使用了 is_user_member_of_blog 这个函数:

function my_force_login() {
    global $post;

    if (!is_user_logged_in()) {
        auth_redirect();
    }

    $user_id = get_current_user_id();
    $blog_id = get_current_blog_id();
    if ( !is_user_member_of_blog( $user_id, $blog_id ))
    {
        wp_logout();//logout to let user to try loging again using right role
        die('User is a not Subscriber, please get Subscriber role or above to view this site!');
    }  
}

如果你需要更复杂的权限控制,比如说用户需要是这个博客的订阅者、作者或是管理员等级别的身份,可以使用 WordPress 的 user_can 函数来进行更复杂的用户身份查询。

2. 在特定的地方使用这个权限检查函数来约束用户

这里举一个最简单的使用例子,比如说在 header.php 使用上面这一个函数:

<?php my_force_login(); ?>

上述代码很简单,但是很容易对其进行扩充,可以在其它你需要限制用户权限进行阅读的地方添加上述代码,比如说针对某个目录或是某个标签的浏览等。

3. 小结

这样如果用户需要查看你的 WordPress 博客,则一定需要登陆并拥有特定的权限了。通过这种方式修改过的模板要注意,如果升级了模板,则需要手动把这些修改合并到最新的模板代码里。

(0) Comments    Read More   
Posted on 10-02-2014
Filed Under (软件) by waterlin

很多人都用 Evernote 来整理资料、记笔记,甚至于写写东西。可是,有谁尝试过直接在 Evernote 里发布文章到博客或是 WordPress 系统呢?

我推荐几种方法供大家开拓思路:

  1. Everblog

    使用 Evernote 来作为数据库,并且写一个前端,不能不说,这是一个很有创意的方案。

  2. EverPress

    WordPress 插件,不过好像很久没更新了。

  3. 通过 Email 发送来发布

    只要你的博客平台支持 Email 发布,应该就可以使用 Evernote 发送邮件这个功能来发布 WordPress 博客。

  4. 使用 ifttt 来中转

    详细参看这篇文章:WordPress 和 Evernote 的互通

  5. 强烈推荐使用 Zapier

    只需要在 Zapier 里设置一个从 Evernote 发布文章到 WordPress 的任务即可。

(0) Comments    Read More   
Posted on 05-06-2013
Filed Under (技术) by waterlin

如果你的 WordPress 博客都是原创文章,相像你一定需要一个版权声明,来提醒转载你文章的朋友注明出处、保障你的权利等。

你直接在模板文件里修改添加版本声明,但是这种方法太过麻烦,并且当你更换模板后,依然需要重新修改新的模板。我们完全可以通过使用插件来完成这个需求。

插件1:Blog Copyright

Blog Copyright 这个插件,可以在你的 WordPress 博客页脚添加一个版权声明。当然,这是按默认配置来做,你也可以按照配置说明,在你博客模板的任意地方添加这个声明,当然,这需要一定的“功力”。

这个插件的优点是,可配置性高,缺点是最好针对当前博客作为整站声明来使用。针对单独的文章添加版权声明(比如说在文章的尾部添加版权声明),使用这个插件并不是特别方便。

插件2:Post Copyright Plugin

如果你需要的是把版本声明显示在每一篇文章的结尾,怎么办?

可以使用这个插件:Post Copyright Plugin,该插件的使用很简单,但是功能过于简单,连版权声明的内容你都没办法控制。

所以,使用这个插件你需要做好在代码里进行风格定制与修改的准备。

插件3:Copyrighted Post

以上两个插件都有一些 Geek 的本性在里面,我们需要使用一个更加自动化的东西,谁不想更方便呢?

Copyrighted Post 可以实现上述功能,并且配置比较简单:在管理后台,通过菜单 Settings ==> Reading 来设置这个插件针对当前博客的设置。

如果你不喜欢默认风格,也可以通过管理员控制面板来编辑这个插件,从而修改该插件的默认风格,比如添加居中标记等。

或者如果你对 WordPress 文件结构熟悉的话,可以直接编译下面这个文件:

/wp-content/plugins/wp-copyrighted-post/wp-copyrighted-post.php

如果需要把你的版权声明文字东西置中,则需要把下述代码修改一下:

if($outIt) $content .= "\n<p style='text-align:left'>&copy; $cpDate, $owner. $srString $srStringEx</p>";

修改为:

if($outIt) $content .= "\n<p style='text-align:center'>&copy; $cpDate, $owner. $srString $srStringEx</p>";

当然,你可以对上述 <p> 里的 CSS 代码做任意修改,从而满足你的任意修改作用。

结论

我喜欢 Copyrighted Post 这个插件,你呢?

(0) Comments    Read More   
Posted on 24-07-2012
Filed Under (技术) by waterlin

如果你的 WordPress 博客都是原创文章,相像你一定需要一个版权声明,来提醒转载你文章的朋友注明出处、保障你的权利等。

你直接在模板文件里修改添加版本声明,但是这种方法太过麻烦,并且当你更换模板后,依然需要重新修改新的模板。我们完全可以通过使用插件来完成这个需求。

插件1:Blog Copyright

Blog Copyright 这个插件,可以在你的 WordPress 博客页脚添加一个版权声明。当然,这是按默认配置来做,你也可以按照配置说明,在你博客模板的任意地方添加这个声明,当然,这需要一定的”功力”。

这个插件的优点是,可配置性高,缺点是最好针对当前博客作为整站声明来使用。针对单独的文章添加版权声明(比如说在文章的尾部添加版权声明),使用这个插件并不是特别方便。

插件2:Post Copyright Plugin

如果你需要的是把版本声明显示在每一篇文章的结尾,怎么办?

可以使用这个插件:Post Copyright Plugin,该插件的使用很简单,但是功能过于简单,连版权声明的内容你都没办法控制。

所以,使用这个插件你需要做好在代码里进行风格定制与修改的准备。

插件3:Copyrighted Post

以上两个插件都有一些 Geek 的本性在里面,我们需要使用一个更加自动化的东西,谁不想更方便呢?

Copyrighted Post 可以实现上述功能,并且配置比较简单:在管理后台,通过菜单 Settings ==> Reading 来设置这个插件针对当前博客的设置。

如果你不喜欢默认风格,也可以通过管理员控制面板来编辑这个插件,从而修改该插件的默认风格,比如添加居中标记等。

或者如果你对 WordPress 文件结构熟悉的话,可以直接编译下面这个文件:

/wp-content/plugins/wp-copyrighted-post/wp-copyrighted-post.php

如果需要把你的版权声明文字东西置中,则需要把下述代码修改一下:

if($outIt) $content .= "\n<p style='text-align:left'>&copy; $cpDate, $owner. $srString $srStringEx</p>";

修改为:

if($outIt) $content .= "\n<p style='text-align:center'>&copy; $cpDate, $owner. $srString $srStringEx</p>";

当然,你可以对上述 <p> 里的 CSS 代码做任意修改,从而满足你的任意修改作用。

结论

我喜欢 Copyrighted Post 这个插件,你呢?

(0) Comments    Read More   
Posted on 22-07-2012
Filed Under (技术) by waterlin

如果你是用 WordPress 来做你自己的站点,那你在首页的导航条里,肯定希望这个导航条可以链接到本站点以外,比如说你的 Wiki 站点、你的微博、你的图片网站等。

可是 WordPress 后台管理中,默认 Pages ==> Add New 菜单功能,只是给你的导航条里添加一个新的页面(可以是留言、关于等功能页面)。可是,你如果想在这里链接到其它站点,却是无能为力了,因为这个页面的网址,WordPress 已经帮你基本定型了,你无法让它重定向到外部站点。

这个时候,很多人都会告诉你,去编辑你的模板,手动添加几个导航链接到你的模板里。这样做,有诸多的不方便,尤其是现在 WordPress 是多博客系统,你的多个博客可能使用同一个博客模板,就像我的英文博客中文博客,使用的就是同一个模板,对这个模板的修改,会同时影响到这两个博客。

要坚信,这世界上大部分的工作,其他人都帮我们做好了。上述需求,除了修改模板代码这个土方法外,我们还可以通过下面这两个插件起到类似的作用。

SoJ Page Link

SoJ Page Link 是我最早用来设置导航链接到 WordPress 以外站点的插件,不过这个插件太久没有维护了,不知道还能不能用。

朋友们试用一下,然后告诉我结果。

Page Links To

Page Links To 可以实现和 SoJ Page Link 一样的功能,甚至实现得更好。安装好了以后,在管理面板里添加新的页面时,会有一个选项如下所示:

Point this content to:

* Its normal WordPress URL

* An alternate URL

你可以根据需要进行选择。

(0) Comments    Read More   
Posted on 21-07-2012
Filed Under (已报) by waterlin

前两年在公司里比较忙,疏于对博客的管理,现在从公司离职出来在新的地方从事普通工程师的工作,慢慢地会有更多时间来打理博客了。想当年,对写博客是多么的热情,我的青春岁月呀!

之前一直想为博客添加的一个功能,就是在对评论进行回复后,会自动发送一个邮件给被评论者,以方便读者进行互动与追踪。因为少了这个功能,都不知道我的博客少了多少访问量呢,哈~~

找了找,原来 WordPress Thread Comment 这个插件可以起到上述功能,功能特点如下:

  1. 对现有评论(留言)进行回复,并可以显示出评论的层次逻辑关系;
  2. 以邮件方式自动通知被评论者,方便读者互动;
  3. 自定义功能很强,当然,由此带来的设置也比较复杂。

这些功能对我来说足够了,呵,以后欢迎各路朋友踊跃发言,再也不用担心看不到别人对你的回复了!

(0) Comments    Read More   
Posted on 15-07-2012
Filed Under (技术) by waterlin

相信大多数的 WordPress 博主,都是在海外建站。一大把数据放在国外的空间里,要是哪一天被 GFW 了,要导回数据可就麻烦了。

最安心的做法,是在本地机器里定期备份服务器的数据,并且保证它们能跑起来。

平时的话,可以多采用自动备份的方式来备份 WordPress 数据,这样可以节省不少时间。有大量的自动备份插件可以使用:

  1. 备份数据库插件:WP-DB-Backup

    用这个插件来备份数据库,然后在 Tools ==> BackUP 里可以进行备份,支持手动备份,蛮好的。

  2. 同时备份文件和数据库的插件:wp Time Machine

    这个插件蛮好的,可以同时备份数据库和文件,只不过它默认提供 Dropbox 和 Amzon S3 服务,对中国人来说,的确不是”靠谱”的服务。

    本插件的缺点是只能备份到第三方平台,而没有办法 Email 备份给你,或是直接提供下载。

  3. 提供多种角度的备份:BackUpWordPress

    在目录 Tools ==> Backups 里可进行手动备份,目前从我的使用来看,该插件的效果比较好。

另外,备份需要注意以下几点:

  1. wp-content 目录下是各个博客的图片等数据存放地点,尤其要记得备份。
  2. 当使用自动备份时,一定要注意,它只是备份你当前的博客。如果你的 WordPress 提供了多个博客,则需要在每一个博客里提供备份服务。
  3. 第一次备份需要确保建立完整镜像的步骤,即确保你备份下来的数据能在另外的服务器上重新搭建完整的博客系统:建立了完整的镜像后,以后就可以直接备份数据库与 WordPress 的文档了。
  4. 手动备份的话,在我的服务器上,我是先把 public_html 目录里所有的文件备份一下,然后把 WordPress 所属的数据库备份一下。

希望大家能异地、容灾备份自己的数据,安全第一!

(2) Comments    Read More   
Posted on 15-07-2012
Filed Under (技术) by waterlin

WordPress 的自动升级相当方便,可是如果服务器没有配置好,也一样不能自动升级,比如说我的本地测试用 WordPress 升级时就碰到了这样的错误:

Downloading update from http://mu.wordpress.org/wordpress-mu-2.8.6.zip.

Fatal error: Maximum execution time of 60 seconds exceeded in F:\xampp\htdocs\wordpress-mu\wp-includes\http.php on line 1324

这是因为我本地下载 WordPress-MU 升级包的速度太慢了,导致 php 脚本运行超时。

要修复这个错误很简单:把 php.ini 里对于脚本执行时间的限制改得宽松一些,即下面这一行里的数字:

max_execution_time = 60     ; Maximum execution time of each script, in seconds

我本地的测试环境为 Windows XP SP3 加 Xampp 1.6.5,这里值得强调一下的是,如果你本地是用 Xampp 来做开发和测试服务器使用,则需要注意 php.ini 文件的存放路径

Xampp 下的 php.ini 文件,默认位置是在xampp根目录下的 apache\bin 目录里

例如 Xampp 安装在

C:\xampp

那么其对应的 php.ini 文件则是

C:\xampp\apache\bin\php.ini

切记不是

C:\xampp\php\php.ini

弄错了 php.ini 文件位置的后果很严重,很可能不方便你追踪服务器的一系列问题。没有办法采用你设置正确的参数来启动服务器,导致一系列的调试误区。

又例如要在 Xampp 下启用 domxml 扩展,那么就要修改

C:\xampp\apache\bin\php.ini

;extension=php_domxml.dll

前面的分号去掉,还要注意 extension_dir 的位置。

(2) Comments    Read More