WordPress의 사용자 지정 데이터베이스 테이블: 1부

게시 됨: 2022-06-27

이 기사 시리즈에서는 플러그인을 사용하거나 사용하지 않고 WordPress에서 사용자 지정 데이터베이스 테이블을 만드는 방법을 살펴보겠습니다.

사용자 지정 데이터베이스 테이블을 사용해야 하는 시기와 이유는 무엇입니까?

대부분의 경우 WordPress를 설치할 때 생성되는 기본 WordPress 데이터베이스 테이블만 있으면 됩니다. 이 테이블에는 게시물 유형 및 관련 메타 데이터와 같은 모든 종류의 정보가 포함되어 있습니다. 그렇다면 맞춤형 데이터베이스 테이블이 필요한 이유는 무엇입니까?

이는 WordPress에서 사용되는 일반 정보를 벗어나는 데이터로 작업할 때 자체적으로 발생합니다. 따라서 데이터베이스에 정보를 저장해야 하는 플러그인을 구축할 때 사용자 정의 테이블에 데이터를 배치할 수 있습니다. 이것이 WooCommerce와 같은 플러그인에 고유한 사용자 정의 테이블이 있는 것을 볼 수 있는 이유입니다.

Pressidium으로 웹사이트 호스팅

60일 환불 보장

계획 보기

정보를 저장하는 더 깔끔한 방법일 뿐만 아니라 별도의 테이블을 사용하면 사용된 쿼리가 불필요한 데이터의 행과 행을 검색할 필요가 없기 때문에 성능을 향상시키는 데 도움이 될 수 있습니다. 대신에 필요한 정보를 보다 빠르고 효율적으로 찾을 수 있는 '올바른' 테이블로 안내할 수 있습니다. 이것은 데이터베이스 테이블이 증가하기 시작할 때 매우 중요해집니다.

WordPress 사용자 정의 데이터베이스 테이블 생성

학생 목록을 구성하는 데 도움이 되는 간단한 플러그인을 만들고 싶다고 가정해 보겠습니다. 실제로 이와 같은 간단한 작업은 사용자 정의 테이블을 전혀 사용할 필요가 없음을 의미합니다. 사용자 정의 포스트 유형은 작업을 완벽하게 수행합니다.

그러나 이 예의 경우 이러한 종류의 데이터는 사용자 지정 테이블의 이론을 설명하는 데 적합하므로 이를 사용하여 실행하겠습니다. 참고: 기본적인 PHP 및 mySQL 지식이 있다고 가정합니다.

시작하기

시작하려면 이름, 나이, 이메일 및 고유 ID에 대한 열이 있는 '학생' 데이터베이스 테이블을 만듭니다. 작업을 완료하기 위해 사용자 정의 플러그인을 만들어 이를 수행할 것입니다.

참고: 사용자 정의 플러그인을 만드는 방법에 아직 익숙하지 않은 경우 이 자습서를 재개하기 전에 사용자 정의 WordPress 플러그인 구축에 대한 가이드를 확인하십시오!

플러그인 파일 생성

플러그인 폴더에 "my-custom-db-tables"라는 폴더를 만들고 그 안에 다음 코드를 포함하는 "my-custom-db-tables.php"라는 파일을 만듭니다.

 <?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { // THE CODE } register_activation_hook(__FILE__, 'create_the_custom_table');

우리가 한 것은 WordPress가 플러그인을 인식할 수 있도록 플러그인 정보를 도입한 것입니다. 분명히, create_the_custom_table() 함수가 될 데이터베이스에 테이블 스키마를 추가하는 함수도 필요합니다.

대부분의 경우 이 기능은 한 번만 실행하면 되며 이상적으로는 플러그인이 활성화될 때 실행됩니다. 따라서 워드프레스에서 제공하는 register_activation_hook()을 사용하여 플러그인 활성화 시 함수가 실행되도록 했습니다.

테이블의 구조 정의

물론 플러그인을 활성화해도 함수가 아직 비어 있기 때문에 아무 일도 일어나지 않습니다. 이제 실제로 테이블을 생성하기 위해 이 코드를 입력해 보겠습니다.

 <?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $table_name = $wpdb->prefix . 'students'; $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'create_the_custom_table');

이제 잠시 멈춰 이 코드로 무엇을 했는지 살펴보겠습니다.

