Table post của Wordpress hoạt động như thế nào?

Bài viết này chúng ta sẽ tìm hiểu table hoạt động nhiều nhất Wordpress, đó là table posts.

Wordpress cơ bản, sử dụng ở mức phổ thông thì chỉ cần làm 1 tuần là xong. Vì vậy, Kawaiicode sẽ không nói về những cách sử dụng Wordpress phổ thông mà sẽ đi sâu vào phần lập trình như hàm, luồng xử lý, database… Bài viết này chúng ta sẽ tìm hiểu table hoạt động nhiều nhất Wordpress, đó là table posts.

Lưu ý: nếu hình quá khó nhìn, các bạn có thể download về để xem rõ hơn. Kawaiicode xin lỗi vì bất tiện này.

Tại sao phải xem bài viết này?

  • Khi cần sao lưu database.
  • Khi cần giảm dung lượng database.
  • Khi cần chuyển Wordpress sang Framework khác.

Đây là table wp_posts của Wordpress 4.9.8. Kawaiicode sẽ gọi tắt wp_posts là posts.

Wordpress kế thừa wp_post inherit

Sau khi cài đặt Wordpress, trong menu bài viết, Wordpress sẽ có bài viết cho sẵn là "Hello world!" Table của bạn sẽ như thế này.

Wordpress kế thừa wp_post inherit Wordpress kế thừa wp_post inherit

Trong database, bài viết "Hello world!" có cột post_status là "publish" (Xuất bản). Kế đến là bài viết "Sample Page" cũng có trạng thái là "publish".

Kết luận: khi tạo page (một trang mới) hay post (bài viết), chúng đều được tạo trong table wp_post và lấy ra các dữ liệu có post_status là "publish".

Tiếp theo, chúng ta thử làm 2 việc: sửa bài viết cũ và tạo bài viết mới.

Vào bài viết "Hello world!" có sẵn, sửa nội dung lại để xem table posts có gì.

Wordpress kế thừa wp_post inherit Wordpress kế thừa wp_post inherit

Table posts đã tạo thêm 2 dòng mới chứa posts_content là nội dung vừa sửa. Đáng lưu ý: post_status là inherit (kế thừa).

Tiếp theo, chúng ta thử tạo bài viết mới. Điểm đáng lưu ý là khi tạo bài viết, nút Update chuyển thành nút Publish.

Wordpress kế thừa wp_post inherit Wordpress kế thừa wp_post inherit

Chúng ta thấy dữ liệu tạo thêm 2 dòng cho bài viết mới. Cột post_status ghi là publish.

Kết luận: publish là bài viết khi được tạo ra lần đầu tiên. Những lần update kế tiếp, Wordpress sẽ tạo ra 1 dòng mới kế thừa từ publish gốc. Đó là lý do Wordpress có điểm yếu là database dễ bị phình to sau một thời gian sử dụng.

Xem thêm: tất cả các loại Post Status

Đến đây, sẽ có 2 câu hỏi lớn xuất hiện: - Làm sao để lấy page/post với bản inherit mới nhất? - Làm sao để xóa những bản inherit cũ? Hãy để ý cột quan trọng là post_parent. post_parent là id của bài viết mà nó kế thừa. Tiếp theo, để ý cột post_type có 3 loại là page, post và revision (sửa đổi)

Wordpress kế thừa wp_post inherit Wordpress kế thừa wp_post inherit

Chúng ta dự đoán câu SQL:

1 Lấy tất cả id có post_type là "page" và post_status là "publish"
2 Với mỗi id, tạo vòng lặp lấy inherit cuối cùng có post_parent bằng id.
- Kết quả là chúng ta có mảng chứa tất cả inherit cuối cùng của mỗi publish.

Câu SQL lấy tất cả id của bài viết publish.

SELECT `ID` FROM `wp_posts`
WHERE `post_status` LIKE 'publish'
AND `post_type` LIKE 'post'

Câu SQL lấy inherit cuối cùng của bài viết publish đó. Thêm biến vào kết quả của `post_parent` để tạo vòng lặp

SELECT * FROM `wp_posts`
WHERE `post_status` LIKE 'inherit'
AND `post_parent` = 1
ORDER BY `ID` DESC LIMIT 1

Câu SQL xóa bớt các bản inherit cũ để giảm tải dung lượng. Trước đó, bạn nên tạo nhiều bản inherit để thử nghiệm.

DELETE FROM `wp_posts`
WHERE `post_status` LIKE 'inherit'
AND `post_parent` = 1
ORDER BY `ID` ASC LIMIT 1

Nghĩa là bạn xóa dòng đầu tiên trong số các dòng inherit của bài viết này. Hãy mở bài viết của bạn lên xem có vấn đề gì không. Kết quả là không. Bản cập nhật mới nhất vẫn hiện ra ngoài trang web.