웹사이트 검색

PHP로 WordPress 게시물 관리 - 생성 및 업데이트


  1. <스팬>1. PHP를 사용하여 WordPress 게시물 및 페이지 만들기 – 101 튜토리얼
  2. 2. 현재 읽고 있는 내용: PHP로 WordPress 게시물 관리 – 생성 및 업데이트

약속한 대로, 여기에 내 첫 번째 게시물인 'PHP를 사용하여 WordPress 게시물 및 페이지 만들기 – 101 튜토리얼'의 두 번째 부분이 있습니다. 이 기사에서는 강력하고 궁극적으로 신뢰할 수 있는 PHP 래퍼 클래스를 만들기 위해 1부에서 논의한 기본 기능과 이론을 확장하는 방법을 살펴보겠습니다.

언제나 그렇듯이, 저는 단순히 코드를 바로 살펴보고 싶은 분들에게 공감합니다. 내 Github 저장소 중 하나에서 찾을 수 있습니다(이 기사 자체에 직접 붙여넣기에는 약간 길었습니다!).

우리가 달성하고자 하는 것:

  • 완벽하게 기능하고 안정적인 PHP 프로덕션급 프레임워크입니다.
  • 게시물 작성 관리 뿐만 아니라, 기존 게시물 관리 및 업데이트도 가능합니다.
  • 자신의 게시물을 검색하고 조작할 수 있습니다. ID; 제목 또는 슬러그.

이 문서에는 사용 참고 사항과 단계별 가이드라는 2개의 섹션이 있습니다.

더 이상 고민하지 말고 시작해 보세요!

용법

우선, Github의 class.postcontroller.php 파일을 포함했는지, 아니면 해당 파일의 내용을 PHP 문서에 붙여넣었는지 확인하세요. 그것 없이는 작동하지 않습니다! 이 튜토리얼의 후반부에서 이 파일의 코드를 살펴보겠습니다.

다음과 같이 클래스를 인스턴스화합니다.

$Poster = new PostController;

포스트 컨트롤러는 다음과 같이 작동합니다. 관련 기능을 사용하여 게시물 속성을 설정합니다. 그런 다음 게시물을 작성하거나 업데이트합니다. 게시물을 업데이트하려면 먼저 업데이트할 게시물을 검색하여 찾아야 합니다. 충분히 간단하게 들리나요?

속성 설정

제목
게시물의 제목을 설정합니다. 여기에는 HTML이 허용되지 않으며 제거됩니다.

$Poster->set_title( 'The Title' );

유형
이 메소드는 페이지의 게시물 유형을 설정합니다. 포스트 유형의 슬러그를 입력하세요. '게시물'과 '페이지'. 사용자 정의 게시물 유형이 지원됩니다.

$Poster->set_type( 'page' );

콘텐츠
이 메소드는 게시물의 내용을 설정합니다. HTML이 허용됩니다.

$Poster->set_content( '<h1>This is my awesome new post!</h1>' );

저자
게시물 작성자를 설정합니다. 새 저자의 저자 ID를 지정하기만 하면 됩니다. 정수여야 합니다.

$Poster->set_author_id( 12 );

슬러그/'이름'
이것은 게시물의 맞춤 URL 경로입니다(활성화된 경우). 슬러그가 이미 사용 중인 경우 오류가 발생할 수 있으므로 주의하세요. 그래도 어떤 대가를 치르더라도 이를 방지하기 위해 유효성 검사를 포함했습니다. 특수 문자나 HTML은 허용되지 않습니다.

$Poster->set_post_slug( "new_slug" );

템플릿(페이지만)
이 방법을 사용하면 페이지의 템플릿(페이지여야 함)을 설정할 수 있습니다. 다른 게시물 유형에 적용하면 무시되고 오류 배열에 오류가 추가됩니다. 입력 형식은 'php_template_name.php'이며 각 테마마다 고유합니다.

$Poster->set_page_template( 'fullwidth_page.php' );

