WordPress用文章ID做文章别名的几种办法

网站APP 4 个月前 回复

, , ,

使用WordPress博客的站长朋友肯定对文章别名不陌生,很多人的固定连接都是围绕着文章的 ID(/%post_id%.html) 展开的,而在国外很多站点的固定链接都是采用文章别名的。且有些插件和主题是必须要设置%postname%.html 这样的别名固定链接才能使用,而中文站点自动生成的文章别名直接是汉字(默认为文章的标题生成为文章别名),就会出现中文链接,那么调用出来的将会是一堆乱码(因为WordPress对中文的别名进行了编码,在数据库中存储的不是中文),文章链接地址也会很长,不利于SEO优化,非常不好。

为了SEO优化,在不改变以前的用文章ID作为文章链接地址且已经被收录的文章则要保证全部还能访问,不会造成了大量的死链接。这样就需要我们手动修改别名(WordPress使用自动生成的文章ID作为文章别名),今天就介绍怎么用纯代码实现直接将 WordPress 所有文章别名设置为文章ID的方法。

警告:为了安全起见,所有设置数据库的操作务必记得先备份网站的数据库,避免因失误带来无法挽回的损失!然后再按照下文操作!

一、修改固定链接结构

在后台的 “设置” → “固定连接” → “自定义结构”选项 里设置一下固定连接,把 ID 改成别名,也就是把固定连接里的 /%post_id%.html 改成/%postname%.html

二、批量修改旧文章(现在数据库里面的文章)的别名为文章 ID 的四种方法

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

使用方法:将下边的代码添加到到当前主题目录下 functions.php 文件,在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' );

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

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

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

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

不过这个方法我试过,一般情况下都会造成页面502错误。所以文章比较多的话,不建议使用这种方法;

方法二:在配置文件 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 了!这时候你就可以放心大胆的将固定链接设置为/%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))
    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' );
    }
    }

文章来源:http://aszhi.com/web/wordpress/32.html

支付宝打赏微信打赏

如果此文对你有帮助,欢迎打赏作者。

发表评论

欢迎回来 (打开)

(必填)