Custom permalinks插件允许用户随意定制每一篇文章或者页面的固定链接,适用于文章/页面的固定链接格式种类繁多的情况。不过在使用中也遇到了问题,记录一下。
问题一: 404错误
使用Custom Permalinks时经常遇到404错误,经过搜索和研究发现是Revisions引起的问题,这一点可以通过访问Tools->Custom Permalinks来确认。当某个页面有revisions时,这里会出现两条或多条一样的记录,这时访问这个页面就会出现404错误,解决的方法是删除这个页面的revisions。如果不嫌麻烦,可以安装WP Clean Up插件删除revisions,但不解决根本问题。
如果要彻底解决,就需要修改一下插件的代码。打开custom-permalinks.php文件,找到第164行,更改一下sql语句,增加
" post_type NOT IN ('revision') AND ".
完整sql语句如下
$sql = "SELECT $wpdb->posts.ID, $wpdb->postmeta.meta_value, $wpdb->posts.post_type FROM $wpdb->posts ". "LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) WHERE ". " post_type NOT IN ('revision') AND ". " meta_key = 'custom_permalink' AND ". " meta_value != '' AND ". " ( LOWER(meta_value) = LEFT(LOWER('".mysql_real_escape_string($request_noslash)."'), LENGTH(meta_value)) OR ". " LOWER(meta_value) = LEFT(LOWER('".mysql_real_escape_string($request_noslash."/")."'), LENGTH(meta_value)) ) ". "ORDER BY LENGTH(meta_value) DESC LIMIT 1";
代码来自:404 Error – potentially caused by revisions
问题二:与.html on pages插件冲突
.html on pages插件虽然很久没更新了,但最新版WordPress依然可以用,用途是给page加个.html后缀。发生冲突的条件如下:
- 网站用静态页作为首页,在Settings->Reading中将Posts page设为一个页面,假设页面的url是http://example.com/blog/
- 在Settings->Permalink将固定链接格式设为blog/%postname%/
- 当用红色标出的部分相同时,错误就会发生
错误:访问任何post、category及其他archive页面,都会显示blog index页面。
解决方法:禁用.html on pages,加.html的工作用custom permalink完成
看起来似乎是用了两个功能雷同的插件导致冲突,又尝试了一下发现即使没有.html on pages,这个错误还是可能出现,例如:
- 创建一个名为Blog的页面,默认固定链接会是http://example.com/blog/,更改固定链接为http://example.com/myblog/,这时custom permalinks插件就会创建名为custom_permalink的custom field,在screen options启用custom field就能看到。
- 将该页面设置为Posts page
- 将固定链接格式更改为myblog/%postname%/
这时访问任何post、category及其他archive页面都会显示http://example.com/myblog/的内容。
产生这个错误是custom permalink的判断机制问题(即第一节中提到的那段sql语句)。我的情况是,只要禁用.html on pages插件,改用custom permalinks完成增加.html后缀的功能,就能避免这个错误(因为blog页面会使用默认的地址,不需要custom permalinks干预)。
帅气!
使用WP User Query实现
例如查询所有管理员
之前也写过一篇相关的文章,你可以参考下
sola亲,后台用户中不是有为用户分别了权限吗?比如管理员、作者等,如果我后台有50个管理员,我像显示所有的管理员头像,该怎么显示呢?