주
이 메소드는 게시물의 상태를 설정합니다. 사용 가능한 옵션

[ ‘draft’ | ‘publish’ | ‘pending’| ‘future’ | ‘private’ | custom registered status ]
$Poster->set_post_state( "pending" );

만들다

게시물 작성을 위한 최소한의 조건은 제목 설정입니다. 다음 코드를 사용하여 이를 수행할 수 있습니다.

$Poster->set_title( "New Post" );

이를 설정한 후 create 메소드를 실행하면 됩니다.

$Poster->create();

참고: 이 메서드는 동일한 이름을 가진 다른 게시물이 있는지 확인합니다(단지 중복이 발생하지 않는지 확인하기 위해). 따라서 고유한 제목이 필요합니다.

찾다

기존 게시물을 업데이트하려면 먼저 검색 기능을 사용하여 해당 게시물을 찾아야 합니다.

이를 위해 검색 방법을 사용합니다.

$Poster->search( 'SEARCH_BY' , 'DATA' );

이 메소드는 검색할 속성과 검색할 데이터라는 2개의 매개변수를 허용합니다.

제목으로 검색할 수 있습니다.

$Poster->search( 'title' , 'DATA' );

ID로 검색할 수 있습니다.

$Poster->search( 'id' , 'DATA' );

슬러그로 검색할 수도 있습니다.

$Poster->search( 'slug' , 'DATA' );

data 매개변수는 문자열(제목이나 슬러그로 검색하는 경우) 또는 정수(ID로 검색하는 경우)를 허용합니다. 지정된 매개변수로 게시물이나 페이지를 찾을 수 없으면 $errors 배열에 오류가 추가됩니다. 다음 코드를 사용하여 이를 호출하고 표시할 수 있습니다.

$error = $Poster->get_var( 'errors' );
$Poster->PrettyPrint( $error );

업데이트

게시물을 찾으면 새 속성을 할당할 수 있습니다. 속성이 설정된 후 업데이트 메소드를 호출하기만 하면 됩니다.

$Poster->update();

예를 들어, 게시물 1(ID=1)의 제목을 변경하려면 다음 코드를 사용합니다.

$Poster->search( 'id', 1 );
$Poster->set_title( 'New Title' );
$Poster->update();

모든 속성은 이 방법으로 업데이트될 수 있습니다.

변수 검색

정의된 변수를 검색하려면 get_vars 메소드를 사용할 수 있습니다.

$Poster->get_var( 'title' );    // Returns the title (if you have set it)
$Poster->get_var( 'type' );     // Returns the post type (if you have set it)
$Poster->get_var( 'content' );  // Returns the content (if you have set it)
$Poster->get_var( 'category' ); // Returns the category as an array (if set)
$Poster->get_var( 'template' ); // Returns the template (if you have set it)
$Poster->get_var( 'slug' );     // Returns the slug (if you have set it)
$Poster->get_var( 'auth_id' );  // Returns the author id (if you have set it)
$Poster->get_var( 'status' );   // Returns the post's status (if you have set it)
$Poster->get_var( 'errors' );   // Returns the errors array

/** AFTER YOU HAVE EITHER CREATED A POST OR SUCCESSFULLY SEARCHED FOR ONE YOU CAN USE THESE **/

	// Returns the a PHP Object of the post. This can be used to check if the search method was successful
	$Poster->get_var( 'current_post' );

	// Returns the selected post's ID (integer).
	$Poster->get_var( 'current_post_id' );

	// Returns the URL permalink of the selected post
	$Poster->get_var( 'current_post_permalink' );

그게 그거야! 사용법에 대해 궁금한 점이 있으면 여기 댓글로 질문할 수 있습니다. 버그를 발견하면 Github에 알려주세요.

두 번째 부분을 볼 준비가 되셨나요?

클래스 구축: 단계별 가이드

이제 클래스 사용법을 살펴보았습니다. 다시 처음으로 돌아가겠습니다.
우리 클래스는 PostController라고 불릴 것입니다.

