最近有朋友一直在问:我使用固定链接结构是 %post_id% (ID),但是 WP User Frontend 这个前端用户中心插件要求必须设置为 %postname% (slug)才能使用,我不想改变以前的文章链接地址,该怎么办?
本文就是解决这个问题的,让 WordPress 自动使用文章ID作为别名(slug),也就是说,即使你设置为 %postname% 结构,仍旧可以自动生成 ID 结构的链接。或许你会说,修改固定链接结构后,原来的那些文章的链接变化了,怎么办?不用担心,照样可以解决!进入正题!
为了安全起见,请先备份网站的数据库,然后再按照下文操作!
更改固定链接结构
假设你原来的固定链接结构设置为 /%post_id%,现在你可以将它改为 /%postname% ,这时候你会发现,新建文章和老文章都使用文章标题作为别名
批量修改老文章的别名为ID
将下面的代码添加到网站根目录的 wp-config.php 的最底部,保存后访问一次网站首页(你将看到浏览器一直都在努力打开网页,不要急,耐心等待,直到网页真正打开,所需时间看文章数和网络情况而定)。网页打开后,删除刚刚添加到 wp-config.php 的代码!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | /** * 批量更改旧文章的别名为ID * 使用方法:将代码添加到网站根目录的 wp-config.php 的最底部,访问一次网站首页,等页面打开后,再删除这些代码 * https://www.wpdaxue.com/wordpress-using-post-id-as-slug.html */ // 添加一个变量来包容文章标题数组,防止重复操作 $slug_done = array(); // 查询所有文章 $posts = $wpdb->get_results( " SELECT `ID`, `post_title` FROM `" . $wpdb->posts . "` WHERE `post_type` = 'post' " ); // 输出文章 foreach( $posts AS $single ) { $this_slug = $single->ID; $slug_done[] = $this_slug; // 使用文章ID替换文章原来的别名 $wpdb->query( " UPDATE `" . $wpdb->posts . "` SET `post_name` = '" . $this_slug . "' WHERE `ID` = '" . $single->ID . "' LIMIT 1 " ); } |
/** * 批量更改旧文章的别名为ID * 使用方法:将代码添加到网站根目录的 wp-config.php 的最底部,访问一次网站首页,等页面打开后,再删除这些代码 * https://www.wpdaxue.com/wordpress-using-post-id-as-slug.html */ // 添加一个变量来包容文章标题数组,防止重复操作 $slug_done = array(); // 查询所有文章 $posts = $wpdb->get_results( " SELECT `ID`, `post_title` FROM `" . $wpdb->posts . "` WHERE `post_type` = 'post' " ); // 输出文章 foreach( $posts AS $single ) { $this_slug = $single->ID; $slug_done[] = $this_slug; // 使用文章ID替换文章原来的别名 $wpdb->query( " UPDATE `" . $wpdb->posts . "` SET `post_name` = '" . $this_slug . "' WHERE `ID` = '" . $single->ID . "' LIMIT 1 " ); }
新文章自动使用ID作为别名
将下面的代码添加到主题的 functions.php ,新建的文章都会自动使用ID作为别名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /** * 新文章自动使用ID作为别名 * 作用:即使你设置固定连接结构为 %postname% ,仍旧自动生成 ID 结构的链接 * https://www.wpdaxue.com/wordpress-using-post-id-as-slug.html */ add_action( 'save_post', 'using_id_as_slug', 10, 2 ); function using_id_as_slug($post_id, $post){ global $post_type; if($post_type=='post'){ //只对文章生效 // 如果是文章的版本,不生效 if (wp_is_post_revision($post_id)) return false; // 取消挂载该函数,防止无限循环 remove_action('save_post', 'using_id_as_slug' ); // 使用文章ID作为文章的别名 wp_update_post(array('ID' => $post_id, 'post_name' => $post_id )); // 重新挂载该函数 add_action('save_post', 'using_id_as_slug' ); }} |
/** * 新文章自动使用ID作为别名 * 作用:即使你设置固定连接结构为 %postname% ,仍旧自动生成 ID 结构的链接 * https://www.wpdaxue.com/wordpress-using-post-id-as-slug.html */ add_action( 'save_post', 'using_id_as_slug', 10, 2 ); function using_id_as_slug($post_id, $post){ global $post_type; if($post_type=='post'){ //只对文章生效 // 如果是文章的版本,不生效 if (wp_is_post_revision($post_id)) return false; // 取消挂载该函数,防止无限循环 remove_action('save_post', 'using_id_as_slug' ); // 使用文章ID作为文章的别名 wp_update_post(array('ID' => $post_id, 'post_name' => $post_id )); // 重新挂载该函数 add_action('save_post', 'using_id_as_slug' ); } }
2013-10-19更新:添加文章类型判断,只对文章(post)生效,不会影响页面等其他类型
参考资料:
http://www.ryankessen.com/50/how-to-mass-change-article-slug-urls-in-wordpress/
http://wordpress.stackexchange.com/questions/51363/
以上就是WordPress 自动如何使用文章ID作为别名(slug)。成败一笑过,潇洒向前行。人生充满变数,不知下一分下一秒我们将在何处。所以,别让自己的心太累,简单一点,快乐一些,看花开花落,听流水潺潺,好好珍惜生活的每一天,轻松快乐淡定从容地去生活!更多关于WordPress 自动如何使用文章ID作为别名(slug)请关注haodaima.com其它相关文章!