WordPress本地项目中如何隐藏URL中的文章ID?
解决WordPress自定义URL隐藏文章ID的问题
问题分析
你当前的代码依赖文章ID匹配重写规则,因此必须在URL中保留ID才能正常访问内容。要隐藏ID,需要修改链接生成逻辑和重写规则,改用文章别名(post_name)查询内容,同时确保别名唯一性。
代码修改步骤
1. 修改链接生成函数
去掉URL中的ID部分,同时修正原代码中错误的文章类型判断逻辑(原代码错误地将文章别名与文章类型slug做对比):
function mycustomname_link_p($post_link, $post = 0) { // 检查当前文章类型是否在目标数组中 if (in_array($post->post_type, $GLOBALS['array_p'])) { return home_url('nature/posts/' . $post->post_name . '/'); } return $post_link; } add_filter('post_type_link', 'mycustomname_link_p', 10, 2);
2. 修改重写规则函数
更新重写规则,让WordPress通过文章别名和类型查询内容,而非ID;同时避免在init钩子中频繁刷新规则(会影响性能):
function mycustomname_rewrites_init_p(){ foreach ($GLOBALS['array_p'] as $post_type) { add_rewrite_rule( 'nature/posts/([^/]+)/?$', 'index.php?post_type=' . $post_type . '&name=$matches[1]', 'top' ); } } add_action('init', 'mycustomname_rewrites_init_p');
关键注意事项
- 刷新重写规则:修改代码后,登录WordPress后台,进入「设置」→「固定链接」,直接点击「保存更改」即可自动刷新重写规则,无需手动调用
flush_rewrite_rules()。 - 别名唯一性:WordPress默认会为重复标题的文章自动添加别名后缀(如
my-post-2),确保别名唯一;如果手动修改别名导致重复,会出现404或跳转到第一个匹配的文章。 - 数组内容验证:确保
$GLOBALS['array_p']中存储的是目标文章类型的slug(比如你的persona_pubblica),而非文章别名。
内容的提问来源于stack exchange,提问作者Francesco Rossi
相关产品推荐
相关产品推荐

