WordPress纯代码实现直接将文章别名设置为文章ID!
WordPress纯代码实现直接将文章别名设置为文章ID!
使用WordPress博客的站长朋友肯定对文章别名不陌生,很多人的固定连接都是围绕着文章的 ID(/%post_id%.html) 展开的,而在国外很多站点的固定链接都是采用文章别名的。且有些插件和主题是必须要设置%postname%.html 这样的别名固定链接才能使用,而中文站点自动生成的文章别名直接是汉字(默认为文章的标题生成为文章别名),就会出现中文链接,那么调用出来的将会是一堆乱码(因为WordPress对中文的别名进行了编码,在数据库中存储的不是中文),文章链接地址也会很长,不利于SEO优化,非常不好。
为了SEO优化,在不改变以前的用文章ID作为文章链接地址且已经被收录的文章则要保证全部还能访问,不会造成了大量的死链接。这样就需要我们手动修改别名(WordPress使用自动生成的文章ID作为文章别名),今天就介绍怎么用纯代码实现直接将 WordPress 所有文章别名设置为文章ID的方法。
PS:为了安全起见,所有设置数据库的操作务必记得先备份网站的数据库,避免因失误带来无法挽回的损失!然后再按照下文操作!
一、修改固定链接结构
在后台的 “设置” → “固定连接” → “自定义结构”选项 里设置一下固定连接,把 ID 改成别名,也就是把固定连接里的 /%post_id%.html 改成/%postname%.html
二、批量修改旧文章(现在数据库里面的文章)的别名为文章 ID 的四种方法
方法一:在模板函数 functions.php 文件中添加代码实现批量修改旧文章别名
使用方法:将下边的代码添加到到当前主题目录下 functions.php 文件,在php结束标记 ?> 前 即可。
- // 修改WordPress旧文章别名为文章ID
- functionBing_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_ 是默认的前缀,如果自定义更改过,请根据实际修改即可。
初学者刚开始安装和学习Mysql的时候,在Windows系统中无法进入Mysql操作界面,更是无法掌握一些图形化管理器,这时候需要掌握通过从CMD命令行或数据库管理工具进入Mysq......
方法四:使用新建一个 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 了!这时候你就可以放心大胆的将固定链接设置为/%postname%.html 了!
三、新文章自动使用文章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))
- returnfalse;
- // 取消挂载该函数,防止无限循环
- 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');
- }
- }
------------------------------------------------------------------
END
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。
共有 0 条评论