class PostController {

. . . class functions go here . . .

}

PHP 클래스에 대해 잘 알지 못하는 분들을 위해 설명하자면, 클래스는 함께 작동하는 함수와 변수의 모음을 포함하는 객체로 정의됩니다. 프레임워크를 만드는 데 사용할 구문과 이론에 대한 자세한 내용은 PHP.net 소개를 확인하세요. 다음 할 일 목록은 우리가 사용할 모든 변수를 선언하는 것입니다.

// Variables for Post Data
public $PC_title;
public $PC_type;
public $PC_content;
public $PC_category;
public $PC_template;
public $PC_slug;
public $PC_auth_id;
public $PC_status = "publish";

// Variables for Post Updating
public $PC_current_post;
public $PC_current_post_id;
public $PC_current_post_permalink;

// Error Array
public $PC_errors;

좋아요, 그러면 이것을 세 개의 블록으로 나누어 보겠습니다. 첫 번째 블록에는 귀하가 지정한 게시물 데이터가 보관됩니다. 이는 게시물을 업데이트하고 생성하는 데 사용되는 데이터입니다. 변수 이름으로 추측할 수 있지만 여기에 저장하려는 데이터 목록이 있습니다.

  1. 제목
  2. 유형(페이지/게시물 등)
  3. 콘텐츠
  4. 카테고리/카테고리
  5. 페이지 템플릿
  6. 강타
  7. 작성자 ID 및
  8. 게시물 상태(예: 게시/초안)

두 번째 블록은 검색 쿼리가 반환할 실제 WordPress 게시물 데이터(또는 생성된 게시물에 대한 데이터)를 보유합니다. '$PC_current_post' 변수는 전체 게시물의 개체를 보유합니다. 여기에는 (중요하게) 위에 나열된 데이터를 포함하여 게시물에 대한 모든 데이터가 보관됩니다. 마찬가지로 Post ID 및 Permalink 변수는 기존 게시물에 대한 데이터를 보유합니다.

세 번째이자 마지막 블록에는 오류 배열이라는 단일 변수만 있습니다. 알려진 '핀치' 지점에서 문제가 발생하면 참조용으로 문제에 대한 메시지가 이 배열에 추가됩니다. 좋은 습관으로 'PC_'를 포함했다는 점에 유의하세요. 변수 이름은 절대 모호해서는 안 됩니다. PC는 'PostController'를 의미합니다. 이를 변경하는 경우 get_var() 함수의 접두사도 변경해야 합니다.

자, 이제 모든 설정이 완료되었으므로 첫 번째 기능을 살펴보겠습니다.

// Creation functions
public function create() {

	if ( isset( $this->PC_title ) ) {

		if ( $this->PC_type == 'page' ) {
			$post = get_page_by_title( $this->PC_title, 'OBJECT', $this->PC_type );
		} else {
			$post = get_page_by_title( $this->PC_title, 'OBJECT', $this->PC_type );
		}

		$post_data = array(
			'post_title'    => wp_strip_all_tags($this->PC_title),
			'post_name'     => $this->PC_slug,
			'post_content'  => $this->PC_content,
			'post_status'   => $this->PC_status,
			'post_type'     => $this->PC_type,
			'post_author'   => $this->PC_auth_id,
			'post_category' => $this->PC_category,
			'page_template' => $this->PC_template
		);

		if ( ! isset( $post ) ) {
			$this->PC_current_post_id        = wp_insert_post( $post_data, $error_obj );
			$this->PC_current_post           = get_post( ( integer ) $this->PC_current_post_id, 'OBJECT' );
			$this->PC_current_post_permalink = get_permalink( ( integer ) $this->PC_current_post_id );
			return $error_obj;
		} else {
			$this->update();
			$this->errors[] = 'That page already exists. Try updating instead. Control passed to the update() function.';
			return FALSE;
		}

	} else {
		$this->errors[] = 'Title has not been set.';
		return FALSE;
	}
}

