移除WordPress URL中冗余字符串:解决Press-this extended插件发布文章后的URL格式问题
解决Press-This Extended生成多余URL参数的问题
最优方案:添加自定义函数到functions.php
直接在主题里加个自定义函数是最简单也最安全的选择,比改.htaccess靠谱多了——后者容易误触其他合法请求,而函数能精准针对插件的重定向逻辑。
- 打开你当前主题的
functions.php文件(可以通过WordPress后台「外观→主题文件编辑器」找到,或者用FTP访问服务器的wp-content/themes/你的主题名/目录) - 把下面的代码粘贴到文件末尾(注意别破坏原有代码的结构):
add_filter('redirect_post_location', 'fix_press_this_extended_url', 10, 2); function fix_press_this_extended_url($location, $post_id) { // 只处理Press-This Extended生成的带多余参数的URL if (strpos($location, 'post_type=post&p=') !== false) { // 移除多余的"post_type=post&"字符串 $location = str_replace('post_type=post&p=', 'p=', $location); } return $location; }
- 保存文件,用Press-This Extended发布一篇测试文章,验证跳转后的URL是否已经变成
mysite.com/?p=xxxx的格式。
原理说明
WordPress的redirect_post_location钩子专门用来修改文章发布/更新后的重定向地址。我们的函数会检查重定向URL里是否包含那串多余的参数,只在符合条件的时候替换,完全不干扰经典编辑器或其他插件的正常工作。如果发现代码不生效,可以把钩子优先级的10改成20(确保我们的函数在插件的重定向逻辑之后执行)。
备选方案:修改.htaccess文件(不推荐)
如果你更倾向于用服务器层面的规则,可以在WordPress根目录的.htaccess文件里,把下面的规则加到WordPress默认的RewriteRule之前:
RewriteEngine On RewriteCond %{QUERY_STRING} ^post_type=post&p=([0-9]+)$ RewriteRule ^$ /?p=%1 [R=301,L]
但要注意:这个规则会匹配所有根目录下带有post_type=post&p=xxx的请求,虽然对普通文章影响不大,但如果你的站点有其他依赖post_type=post参数的功能,可能会出问题,所以还是自定义函数的方案更稳妥。
内容的提问来源于stack exchange,提问作者Konstantinos
相关产品推荐
相关产品推荐