먼저 데이터베이스와 통신하는 전역 $wpdb WordPress 클래스를 사용하여 테이블 접두사를 가져옵니다. wp-config.php 파일에 정의된 것과 동일한 접두사이며 사용자 정의 테이블에서도 사용하는 것이 좋습니다. 또한 나중에 쿼리에서 설정하기 위해 $charset_collate 변수에 저장하여 현재 데이터 정렬을 상속합니다.

다음 단계는 원하는 스키마를 올바르게 얻기 위해 sql 쿼리에서 테이블의 구조를 정의하는 것입니다. 우리가 말했듯이, 각각에 대해 올바른 유형의 데이터가 있는 id, 이메일, 이름 및 나이 열.

 $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;";

다음으로, 우리는 upgrade.php 파일을 require_once 합니다. 바로 뒤에 오는 dbDelta 기능을 사용하기 위해서는 필수입니다. WordPress에서 데이터베이스 테이블을 생성하려면(또는 기존 테이블을 새 구조로 업데이트하려면) dbDelta 함수를 사용해야 합니다.

참고: 이 함수는 SQL 쿼리를 직접 실행하는 대신 지정된 SQL 문을 기반으로 테이블을 생성하거나 업데이트하여 데이터베이스를 수정하는 데 사용됩니다. $queries 매개변수를 사용하여 사용자 정의 테이블의 체계를 전달할 수 있습니다.

이제 플러그인을 활성화하고 데이터베이스를 확인하면 테이블이 생성된 것을 볼 수 있습니다.

이제 wp-admin/includes/upgrade.php 파일 내부를 dbDelta() 가 SQL 문에서 정보를 검색하기 위해 preg_match() 함수를 사용한다는 것을 알 수 있습니다. 때문에 편집 시 주의가 필요합니다. 공식 문서는 이에 대한 자세한 정보를 제공하지만 아래 핵심 사항을 강조했습니다.

  • SQL 문에서 각 필드를 고유한 줄 에 넣어야 합니다.
  • PRIMARY KEY 단어와 기본 키 정의 사이에 두 개의 공백 이 있어야 합니다.
  • 동의어 INDEX 대신 KEY 키워드를 사용해야 하며 하나 이상의 KEY를 포함해야 합니다.
  • KEY 뒤에는 공백 하나 , 키 이름, 공백, 필드 이름이 있는 여는 괄호, 닫는 괄호가 차례로 와야 합니다.
  • 기본 키가 아닌 다른 키에는 이름을 지정해야 합니다. 예를 들어:
 ... PRIMARY KEY (id), KEY age (age) ...
  • 필드 이름 주위에 아포스트로피나 ​​역따옴표를 사용 하면 안 됩니다.
  • 필드 유형은 모두 소문자여야 합니다.
  • CREATE TABLE 및 UPDATE와 같은 SQL 키워드는 대문자 여야 합니다.
  • 예를 들어 id 열의 int(11)과 같이 길이 매개변수를 허용하는 모든 필드 의 길이를 지정 해야 합니다.

또한 데이터베이스에 테이블이 이미 존재하는지 여부를 확인하지 않았다는 것을 눈치채셨을 수도 있습니다. 그것은 dbDelta 가 우리를 위해 그것을 해주기 때문입니다. 업데이트 쿼리에 대해 걱정할 필요가 없습니다. 테이블을 생성할 뿐만 아니라 동일한 이름의 테이블이 이미 존재하는지 확인하고 존재하는 경우 테이블을 생성하지 않습니다. 필요한 경우에만 기존 테이블 구조를 업데이트합니다.

이 시리즈의 향후 기사에서 더 자세히 다룰 것입니다.

기능 및 확장성

그렇다면 플러그인이 비활성화되거나 제거되면 어떻게 됩니까? 이상적으로는 플러그인이 비활성화되거나 삭제되는 경우 데이터베이스에서 이 테이블을 삭제할지 여부를 선택할 수 있는 관리자 옵션이 있어야 합니다.

또한 조만간 플러그인을 변경해야 한다는 사실을 거의 확실히 알게 될 것입니다(개선하거나 버그를 해결하기 위해). 데이터를 저장하는 방식을 변경하거나, 테이블에 열을 추가하거나, 디자인을 변경하고 싶을 수 있습니다. 즉, 가능한 한 확장 가능하고 변경 사항에 적응할 수 있는 방식으로 플러그인을 빌드해야 합니다.

이 시리즈의 다음 기사에서는 이러한 주제를 자세히 살펴보고 이를 수행하는 방법을 보여드리겠습니다. 곧 확인 할게!