이 시리즈의 1부: PHP를 사용하여 WordPress 게시물 및 페이지 만들기 – 101 튜토리얼을 읽어보신 분들이라면 이 기능이 익숙하실 것입니다. 이는 이 새로운 설정에 적응한 후 해당 튜토리얼에서 완성된 기능일 뿐입니다. 이 특정 기능에 대한 설명을 읽으려면 파트 1을 확인하는 것이 좋습니다. 기능 자체의 유일한 주요 차이점은 WordPress 헤드에 기능을 추가하는 대신 즉시 실행된다는 것입니다.

빠른 실행을 위해 이 기능은 제목이 설정되었는지 확인합니다(이는 게시물 작성을 위한 최소 요구 사항입니다). 그런 다음 기존 게시물을 제목별로 확인합니다. 게시물이 발견되면 메시지가 오류 배열에 추가되고 제어가 update() 함수로 전달됩니다. 이 제목의 게시물이 없으면 $post_data를 사용하여 새 게시물을 만듭니다. 현재 게시물 변수(및 다른 2개의 데이터 변수)는 이 새 게시물의 데이터를 보유하도록 업데이트됩니다. 방금 작성한 게시물을 확인하는데 좋습니다. 문제가 있는 경우 $errors 배열에 메시지가 추가됩니다.

너무 빠르셨다면 죄송합니다. 약간 혼란스러우시다면 이에 대한 제 101번째 기사를 확인해 보시기 바랍니다.

아직 저와 함께 계시는 분들을 위해 계속 진행하겠습니다.

// SET POST'S TITLE
public function set_title( $name ) {
	$this->PC_title = $name;
	return $this->PC_title;
}

// SET POST'S TYPE
public function set_type( $type ) {
	$this->PC_type = $type;
	return $this->PC_type;
}

// SET POST'S CONTENT
public function set_content( $content ) {
	$this->PC_content = $content;
	return $this->PC_content;
}

// SET POST'S AUTHOR ID
public function set_author_id( $auth_id ) {
	$this->PC_auth_id = $auth_id;
	return $this->PC_auth_id;
}

// SET POST'S STATE
public function set_post_state( $content ) {
	$this->PC_status = $content;
	return $this->PC_status;
} 

이 비트는 매우 간단합니다. create() 및 update() 함수는 모두 지역 변수를 데이터 소스로 사용합니다. 따라서 이 데이터를 설정하는 방법이 필요합니다. 처음 5개의 변수는 위에서 볼 수 있듯이 설정됩니다. '그런데 나머지 3개는요?'라는 질문이 들립니다. 걱정하지 마세요. 여기에 있습니다. 하지만 (신뢰성을 최대화하기 위해) 입력을 확인하기 위한 약간의 검증이 있다는 것을 알게 될 것입니다.

// SET POST SLUG
public function set_post_slug( $slug ) {

	$args = array('name' => $slug);
	$posts_query = get_posts( $args );

	if ( ! get_posts( $args ) && ! get_page_by_path( $this->PC_slug ) ) {

		$this->PC_slug = $slug;
		return $this->PC_slug;

	} else {
		$this->errors[] = 'Slug already in use.';
		return FALSE;
	}

}

// SET PAGE TEMPLATE
public function set_page_template( $content ) {

	if ( $this->PC_type == 'page' ) {
		$this->PC_template = $content;
		return $this->PC_template;
	} else {
		$this->errors[] = 'You can only use template for pages.';
		return FALSE;
	}

}

// ADD CATEGORY IDs TO THE CATEGORIES ARRAY
public function add_category( $IDs ){

	if ( is_array( $IDs ) ) {
		foreach ( $IDs as $id ) {
			if ( is_int( $id ) ) {
				$this->PC_category[] = $id;
			} else {
				$this->errors[] = '<b>' .$id . '</b> is not a valid integer input.';
				return FALSE;
			}
		}
	} else {
		$this->errors[] = 'Input specified in not a valid array.';
		return FALSE;

	}

}

