서문
저는 WordPress 글에 post_name 필드가 설정되지 않으면 기본적으로 제목 title을 post_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' );