WordPress批量修改旧文章的别名为文章ID的四种方法

资源分享评论7.4K
摘要

当使用中文站点自动生成文章别名时,别名通常直接使用汉字(默认为文章标题生成),导致生成的链接出现中文字符,调用时可能显示乱码

当使用中文站点自动生成文章别名时,别名通常直接使用汉字(默认为文章标题生成),导致生成的链接出现中文字符,调用时可能显示乱码(因为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

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

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 字段的方法(推荐)

执行如下 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 了!个人觉得第三种方法简单有效且效率非常好,推荐!

评论  0  访客  0

发表评论