마지막 세 가지는 좀 더 복잡하지만 끔찍한 오류를 피하는 데 매우 중요합니다.

set_post_slug()

set_post_slug() 함수는 매우 주의해야 할 사항입니다. 게시물 슬러그는 기본적으로 게시물의 개별 주소를 생성하기 위해 기본 URL 끝에 추가되는 문자열입니다. 이는 WordPress의 기본 게시물 식별자로도 사용됩니다. 예. 이 게시물의 슬러그는 'manage-wordpress-posts-php-create-update'입니다. 이는 기본 URL인 http://wpexplorer.com/ 끝에 추가되어 이 기사의 고유한 URL인 http://www.wpexplorer.com/manage-를 생성합니다. wordpress-posts-php-create-update/. 두 개 이상의 게시물에 동일한 슬러그(따라서 URL)가 있는 경우 어떤 문제가 발생할지 상상할 수 있을 것입니다. 가능하다면 피하는 것이 가장 좋은 것은 정말 불쾌한 혼란입니다.

포스트 슬러그는 고유해야 합니다

이것이 검증의 이유입니다. 무슨 일이 일어나고 있는지는 함수가 지정된 슬러그가 있는 게시물을 검색한다는 것입니다. 아무 것도 발견되지 않고 그리고 해당 경로가 포함된 페이지가 없으면(본질적으로 이 컨텍스트의 슬러그와 동일) 훌륭합니다! 변수를 설정합니다. 그렇지 않은 경우 $errors 배열에 오류가 추가되고 변수는 설정되지 않습니다(함수는 부울 FALSE를 반환함).

set_page_template() 및 add_category()

set_page_template()은 페이지 템플릿(my_page_template.php 형식)을 페이지에 할당하고 페이지에만 할당합니다. 여기서 유효성 검사는 단순히 게시물 유형이 '페이지'로 설정되었는지 확인합니다. true인 경우 데이터를 저장합니다. 그렇지 않다면 귀찮게하지 마십시오.

add_category()를 사용하면 게시물 카테고리에 정수 배열을 추가할 수 있습니다(숫자 1개만 추가하더라도 여전히 배열에 있어야 함). 정수는 카테고리 ID를 나타냅니다. 유효성 검사는 단순히 지정한 배열을 반복하면서 각 셀에 정수 값이 있는지 확인합니다. 셀에 정수 값이 있으면 마스터 범주 배열에 추가됩니다. 그렇지 않은 경우 무시되고 오류 배열에 오류가 추가됩니다. 멋진! 이제 필요한 모든 변수를 할당할 수 있습니다.

수색

이 튜토리얼의 시작 부분에서 우리는 기존 WordPress 게시물을 업데이트할 수 있는 시스템을 만들고 싶다고 말했습니다. 이를 위해서는 먼저 편집하려는 게시물을 찾아야 합니다. 이를 위해 search() 함수를 사용합니다.

