当使用中文站点自动生成文章别名时,别名通常直接使用汉字(默认为文章标题生成),导致生成的链接出现中文字符,调用时可能显示乱码(因为wordpress会对中文别名进行编码,实际存储在数据库中的不是中文字符)。由此导致文章链接变得冗长且不美观。那么我们如何解决呢?有四种方法,简单易用。
一、新文章自动使用文章 id 作为文章的别名
请将以下代码添加到当前主题目录下的 functions.php 文件中,在 php 结束标记 `?>` 前插入。这样,新建的文章将自动使用生成的文章 id 作为文章别名。
/** * wordpress 新文章自动使用 id 作为别名 * 作用:即使你设置固定连接结构为 %postname% ,仍旧自动生成 id 结构的链接 */ 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的四种方法
方法一:在模板函数 functions.php 文件中添加代码实现批量修改旧文章别名;
使用方法:将下边的代码添加到当前主题 functions.php 中
/** * 修改 wordpress 旧文章别名为文章 id */ function bing_post_name_id(){ query_posts( 'posts_per_page=-1' ); while( have_posts() ){ the_post(); $post_id = $globals['post']->id; wp_update_post( array( 'id' => $post_id, 'post_name' => $post_id ) ); } wp_reset_query(); } if( $_get['post_name_id'] == 'yes' ) add_action( 'init', 'bing_post_name_id' );
放置好代码后,访问一下下边的网站,注意域名替换成自己的域名(https://myqqjd.com替换成 你的域名 ),访问前注意一定要备份数据,以免出错。
https://myqqjd.com?post_name_id=yes
文章多的话网页加载会比较慢,因为正在一篇文章一篇文章的修改别名,要耐心等到网页完全加载好才可以。
方法二:在配置文件 wp-config.php 中添加代码实现批量修改旧文章别名
使用方法:将下面的代码添加到网站根目录的 wp-config.php 文件中,访问一次网站m6米乐app登录首页(你将看到浏览器一直都在努力打开网页,不要急,耐心等待,直到网页真正打开,所需时间看文章数和网络情况而定)。
等网页打开后,删除刚刚添加到 wp-config.php 的代码!(删除代码是为了防止下次打开网站m6米乐app登录首页缓慢的情况发生)
/** 批量更改旧文章的别名为文章 id */ // 添加一个变量来包容文章标题数组,防止重复操作 $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 " ); }
方法三:直接替换 sql 数据库里的 post_name 字段的方法(推荐)
执行如下 sql 命令修改即可:
update wp_posts set post_name=id where post_status='publish' and post_type='post';
wp_posts 是 wordpress 的文章数据表,wp_ 是默认的前缀,如果自定义更改过,请根据实际修改即可。
方法四:使用新建一个 php 文件批量修改旧文章别名
操作方法:将以下代码保存为 php 文件,比如 uppostname.php,并上传到网站根目录,执行即可,成功后记得删除!
/** * 将所以已发布的文章别名修改成对应 id,让文章以别名完美连续 * ps:备份网站数据库后,请放到 wordpress 根目录执行,成功后请记得删除! **/ require('./wp-blog-header.php'); global $wpdb; $wpdb->query("update $wpdb->posts set post_name = id where post_status = 'publish' and post_type = 'post'"); echo 'update success!';
任选其中一种方法,成功执行之后,你之前发布的文章的别名就全部变成了对应的 id 了!个人觉得第三种方法简单有效且效率非常好,推荐!