Bảng tùy chỉnh truy vấn WordPress CHỌN

Trong loạt bài viết này, chúng ta sẽ xem cách chúng ta có thể tạo các bảng cơ sở dữ liệu tùy chỉnh trong WordPress bằng cách tạo plugin của riêng mình

Khi nào và tại sao tôi nên sử dụng bảng cơ sở dữ liệu tùy chỉnh?

Trong hầu hết các trường hợp, các bảng cơ sở dữ liệu WordPress mặc định được tạo khi bạn cài đặt WordPress là tất cả những gì bạn cần. Các bảng này chứa tất cả các loại thông tin, chẳng hạn như các loại bài đăng và dữ liệu meta được liên kết của chúng. Vì vậy, tại sao bạn cần một bảng cơ sở dữ liệu tùy chỉnh?

Chúng trở thành của riêng chúng khi bạn làm việc với cấu trúc dữ liệu khác hoặc phức tạp hơn so với những gì WordPress cung cấp. Vì vậy, bạn có thể muốn đặt dữ liệu vào một bảng tùy chỉnh khi bạn đang xây dựng một plugin cần lưu trữ thông tin trong cơ sở dữ liệu. Đó là lý do tại sao bạn sẽ thấy rằng các plugin như WooC Commerce có các bảng tùy chỉnh của riêng chúng

Bảng tùy chỉnh truy vấn WordPress CHỌN

Lưu trữ trang web của bạn với Pressidium

ĐẢM BẢO HOÀN TIỀN TRONG 60 NGÀY

SEE OUR PLANS

Ngoài việc là một cách lưu trữ thông tin gọn gàng hơn, việc sử dụng các bảng riêng biệt có thể giúp tăng hiệu suất vì mọi truy vấn được sử dụng không phải tìm kiếm qua các hàng và hàng dữ liệu không cần thiết. Thay vào đó, họ có thể được chuyển hướng đến bảng 'đúng' nơi họ có thể tìm thấy thông tin cần thiết một cách nhanh chóng và hiệu quả hơn. Điều này trở nên rất quan trọng khi các bảng cơ sở dữ liệu bắt đầu phát triển

Tạo bảng cơ sở dữ liệu tùy chỉnh WordPress

Giả sử chúng ta muốn xây dựng một plugin đơn giản giúp chúng ta sắp xếp danh sách sinh viên. Trên thực tế, một nhiệm vụ đơn giản như thế này có nghĩa là chúng ta không cần sử dụng bảng tùy chỉnh nào cả. Một loại bài đăng tùy chỉnh sẽ thực hiện công việc một cách hoàn hảo

Tuy nhiên, vì lợi ích của ví dụ này, loại dữ liệu này là hoàn hảo để chứng minh lý thuyết đằng sau các bảng tùy chỉnh, vì vậy chúng tôi sẽ chạy với nó. Ghi chú. Chúng tôi sẽ cho rằng bạn có một số kiến ​​thức cơ bản về PHP và MySQL

Bắt đầu

Để bắt đầu, chúng tôi sẽ tạo bảng cơ sở dữ liệu 'sinh viên' với các cột cho tên, tuổi, email, địa chỉ IP và ID duy nhất. Chúng tôi sẽ làm điều này bằng cách tạo một plugin tùy chỉnh để hoàn thành công việc

GHI CHÚ. Nếu bạn chưa quen với cách tạo plugin tùy chỉnh, hãy xem hướng dẫn của chúng tôi về cách tạo plugin WordPress tùy chỉnh của riêng bạn trước khi tiếp tục hướng dẫn này

Tạo tệp plugin

Chúng tôi sẽ tạo một thư mục có tên “my-custom-db-tables” trong thư mục plugin và bên trong thư mục đó, một tệp có tên “my-custom-db-tables. php” chứa đoạn mã này

Những gì chúng tôi đã làm là giới thiệu thông tin plugin để WordPress sẽ nhận ra plugin. Rõ ràng, bạn cũng sẽ cần một hàm thêm lược đồ bảng vào cơ sở dữ liệu, đó sẽ là hàm create_the_custom_table()

Trong hầu hết các trường hợp, bạn chỉ cần chạy chức năng này một lần, tốt nhất là khi plugin được kích hoạt. Do đó, chúng tôi đã sử dụng register_activation_hook() mà WordPress cung cấp để đảm bảo chức năng chạy khi kích hoạt plugin

Xác định cấu trúc của bảng

Tất nhiên, sẽ không có gì xảy ra nếu chúng tôi kích hoạt plugin, vì chức năng này vẫn trống. Vì vậy, hãy bắt đầu và điền mã này vào để thực sự tạo bảng

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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');

Bây giờ, hãy tạm dừng một chút để kiểm tra xem chúng ta đã làm gì với đoạn mã này