// Search for Post function
public function search( $by, $data ) {

	switch ( $by ) {

	// SEARCH FOR POST USING IT'S ID
	case 'id' :
	
		if ( is_integer( $data ) && get_post( ( integer ) $data ) !== NULL ) {
			$this->PC_current_post           = get_post( ( integer ) $data, 'OBJECT' );
			$this->PC_current_post_id        = ( integer ) $data;
			$this->PC_current_post_permalink = get_permalink( (integer) $data );
			return TRUE;
		} else {
			$this->errors[] = 'No post found with that ID.';
			return FALSE;
		}

	break;

	case 'title' :

		$post = get_page_by_title( $data );

		if ( ! $post ) {
			$post = get_page_by_title( $data, OBJECT, 'post' );
		}

		$id = $post->ID;

		if ( is_integer($id) && get_post( (integer)$id) !== NULL ) {
			$this->PC_current_post           = get_post( (integer)$id, 'OBJECT' );
			$this->PC_current_post_id        = (integer) $id;
			$this->PC_current_post_permalink = get_permalink( (integer) $id );
			return TRUE;
		} else {
			$this->errors[] = 'No post found with that title.';
			return FALSE;
		}

		break;

		// SEARCH FOR POST USING IT'S SLUG
		case 'slug' :
		$args = array(
			'name'          => $data,
			'max_num_posts' => 1
		);
		$posts_query = get_posts( $args );
		if ( $posts_query ) {
			$id = $posts_query[0]->ID;
		} else {
			$this->errors[] = 'No post found with that slug.';
		}

		if ( is_integer($id) && get_post( (integer)$id) !== NULL ) {
			$this->PC_current_post           = get_post( (integer)$id, 'OBJECT' );
			$this->PC_current_post_id        = (integer)$id;
			$this->PC_current_post_permalink = get_permalink((integer)$id);
			return TRUE;
		} else {
			$this->errors[] = 'No post found with that slug.';
			return FALSE;
		}

		break;

		default:

		$this->errors[] = 'No post found.';
		return FALSE;

		break;

	}
}

