Tag Archives: wordpress

WordPress标签分隔符插件

WordPress 2.3加入了标签功能,我们可以在撰写文章的时候,在文章编辑框的下方输入一些以“,”分割的标签。这是一个半角的逗号,对于国内的用户来说,经常需要输入中文的标签,这时候中文输入法打出来的是全角的逗号“,”,就必须切换到半角模式或者关闭输入法,再输入一个半角的逗号,输入完了之后还要把输入法切换回来,十分麻烦。目前没有找到任何一种插件可以解决这个问题。当我研究了WordPress的代码之后,发现光写一个插件是不能达到我要的功能的,必须对现有的代码进行一些修改。这是由于WordPress代码本身有一个小小的不完善的地方。下面我给出我的解决方案,希望对大家有用:
找到WordPress安装目录下wp-includes/post.php,打开编辑,将第432行(WordPress 2.3.1版)由原有的:

$fields = array(‘post_author’, … , ‘post_category’);

改为

$fields = array(‘post_author’,…, ‘post_category’, ‘tags_input’);

大家可以看到在这个数组的最后添加了一个’tags_input’, 这样修改的原因是:包含这一行的函数
sanitize_post 要对输入的帖子的数据数组进行过滤和转义,这个数组就是告诉 sanitize_post ,
帖子数据中有哪些键对应的值需要过滤和转义,正好漏掉了标签对应的键名“tags_input”。另外很有意思的是,我们还能在这一行的上面看到一个 TODO 注释:
// TODO: Use array keys instead of hard coded list
也就是说,WordPress的开发团队注意到了这个问题,将来会直接遍历整个数组(或对象)来进行过滤和转义而非使用这样一个列表。
接下来,将我写的以下代码保存为一个php文件,放到wp-content/plugins目录下:

<?php
/*
Plugin Name: Multiple Tag Separator
Plugin URI: http://shiningray.cn/2007/12/22/multiple_tags_separator/
Description: use other tags separator instead of the default ‘,’.
The plugin requires hacking now,
see http://shiningray.cn/2007/12/22/multiple_tags_separator/.
Version: 0.0.1
Author: ShiningRay
Author URI: http://shiningray.cn/
*/

function multiple_tag_separator($c){
[...]

Nginx的WordPress配置

WordPress是一个非常流行的Blog系统,它可以利用Apache的mod_rewrite来实现URL的静态化。安装好的WordPress在配置了持久链接之后,会在网站的根目录下(如果可写)生成一个.htaccess文件,这个文件可以指示Apache如何进行URL重写(如果服务器配置为允许使用htaccess的指令的话),它的内容如下:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

这个文件的意思就是,如果当请求的文件不存在,那么把请求内部重定向到/index.php。WordPress会自己分析请求的URL,来判断显示哪个页面。
在上次配置了Nginx+PHP之后,由于Nginx不支持Apache的.htaccess文件,要实现持久连接静态化,我们必须手工配置Nginx的文件。首先找到Nginx的配置文件,默认编译后的配置文件在/usr/local/nginx/conf/nginx.conf;Ubuntu通过包安装的配置文件位于/etc/nginx/nginx.conf,也可以编辑vhost的配置文件,放在了/etc/nginx/sites-available下。
以下是基本的配置(Ubuntu下的范例):
location / {
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
[...]