PHP를 사용하여 WordPress 게시물 및 페이지 만들기 - 101
- 1. 현재 읽고 있는 내용: PHP를 사용하여 WordPress 게시물 및 페이지 만들기 – 101 튜토리얼
- <스팬>2. PHP로 WordPress 게시물 관리 – 생성 및 업데이트
의심할 여지없이 WordPress 테마 및 플러그인을 설치할 때 '더미 데이터'를 자동으로 설치하여 즉시 완벽하게 작동하는 웹사이트를 갖게 된다고 주장하는 플러그인을 본 적이 있을 것입니다. PHP 함수만을 사용하여 이를 달성하는 방법을 보여 드리겠습니다.
다음과 같은 경우에 유용할 수 있습니다.
- 테마나 플러그인에는 특정 게시물이나 페이지가 필요합니다.
- 위에서 설명한 대로 프리미엄 더미 설치를 제공하려고 합니다.
- 게시물 작성을 자동화하고 싶습니다.
- 당신은 단지 배우고 싶어합니다.
이 튜토리얼에서는 '빠르고 더러운' 작업 솔루션을 달성하기 위한 간단한 초보자용 함수를 만들 것입니다. 나중에 다른 튜토리얼에서 강력하고 사용하기 쉬운 게시 시스템을 만들기 위해 여기서 배우지 않은 내용을 확장하는 방법을 배우게 됩니다.
모든 방법을 읽는 대신 기존 코드를 가지고 플레이하는 것을 선호하는 분들을 위해 여기에 사용법 및 참고 사항의 예와 함께 최종 기능이 있습니다.
if ( ! function_exists( 'PostCreator' ) ) {
function PostCreator(
$name = 'AUTO POST',
$type = 'post',
$content = 'DUMMY CONTENT',
$category = array(1,2),
$template = NULL,
$author_id = '1',
$status = 'publish'
) {
define( POST_NAME, $name );
define( POST_TYPE, $type );
define( POST_CONTENT, $content );
define( POST_CATEGORY, $category );
define( POST_TEMPLATE, '' );
define( POST_AUTH_ID, $author_id );
define( POST_STATUS, $status );
if ( $type == 'page' ) {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_page( $post_id );
define( POST_TEMPLATE, $template );
} else {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_post( $post_id );
}
function hbt_create_post() {
$post_data = array(
'post_title' => wp_strip_all_tags( POST_NAME ),
'post_content' => POST_CONTENT,
'post_status' => POST_STATUS,
'post_type' => POST_TYPE,
'post_author' => POST_AUTH_ID,
'post_category' => POST_CATEGORY,
'page_template' => POST_TEMPLATE
);
wp_insert_post( $post_data, $error_obj );
}
if ( ! isset( $post ) ) {
add_action( 'admin_init', 'hbt_create_post' );
return $error_obj;
}
}
}
/* All available options for PostCreator()
PostCreator( 'TITLE' , 'POST TYPE' , 'POST CONTENT' , 'POST CATEGORY' , 'TEMPLATE FILE NAME' , 'AUTHOR ID NUMBER' , 'POST STATUS');
TITLE - HTML Stripped Out. Simple String.
POST TYPE - Post type slug. Eg 'post' or 'page'. Custom Post Types are supported.
POST CONTENT - Content of the Post/Page. HTML allowed.
POST CATEGORY - An array of the integer ID's of the category/categories you want to link to your post
TEMPLATE FILE NAME - File name of the template. Only for Pages. In the format 'file_name.php'.
AUTHOR ID NUMBER - Integer value. Default is 1.
POST STATUS - Available options; [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ]
If successful, PostCreator() returns nothing.
If there is an error PostCreator() returns a WP_error object.
*/
PostCreator( 'My Lorem Ipsum', 'page', 'With a sizable serving of Dolor. This was created using Harri Bell-Thomas\'s PostCreator function.' );단계별 가이드
PostCreator()라는 PHP 함수를 생성할 것이며 특정 매개변수를 사용하는 데 이 함수가 필요합니다. 각 매개변수에는 기본값이 지정되어 있으므로 기술적으로는 함수를 호출할 때 매개변수를 지정할 필요가 없습니다. 하지만 그게 무슨 재미가 있을까요?
function PostCreator(
$name = 'AUTO POST',
$type = 'post',
$content = 'DUMMY CONTENT',
$category = array(1,2),
$template = NULL,
$author_id = '1',
$status = 'publish'
) {
// function output here
}다음으로 다음 임베디드 함수에 필요한 몇 가지 상수를 정의하겠습니다. (상수를 사용하지 않도록 다시 작성할 수도 있지만 기본 PostCreator() 함수를 확장할 때 유용하다고 생각하여 이를 사용했습니다. 그러나 이는 다른 튜토리얼에서 다루겠습니다.
define( POST_NAME, $name );
define( POST_TYPE, $type );
define( POST_CONTENT, $content );
define( POST_CATEGORY, $category );
define( POST_TEMPLATE, '' );
define( POST_AUTH_ID, $author_id );
define( POST_STATUS, $status );좋아, 지금까지는 아주 좋았어. 이제 중복된 게시물/페이지가 생성되는 것을 방지하기 위해 몇 가지 유효성 검사를 포함했습니다(이것은 악몽입니다. 저를 믿으세요!). 이 유효성 검사는 동일한 이름의 게시물/페이지가 이미 존재하는지 확인합니다. 그렇다면 새 항목을 생성하지 않지만, 그렇지 않은 경우에는 자동으로 생성됩니다.
게시물 제목을 확인하기로 선택한 이유는 그것이 WordPress에서 페이지를 생성하는 데 필요한 전부이기 때문입니다(나머지는 자동으로 생성됩니다). 이 유효성 검사를 수행하는 다른 방법으로는 '슬러그' 또는 게시물 ID를 확인하는 것이 있습니다. 이 모든 내용은 이후 튜토리얼에서 다루겠습니다.
이는 플러그인이나 테마에 게시물/페이지가 필요한 경우 특히 유용합니다. 나는 특정 페이지 템플릿과 함께 페이지가 있어야 했기 때문에 내 플러그인 중 하나를 위해 이것을 처음 개발했습니다. 이 기능을 사용하여 PostCreator()는 WordPress의 'admin_init'로 유지했습니다. 즉, 누군가 삭제하려고 하면(감히!) 나머지 플러그인과 관련된 문제를 방지하기 위해 즉시 다시 생성된다는 의미입니다.
자신의 블로그가 도용되는 것을 원하는 사람은 아무도 없다는 점을 명심하세요. 따라서 무슨 일이 일어나고 있는지 명확하게 알려주고 블로그를 끌 수 있는 옵션을 제공할 수도 있습니다.
이제 검증으로 돌아갑니다. 다음 코드는 다음과 같습니다.
if ( $type == 'page' ) {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_page( $post_id );
define( POST_TEMPLATE, $template );
} else {
$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
$post_id = $post->ID;
$post_data = get_post( $post_id );
}그렇다면 여기서 도대체 무슨 일이 벌어지고 있는 걸까요?
음, 이것은 본질적으로 동일한 과정이 두 번 반복되는 것입니다. 게시물과 페이지가 약간 다르게 처리되는 방식 때문에 이렇게 합니다. 또한, POST_TEMPLATE 상수는 페이지를 생성하려는 경우에만 정의됩니다. 페이지에서만 해당 매개변수를 허용할 수 있기 때문입니다(즉, 표준 게시물을 생성하려는 경우 이 매개변수는 무시됩니다).
IF 절의 첫 번째 줄(아직 모르신다면 기술적 이름은 'apodosis'입니다)에 $post 변수가 정의되어 있습니다. 생성하려는 것과 동일한 이름을 가진 게시물/페이지가 있는 경우 $post는 기존 항목의 데이터로 채워집니다(배열이 아닌 객체로, 그러나 절대적으로 필요한 경우 변경할 수 있음). 이 변수는 제목이 고유한지 여부를 테스트하는 데 사용됩니다. 다음 두 줄은 이 기능을 확장하려는 경우 매우 유용하기 때문에 포함시켰습니다. 이에 대한 예는 기존 게시물이 이미 존재하는 경우 이를 업데이트하는 것입니다.
다음은 'admin_head' 후크에 추가될 중첩 함수입니다. 여기있어;
function hbt_create_post() {
$post_data = array(
'post_title' => wp_strip_all_tags( POST_NAME ),
'post_content' => POST_CONTENT,
'post_status' => POST_STATUS,
'post_type' => POST_TYPE,
'post_author' => POST_AUTH_ID,
'post_category' => POST_CATEGORY,
'page_template' => POST_TEMPLATE
);
wp_insert_post( $post_data, $error_obj );
}간단히 말해서 WordPress의 내장 기능(wp_insert_post)을 사용하여 게시물/페이지를 생성하는 것입니다. $post_data를 매개변수 배열로 채웁니다(여기에서 사용되는 상수를 볼 수 있습니다). 이는 생성되며 오류가 있으면 부울 값 $error_obj를 생성합니다. 참=문제입니다. 거짓=모두 괜찮습니다. 마지막으로 해야 할 일은 관리자 헤드에서 이전 함수를 실행하는 것입니다. 단, 유효성 검사를 통과한 경우에만 해당하고 오류 개체를 반환합니다.
if ( ! isset( $post ) ) {
add_action( 'admin_init', 'hbt_create_post' );
return $error_obj;
}엄청난! 이제 멋진 기능을 만들었으니 사용해 보겠습니다!
용법
PostCreator() 함수를 포함하고 실행하기만 하면 됩니다.
이는 기본값을 사용하여 실행되지만 사용자 정의 기능을 원한다면 어떻게 될까요? 그런 다음 매개변수를 사용합니다.
PostCreator(
'TITLE',
'POST TYPE',
'POST CONTENT',
'POST CATEGORY',
'TEMPLATE FILE NAME',
'AUTHOR ID NUMBER',
'POST STATUS'
);이러한 모든 옵션에서 아포스트로피 사용에 주의하세요. 아포스트로피(매개변수 자체를 둘러싼 문자 제외)를 사용하려면 앞에 역슬래시를 붙여야 합니다. 예;
PostCreator( 'Alex\'s Post' );TITLE 매개변수는 문자열 값을 허용합니다. HTML 태그가 제거되었습니다.
POST TYPE 매개변수는 예를 들어 post 유형의 슬러그를 허용합니다. '게시물' 또는 '페이지'. 사용자 정의 게시물 유형이 지원됩니다.
PostCreator( 'Alex\'s Post', 'page' );POST CONTENT'는 문자열 값을 허용합니다. 생성된 게시물/페이지의 내용이 됩니다. 여기서는 HTML이 허용됩니다.
PostCreator( 'Alex\'s Post', 'page', 'The force is strong with this one…' );POST CATEGORY는 정수 배열을 허용합니다. 정수는 게시물/페이지에 귀속된 카테고리의 ID에 해당합니다.
PostCreator( 'Alex\'s Post', 'page' , 'The force is strong with this one…' , array( 1, 2 ) );TEMPLATE FILE NAME은 새 페이지의 원하는 페이지 템플릿을 정의하는 문자열 값입니다. 이는 페이지에만 작동합니다. 형식은 다음과 같습니다. '파일_이름.php'.
PostCreator(
'Alex\'s Post',
page',
'The force is strong with this one…',
array( 1, 2 ) ,
'fullwidth_page.php'
);AUTHOR ID NUMBER는 저자 ID의 정수값입니다.
PostCreator(
'Alex\'s Post',
'page',
'The force is strong with this one…',
array( 1, 2 ) ,
'fullwidth_page.php',
'1'
);POST STATUS를 사용하면 생성된 게시물/페이지의 상태를 정의할 수 있습니다. 기본적으로 '게시'되어 있습니다.
사용 가능한 옵션 [ '초안' | '게시' | '보류 중'| '미래' | '비공개' | 맞춤 등록 상태 ]
PostCreator(
'Alex\'s Post',
'page',
'The force is strong with this one…',
array( 1, 2 ) ,
'fullwidth_page.php',
'1',
'publish'
);마무리
WordPress는 매우 강력한 도구이지만 때때로 다루기 힘들 수 있습니다. 이 간단한 내용이 도움이 되기를 바랍니다. 아마도 그 과정에서 한두 가지를 배울 수 있을 것입니다. 이 기사에서 이미 수행한 작업을 PHP 클래스로 변환하여 더 많은 기능과 안정성을 추가할 다음 기사를 계속 지켜봐 주시기 바랍니다. 미리보기를 보려면 Github의 코드인 PostController를 확인하세요.
궁금한 점이 있으면 아래 댓글 섹션에 문의하세요.