search() 함수입니다. 저는 PHP Switch 문(다른 형식의 IF 문을 사용하고 있습니다. 이 경우 여러 개의 중첩된 If보다 더 효율적입니다. PHP.net 매뉴얼에서 Switch에 대해 자세히 알아보세요. search() 함수는 2개의 매개변수를 받습니다;

1. '검색 기준' 값
2. 검색할 데이터

위의 코드에서 3가지 '검색 기준' 옵션이 있음을 확인할 수 있습니다. 'id', 'title', 'slug'. 각 항목을 좀 더 자세히 살펴보겠습니다.

ID로 검색

이는 가장 간단한 검색 방법이며 게시물의 정수 ID만 알면 됩니다. 지정된 데이터가 정수인 경우 함수는 내장된 get_post() 함수를 사용하여 WordPress 데이터베이스에 쿼리를 보냅니다. 해당 정수를 가진 게시물이 존재하는 경우 게시물 개체가 반환되어 PC_current_post 변수에 저장됩니다(ID와 영구 링크도 저장됨). 단순한!

제목으로 검색

딱히 설명이 필요 없을 것 같습니다. 아이디로 검색하는 것과 거의 비슷하지만, 제목으로 게시물을 검색하는 것입니다. 동일한 이름을 가진 게시물/페이지가 있는 경우(권장하지 않는 것) 가장 작은 ID를 가진 게시물이 선택됩니다. 동일한 이름을 가진 게시물이 있다는 것을 알고 있는 경우 혼동을 피하기 위해 이 방법을 사용하지 마십시오. 참고: 다음 코드가 표시됩니다.

$post = get_page_by_title( $data );

if ( ! $post ) {
	$post = get_page_by_title( $data, OBJECT, 'post' );
}

이렇게 해야 하는 이유는 get_page_by_title()이 게시물과 페이지 모두에 대한 데이터를 반환할 수 있지만 세 번째 매개변수를 'post'로 지정하지 않으면 페이지만 반환하기 때문입니다.

명백한 내용을 말하려는 것은 아니지만 제목으로 검색하고 동시에 제목을 변경하는 경우 코드는 한 번(처음)만 실행될 수 있다는 점을 알아야 합니다. 그 후에는 404 찾을 수 없음 오류가 반환됩니다.

슬러그로 검색

이것은 게시물을 찾는 훌륭하고 안정적인 방법입니다. 이전에 말했듯이 슬러그는 고유해야 하기 때문에 모호함이 없어야 합니다. '슬러그'가 무엇을 의미하는지 명확하지 않다면 SET_POST_SLUG() 섹션을 확인하세요. 이를 위해 특정 슬러그가 있는 게시물을 찾기 위해 WordPress 게시물 쿼리를 실행하기만 하면 되었습니다. 이 메소드에서 ID를 검색하고 다른 2가지 메소드와 동일한 방식으로 현재 게시물 변수를 설정할 수 있습니다. 제목으로 검색하는 것과 마찬가지로 슬러그를 함께 검색하고 변경하면 문제가 발생합니다. 조심하세요!

업데이트 및 관리

맞습니다! 이제 검색이 끝났으므로 실제 update() 함수로 이동할 수 있습니다.

// Update Post
public function update(){
	if ( isset($this->PC_current_post_id ) ) {

		// Declare ID of Post to be updated
		$PC_post['ID'] = $this->PC_current_post_id;

		// Declare Content/Parameters of Post to be updated
		if ( isset($this->PC_title ) && $this->PC_title !== $this->PC_current_post->post_title ) {
			$PC_post['post_title'] = $this->PC_title;
		}

		if ( isset( $this->PC_type ) && $this->PC_type !== $this->PC_current_post->post_type ) {
			$PC_post['post_type'] = $this->PC_type;
		}

		if ( isset($this->PC_auth_id) && $this->PC_auth_id !== $this->PC_current_post->post_type ) {
			$PC_post['post_author'] = $this->PC_auth_id;
		}

		if ( isset($this->PC_status) && $this->PC_status !== $this->PC_current_post->post_status ) {
			$PC_post['post_status'] = $this->PC_status;
		}

		if ( isset($this->PC_category) && $this->PC_category !== $this->PC_current_post->post_category ) {
			$PC_post['post_category'] = $this->PC_category;
		}

		if ( isset($this->PC_template )
			&& $this->PC_template !== $this->PC_current_post->page_template
			&& ( $PC_post['post_type'] == 'page' || $this->PC_current_post->post_type == 'page' )
		) {
			PC_post['page_template'] = $this->PC_template;
		}

		if ( isset( $this->PC_slug ) && $this->PC_slug !== $this->PC_current_post->post_name ) {
			$args = array('name' => $this->PC_slug);
		}

		if ( ! get_posts( $args ) && !get_page_by_path( $this->PC_slug ) ) {
			$PC_post['post_name'] = $this->PC_slug;
		} else {
			$errors[] = 'Slug Defined is Not Unique';
		}

		if ( isset($this->PC_content) && $this->PC_content !== $this->PC_status->post_content ) {
			$PC_post['post_content'] = $this->PC_content;
		}

		wp_update_post( $PC_post );

	}

	return( $errors );
}

거짓말 안 할게요. 이 부분은 정말 쉽습니다. 기본적으로 업데이트 기능은 8개의 사후 매개변수 중 하나라도 설정되었는지 확인합니다. 그렇다면 wp_update_post()와 호환되는 배열을 생성하고 채웁니다. wp_update_post()를 실행하고 안녕하세요! 일을 잘 했어요. 효율성을 위해 각 변수를 할당하기 전에 간단한 확인을 추가하겠습니다. 변경된 경우에만 업데이트됩니다. 제가 약간 편파적이긴 하지만 아름다운 코드라는 점은 인정해야 합니다!

설정된 값은 WordPress 자체에서 반환된 값과 비교됩니다. 그러면 간단한 비교만 필요합니다. 템플릿과 슬러그 IF 문은 다른 문보다 유효성 검사가 조금 더 많다는 것을 알 수 있습니다. 이에 대한 오류를 필터링하기 위한 유효성 검사가 이미 포함되어 있지만 다시 확인해도 아무런 해가 없습니다! 페이지 템플릿 확인(게시물 유형이 페이지로 설정되어 있는지 확인하는 것)은 단순히 게시물이 아닌 항목에 대한 페이지 템플릿을 설정하려는 시도가 내 버그이기 때문입니다. 과격해서 죄송해요! 반면에 슬러그 검사는 중요한 것입니다! 당신은 정말로 슬러그 충돌을 원하지 않습니다. 이 경우 과잉이라는 것은 없습니다. update()의 경우는 이것이 전부입니다. 마지막으로 몇 가지 유용한 일반 기능이 있습니다.

추가 기능

이제 클래스의 대부분이 작성되었으므로 몇 가지 유용한/시간 절약 기능을 추가하는 것이 항상 좋은 생각입니다. 보세요.

// General functions
public function get_content() {

	if ( isset( $this->PC_current_post->post_content ) ) {
		return $this->PC_current_post->post_content;
	}

}

public function get_var( $name ) {
	$name = 'PC_'.$name;
	if ( isset( $this->$name ) ) {
		return $this->$name;
	}
}

public function unset_all() {
	foreach ( get_class_vars(get_class($this)) as $name => $default ) {
		$this->$name = $default;
	}
}

public function __toString() {
	return 'Use the PrettyPrint function to return the contents of this Object. E.g;<pre>$my_post->PrettyPrintAll();</pre>';
}

public function PrettyPrint($data) {
	echo "<pre>";
	print_r( $data );
	echo "</pre>";
}

public function PrettyPrintAll() {
	echo "<pre>";
	print_r( $this );
	echo "</pre>";

}

빠른 설명;

  • get_content(): 이 함수는 검색한 게시물의 콘텐츠를 반환합니다(이 기능은 WordPress에서 제공하며 사용자가 설정한 것이 아닙니다). 이는 어떤 매개변수도 허용하지 않습니다.
  • get_var( 'var_name' ) : 많은 양의 데이터를 설정하면 때로는 혼란스러울 수 있습니다. 이는 하나의 매개변수, 즉 원하는 변수 이름의 문자열을 허용합니다. 다음은 사용 가능한 'var_name' 목록입니다.
  • '제목' – 귀하가 설정한 게시물 제목입니다.
  • 'type' – 설정한 게시물 유형입니다.
  • 'content' – 귀하가 설정한 콘텐츠입니다.
  • 'category' – 설정한 카테고리(배열 반환)
  • '템플릿' – 설정한 페이지 템플릿입니다.
  • 'slug' – 귀하가 설정한 슬러그입니다.
  • 'auth_id' – 귀하가 설정한 작성자 ID입니다.
  • 'status' – 귀하가 설정한 게시물 상태입니다.
  • 'current_post' – 검색 후 반환된 WP Post 개체입니다.
  • 'current_post_id' – 검색 후 반환된 WP 게시물 ID입니다.
  • 'current_post_permalink' – 검색 후 WP Post의 고유 링크가 반환되었습니다.
  • 'errors' – 오류 배열(매우 유용함)
  • unset_all(): 매개변수가 없습니다. 직업 하나. 클래스 인스턴스에 저장된 모든 데이터를 삭제합니다. 조심하세요.
  • __toString() : 클래스 자체의 인스턴스가 인쇄될 때 실행되는 것입니다. 오류 메시지가 인쇄되었습니다. PrettyPrintAll() 사용을 사용하세요.
// Start new class
$Poster = new PostController();

// Echoes error message
echo $Poster;
  • PrettyPrint(): 이는 'pre' 태그에 개체와 배열을 멋지게 표시하는 유용한 기능입니다. 하나의 매개변수를 취합니다: 'PrettyPrinted'될 데이터입니다.
  • PrettyPrintAll() : 클래스의 전체 인스턴스(모든 변수 포함)를 'PrettyPrints'한다는 점을 제외하면 PrettyPrint()와 동일합니다.

그리고 그것은 마무리입니다!

내 기사를 읽어주셔서 감사합니다. 이 기사가 유용하고 깨달음을 얻었기를 바랍니다!

Github에서 PostController 클래스의 최신 버전인 PostController를 찾을 수 있습니다. 이 튜토리얼이 마음에 드셨다면 공유해주세요! (언급은 @harribellthomas ? ) 크게 잘못될 것입니다. 질문이 있으시면 아래 댓글 섹션에 남겨주세요.