如何在WordPress中将带ID的文章编辑URL改为带Slug的形式
解决WordPress用文章Slug直接编辑的问题
WordPress后台的post.php默认只接受文章ID作为post参数,直接传Slug不会生效,得通过自定义代码实现Slug转ID的逻辑:
实现步骤
- 第一步,在主题的
functions.php文件里添加以下代码:
add_action('init', 'slug_to_post_id_edit_redirect'); function slug_to_post_id_edit_redirect() { // 只处理后台编辑请求,且post参数不是数字的情况 if (is_admin() && isset($_GET['action']) && $_GET['action'] === 'edit' && isset($_GET['post']) && !is_numeric($_GET['post'])) { $slug = sanitize_text_field($_GET['post']); // 根据Slug获取文章ID $post_id = get_post_id_from_slug($slug); if ($post_id) { // 重定向到带ID的编辑URL $redirect_url = add_query_arg(['post' => $post_id, 'action' => 'edit'], admin_url('post.php')); wp_redirect($redirect_url); exit; } } } // 辅助函数:通过Slug获取文章ID function get_post_id_from_slug($slug) { $query = new WP_Query([ 'name' => $slug, 'post_type' => 'post', // 如果需要支持页面,改成'page'或者数组['post','page'] 'posts_per_page' => 1, 'fields' => 'ids' ]); return $query->have_posts() ? $query->posts[0] : false; }
- 第二步,保存
functions.php后,就可以用https://example.com/wp-admin/post.php?post=MyPostSlug&action=edit这样的URL直接编辑文章了。
注意事项
- 如果需要支持自定义文章类型,修改
get_post_id_from_slug函数里的post_type参数,比如改成['post', 'page', 'your_custom_post_type']。 - 代码会自动判断post参数是否为数字,是数字的话正常走默认逻辑,不影响原有ID方式的编辑。
内容的提问来源于stack exchange,提问作者EnigmaOs
相关产品推荐
相关产品推荐

