서문

저는 WordPress 글에 post_name 필드가 설정되지 않으면 기본적으로 제목 titlepost_name으로 사용하기 때문에, post_name을 글 URL로 사용할 때 중국어가 표시되어 보기에 매우 어색하다는 점이 늘 신경 쓰였습니다.

하지만 post_name을 수동으로 설정하고 싶지는 않았기 때문에, post_name을 기본적으로 ID와 동일하게 설정할 수 없을까 생각했습니다.

기존 데이터 일괄 교체

먼저 이미 게시된 글을 모두 교체합니다. SQL 문을 직접 사용하면 됩니다.

UPDATE wp_posts SET post_name = ID;

여기서 wp_posts는 WordPress 데이터베이스의 글 테이블입니다.

글 게시 시 자동 수정

WordPress에서 글을 게시하거나 업데이트할 때마다 기본적으로 post_name을 ID와 동일하게 설정하려면 사용자 지정 기능을 추가하여 구현할 수 있습니다.

WordPress 테마 폴더의 functions.php 파일을 열고 파일 끝에 다음 코드를 추가합니다.

function set_postname_as_id( $post_id ) {
    $post = get_post( $post_id );
    $post_name = $post->post_name;
    $post_id = $post->ID;

    if ( $post_name != $post_id ) {
        $args = array(
            'ID' => $post_id,
            'post_name' => $post_id,
        );
        wp_update_post( $args );
    }
}
add_action( 'save_post', 'set_postname_as_id' );

functions.php 파일을 저장하고 WordPress 테마 폴더에 업로드합니다.

글을 게시하거나 업데이트할 때마다 WordPress는 글의 post_name이 ID와 동일한지 확인합니다. 다르면 post_name을 자동으로 ID로 업데이트합니다. 이 작업은 페이지와 사용자 지정 글 유형을 포함한 모든 유형의 글에 영향을 준다는 점에 유의하세요. 특정 유형의 글에만 적용하려면 set_postname_as_id 함수 내부에 적절한 조건 검사를 추가할 수 있습니다.

예를 들어 제가 사용하는 B2 테마에서 page 페이지를 제외한 모든 글 유형을 교체하고 싶다면 다음과 같이 변경할 수 있습니다.

function set_postname_as_id( $post_id ) {
    // 获取文章对象
    $post = get_post( $post_id );

    // 获取当前文章的 post_name 和 ID
    $post_name = $post->post_name;
    $post_id = $post->ID;

    // 检查文章类型是否为 page,如果是则返回
    if ( $post->post_type == 'page' ) {
        return;
    }

    // 检查 post_name 是否与 ID 不同
    if ( $post_name != $post_id ) {
        // 准备要更新的文章参数
        $args = array(
            'ID' => $post_id,
            'post_name' => $post_id,
        );

        // 更新文章的 post_name 为 ID
        wp_update_post( $args );
    }
}

// 在保存文章时触发自定义功能
add_action( 'save_post', 'set_postname_as_id' );