WordPress 将全站所有文章的别名设置成自身的 ID数

咱们国内的WordPress用户,很多人的文章固定连接都是围绕着文章的 ID 设置的,而在国外则是大多数都是文章的别名(默认为文章的标题英文小写并去除或转义一些特殊字符)。如果使用文章的别名作为固定连接,不手动设置别名,就会出现中文链接,非常不好。

但如果有一天你想在固定连接里包含别名,那就最好手动设置每一篇文章的别名,当然了,主动去设置这种文章链接的除外。防止出现中文。但这样,之前的文章还是会出现中文,又懒得去改,怎么办呢?本文就教你怎么把老文章的别名自动设置成自身的 ID.

首先把下边的代码放到主题的 functions.php 里:

 /**
 * 将已发布文章别名改为文章ID
 * 版权:灵异派 www.lypai.net
 * 执行完请注释或删除本代码
 */
function Bing_post_name_id(){
    // 仅管理员可执行
    if ( ! current_user_can( 'manage_options' ) ){
        die("权限不足,仅限管理员");
    }

    $args = [
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => 50,
        'no_found_rows'  => true,
    ];

    $updated = 0;
    $skipped = 0;
    $offset  = 0;

    while ( $posts = get_posts( $args + ['offset'=>$offset] ) ){
        foreach ( $posts as $post ){
            if ( $post->post_name === (string)$post->ID ){
                $skipped++;
                continue;
            }
            wp_update_post([
                'ID'        => $post->ID,
                'post_name' => $post->ID
            ]);
            $updated++;
        }
        $offset += 50;
    }

    echo "执行完成\r\n";
    echo "更新:{$updated} 篇\r\n";
    echo "跳过无需更新:{$skipped} 篇\r\n";
    exit;
}

// 访问地址:域名/?post_name_id=lypai2026
if( isset($_GET['post_name_id']) && $_GET['post_name_id'] === 'lypai2026' ){
    add_action('init','Bing_post_name_id');
}
 

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

http://example.com/?post_name_id=lypai2026

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

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

《WordPress 将全站所有文章的别名设置成自身的 ID数》留言数:0

发表留言