Trước hết, chúng tôi lấy tiền tố bảng bằng cách sử dụng lớp WordPress

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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
0 toàn cầu giao tiếp với cơ sở dữ liệu. Đó là cùng một tiền tố được xác định trong tệp
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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
1 và bạn cũng nên sử dụng nó trong bảng tùy chỉnh của mình. Chúng tôi cũng sẽ kế thừa đối chiếu hiện tại bằng cách lưu nó vào biến
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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
2 để đưa nó vào truy vấn sau này

Bước tiếp theo của chúng tôi là xác định cấu trúc của bảng trong truy vấn SQL để có được đúng lược đồ mong muốn. Như chúng tôi đã nói, một cột id, email, tên, tuổi và địa chỉ IP với loại dữ liệu phù hợp cho từng cột

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

Tiếp theo, chúng tôi

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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
3 tệp
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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
4. Điều đó là bắt buộc để sử dụng chức năng
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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
0 xuất hiện ngay sau. Khi ở trên WordPress, để tạo bảng cơ sở dữ liệu (hoặc cập nhật các bảng hiện có sang cấu trúc mới), chúng ta cần sử dụng hàm dbDelta

GHI CHÚ. Thay vì thực hiện trực tiếp một truy vấn SQL, hàm này được sử dụng để sửa đổi cơ sở dữ liệu bằng cách tạo hoặc cập nhật bảng, dựa trên các câu lệnh SQL được chỉ định. Sử dụng tham số

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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
1 của nó, chúng ta có thể chuyển sơ đồ của bảng tùy chỉnh của mình

Bây giờ nếu bạn kích hoạt plugin và kiểm tra cơ sở dữ liệu của mình, bạn sẽ thấy bảng đã được tạo

Bảng tùy chỉnh truy vấn WordPress CHỌN

Bây giờ, nếu bạn đọc bên trong tệp

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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
2, bạn sẽ nhận thấy rằng
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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
3 sử dụng hàm preg_match() để lấy thông tin từ câu lệnh SQL. Vì vậy, bạn cần cẩn thận khi chỉnh sửa nó. Tài liệu chính thức cung cấp thêm thông tin về vấn đề này nhưng chúng tôi đã nhấn mạnh những điểm chính bên dưới

  • Bạn phải đặt mỗi trường trên một dòng riêng trong câu lệnh SQL của mình

Bảng tùy chỉnh truy vấn WordPress CHỌN

  • Bạn phải có hai khoảng cách giữa các từ PRIMARY KEY và định nghĩa về khóa chính của bạn
  • Bạn phải sử dụng từ khóa KEY thay vì từ đồng nghĩa INDEX và bạn phải bao gồm ít nhất một KEY
  • KEY phải được theo sau bởi một khoảng trắng, sau đó là tên khóa, sau đó là dấu cách, sau đó là dấu ngoặc đơn mở với tên trường, sau đó là dấu ngoặc đơn đóng
  • Các KHÓA khác ngoài chính, nên được đặt tên. Ví dụ
...
PRIMARY KEY  (id),
KEY age (age)
...
  • Bạn không được sử dụng bất kỳ dấu nháy đơn hoặc dấu gạch ngược nào xung quanh tên trường
  • Các loại trường phải là chữ thường
  • Các từ khóa SQL, như CREATE TABLE và UPDATE, phải viết hoa
  • Bạn phải chỉ định độ dài của tất cả các trường chấp nhận tham số độ dài, chẳng hạn như int(11) của cột id

Bạn cũng có thể nhận thấy rằng chúng tôi đã không kiểm tra xem bảng đã tồn tại trong cơ sở dữ liệu chưa. Đó là bởi vì

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(2) NULL,
	ip_address varchar(15),
	PRIMARY KEY  (id),
	KEY ip_address (ip_address)
    ) $charset_collate;";
 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');
0 làm điều đó cho chúng tôi. Không cần phải lo lắng về các truy vấn cập nhật. Nó không chỉ tạo bảng mà còn kiểm tra xem một bảng có cùng tên đã tồn tại chưa và nếu có, nó sẽ không tạo bảng. Nó sẽ chỉ cập nhật cấu trúc bảng hiện có nếu được yêu cầu

Vì vậy, những gì đến tiếp theo?

Điều gì sẽ xảy ra nếu bạn hủy kích hoạt và xóa plugin?

Hơn nữa, sẽ chẳng ích gì khi phát triển một plugin để lưu trữ sinh viên nếu khu vực quản trị thiếu chức năng đó. Một số trang quản trị cũng nên được tạo cho phép bạn thêm sinh viên và xem danh sách của họ ở định dạng bảng

Trong các bài viết tiếp theo của loạt bài này, chúng tôi sẽ đào sâu vào các chủ đề này và chỉ cho bạn cách bạn có thể thực hiện điều này. Kiểm tra lại sớm