wordpress自动给旧文章生成别名

用wordpress遇到一个需求,需要重新修改网站固定连接格式,以前是以post id为url,现在需要修改为别名。

为了不影响原来的post的url结构,需要给原来的post批量生成别名,即slug_name=post_id

有以下几种方法。

注意,如果是安装了Opcache和Memcached缓存扩展,更新文章url结构后,一定要刷新下缓存。

方法一:在模板函数 functions.php 文件中添加代码实现批量修改旧文章别名

使用方法:将下边的代码添加到到当前主题目录下 functions.php 文件,在php结束标记 ?> 前 即可。

// 修改WordPress旧文章别名为文章IDfunction 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' );

放置好代码后,访问一下下边的网站,注意替换成你的域名,访问前注意一定要备份数据,以免出错。

http://www.aszhi.com?post_name_id=yes

文章多的话网页加载会比较慢,因为正在一篇文章一篇文章的修改别名,要耐心等到网页完全加载好才可以。

PS:加载好后,删除之前添加的代码,修改完成,所有文章的别名都会变成自身的ID。

方法二:在配置文件 wp-config.php 中添加代码实现批量修改旧文章别名

使用方法:将下面的代码添加到网站 根目录的 wp-config.php 的最底部,保存后,访问一次网站首页(你将看到浏览器一直都在努力打开网页,不要急,耐心等待,直到网页真正打开,所需时间看文章数和网络情况而定)。等网页打开后,删除刚刚添加到 wp-config.php 的代码!(删除代码是为了防止下次打开网站首页缓慢的情况发生)

/** 批量更改旧文章的别名为文章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 字段的方法

进入 mysql 命令【 选择你所创建的数据库的命令:mysql> USE MYSQLDATA; (注:MYSQLDATA是数据库的名称。按回车键出现 Database changed 时说明操作成功!) 】或者 phpmyadmin 的 SQL (登录后打开数据库管理系统,找到网站对应的wordpress数据库,点击后,在上方有个SQL按钮) ,执行如下SQL命令修改即可:

update wp_posts set post_name=ID where post_status='publish' and post_type='post';

PS:wp_posts 是 WordPress 的文章数据表,wp_ 是默认的前缀,如果自定义更改过,请根据实际修改即可。

方法四:使用新建一个 PHP 文件批量修改旧文章别名

操作方法:将以下代码保存为 php 文件,比如 uppostname.php,并上传到网站根目录,执行即可,成功后记得删除!

<?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 了!

新文章自动使用文章ID作为文章的别名的方法,看之前的文章:

参考:http://aszhi.com/web/wordpress/32.html

本文链接: https://www.168itw.com/wordpress/slug-name-old-post/
转载请注明转载自:168itw

发表评论

您的电子邮箱地址不会被公开。