HOME
워드프레스

[워드프레스]custom post type의 url에 난수 추가하기

on
2022-02-27

올해 새롭게 시작하는 프로젝트에서 ‘인보이스’ 기능이 필요해서 작업 중이다. 작업을 하다보니 인보이스 페이지의 url에 post title만 있는 것 보다는 난수를 추가해주는 것이 좋을 듯 하여 다음과 같이 작업했다.

  • 선행작업 : 이미 invoice라는 custom post type을 추가했다.
  • custom post type에만 적용해야 하므로 admin의 edit.php에서 현재 post type이 무엇인지 알아야 한다.
  • 만약 custom post type이 invoice라면 현재 시간을 기준으로 난수를 만들어 title 뒤에 추가

admin 페이지에서 post type이 ‘invoice’인 것에만 적용하려고 편집 edit.php 페이지의 현재 post type을 확인하려고 여러 가지를 시도하는데 잘 안된다. current_screen, pagenow, typenow 등의 변수와 함수들을 사용해보다가 잘 되지 않았다.

검색을 해보니 깃헙에 좋은 코드가 있어 공유해본다. (참고 : 참고 링크 보기)

function get_current_post_type() {
	global $post, $typenow, $current_screen;
	//we have a post so we can just get the post type from that
	if ( $post && $post->post_type ) {
	  return $post->post_type;
	}
  
	//check the global $typenow - set in admin.php
	elseif ( $typenow ) {
	  return $typenow;
	}
  
	//check the global $current_screen object - set in sceen.php
	elseif ( $current_screen && $current_screen->post_type ) {
	  return $current_screen->post_type;
	}
  
	//check the post_type querystring
	elseif ( isset( $_REQUEST['post_type'] ) ) {
	  return sanitize_key( $_REQUEST['post_type'] );
	}
  
	//lastly check if post ID is in query string
	elseif ( isset( $_REQUEST['post'] ) ) {
	  return get_post_type( $_REQUEST['post'] );
	}
  
	//we do not know the post type!
	return null;
  }

위의 코드를 사용해서 포스트 타입을 확인하니 잘 작동한다.

그 다음으로는 난수 생성이다.

  1. 현재 post_type이 invoice인 경우가 아니면 return
  2. $data[‘post_name’]는 post의 url을 생성하는 slug인데 이를 수정하는 방식이다.
  3. md5를 활용해서 현재 시간을 기준으로 난수생성을 했다.
  4. wp_insert_post_data라는 hook을 활용하여 db에 post 데이터가 업데이트 되기 전에 url을 변경했다.
function random_custom_append_slug($data) {
	
	if(get_current_post_type() != 'invoice'){
		return $data;
	}

	global $post_ID;
	$str = time();
	$data['post_name'] = md5(sanitize_title($data['post_title'], $post_ID));
	$data['post_name'] .= md5($str);
	return $data; 
} 
add_filter('wp_insert_post_data', 'random_custom_append_slug', 10, 1);

이상!

TAGS

Comments

RELATED POSTS
검색하기