Wordpress TẠO BẢNG NẾU KHÔNG TỒN TẠI
Trong bài viết này, chúng tôi sẽ cho bạn biết về một số biến thể của sự cố với lỗi “bảng không tồn tại” và cách khắc phục lỗi này Show
DUNG DỊCH DUNG DỊCH DUNG DỊCH Nếu bạn vẫn còn một số câu hỏi, hãy liên hệ với chúng tôi qua bộ phận hỗ trợ nội bộ hoặc kiểm tra xem sự cố của bạn đã được giải quyết trên diễn đàn của chúng tôi chưa /* Plugin Name: Demo Plugin Plugin URI: https://shwetadanej.com/ Description: A simple way to create custom database tables and it's CRUD operations from WordPress admin panel Version: 1.0.0 Author: Shweta Danej Author URI: https://shwetadanej.com/ Text Domain: demo-plugin */ /** * Add function on plugin activation hook */ register_activation_hook(__FILE__, 'sd_plugin_activation'); /** * Callback function of plugin activation hook * This will check if website is multisite or not, if yes then loop through it and create table for each website * * @return void */ function sd_plugin_activation() { $db_created = get_option("sd_db_created"); if (!$db_created) { global $wpdb; $table1 = $wpdb->prefix . 'sd_tbl_1'; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); $charset_collate = $wpdb->get_charset_collate(); $table1_query = "CREATE TABLE IF NOT EXISTS " . $table1 . " ( id int(11) NOT NULL AUTO_INCREMENT, user_id int(11) NOT NULL, date date NOT NULL, time time NOT NULL, PRIMARY KEY id (id) )$charset_collate;"; dbDelta($table1_query); $table2 = $wpdb->prefix . 'sd_tbl_2'; $table2_query = "CREATE TABLE IF NOT EXISTS " . $table2 . " ( id int(11) NOT NULL AUTO_INCREMENT, question text NOT NULL, answer varchar(50) NOT NULL, PRIMARY KEY id (id) )$charset_collate;"; dbDelta($table2_query); update_option("sd_db_created", true); } } Phản ứng của bạn là gì? +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 Facebook Twitter Bạn đã bao giờ tự hỏi cần những gì để tạo một bảng tùy chỉnh trong WordPress hay tại sao bạn lại muốn hoặc cần? . May mắn thay cho chúng tôi, WordPress đủ linh hoạt để chúng tôi không buộc phải đưa mọi nhu cầu của mình vào các giải pháp làm sẵn đi kèm với nó Là một ứng dụng PHP phụ thuộc vào MySQL, chúng tôi cũng có tùy chọn tạo các bảng của riêng mình trong cơ sở dữ liệu để đáp ứng nhu cầu của chúng tôi chính xác hơn. Đôi khi điều gì có thể là một giải pháp hoàn hảo cho MVP hoặc 1. 0 có thể không phải là lựa chọn đúng đắn khi phần mềm phát triển Trong bài viết này, chúng tôi sẽ hướng dẫn quy trình tạo bảng tùy chỉnh, cũng như quy trình nâng cấp để khởi động Gặp lệnh đăng nhậpLà một nhà phát triển trong không gian WordPress, một trong những điều tôi thực sự thích là đóng góp cho các dự án nguồn mở của riêng mình. Một trong những thứ nổi tiếng nhất trong số này (nếu bạn tính sao GitHub) là dự án Lệnh đăng nhập WP CLI của tôi, đây là gói dành cho WP-CLI cho phép bạn tạo liên kết đăng nhập “ma thuật” cho trang web của mình. Nếu bạn là khách hàng của Delicious Brains, bạn có thể đã thấy một liên kết như thế này trong một số email chúng tôi gửi đi; . Điều này không chỉ siêu tiện dụng cho khách hàng của chúng tôi mà loại quy trình làm việc này còn có thể giúp tiết kiệm thời gian tuyệt vời trong quá trình phát triển Gần đây tôi đã bắt đầu suy nghĩ lại về một số khía cạnh của gói để chuẩn bị cho phiên bản chính tiếp theo, điều này khiến tôi phải xem xét lại vị trí và cách thức lệnh lưu trữ dữ liệu của nó trong WordPress Trong tương lai, chúng tôi sẽ sử dụng dự án này làm ví dụ về cơ sở mã có thể hưởng lợi từ việc sử dụng bảng tùy chỉnh. Chúng tôi sẽ không đi sâu vào gói, nhưng sử dụng nó như một ví dụ thực tế cho ngữ cảnh Để TẠO BẢNG hay để TẠO BẢNG?Trước khi chúng tôi bắt đầu tạo bảng tùy chỉnh, điều quan trọng là phải xem xét liệu đây có phải là giải pháp phù hợp hay không cho tình huống duy nhất của bạn Một cách để tiếp cận điều này là so sánh lược đồ lý tưởng của bạn (cấu trúc dữ liệu của bạn sẽ có trong các bảng tùy chỉnh mơ mộng của bạn) và lược đồ có sẵn do WordPress cung cấp Nếu bạn không đặc biệt quen thuộc với bối cảnh của cơ sở dữ liệu WordPress mặc định, bạn có thể dành một phút để bắt kịp tốc độ với Hướng dẫn dành cho nhà phát triển cơ bản của Iain về cơ sở dữ liệu WordPress Lược đồ của bạn có phù hợp về mặt khái niệm với mô hình của Bài đăng không? . e. Mô hình dữ liệu của bạn có hoặc cần tiêu đề, nội dung chính, được tạo hoặc sửa đổi theo dấu thời gian hay sên không? . Bản thân WordPress sử dụng các loại bài đăng cho những thứ mà bạn có thể chưa bao giờ nghĩ tới, chẳng hạn như các mục menu điều hướng và bộ thay đổi ảnh chụp nhanh tùy biến Mô hình dữ liệu của bạn có phù hợp hơn với lược đồ khóa-giá trị không? . Siêu dữ liệu người dùng, bài đăng, thuật ngữ và nhận xét, tạm thời, tùy chọn và API bộ đệm đối tượng phục vụ mục đích này (và đó là không tính nhiều trang) Vấn đề với các bài đăng, siêu dữ liệu và các chiến lược kiên trì WordPress được tạo sẵn khác là lược đồ đã được sửa. Một tùy chọn chỉ có một cột để lưu trữ giá trị. Điều tương tự cũng xảy ra với tất cả các loại meta, tạm thời và bộ đệm. Để lưu trữ một giá trị không nguyên thủy như một mảng, chúng tôi buộc phải tuần tự hóa nó hoặc đơn giản là chia giá trị thành nhiều khóa (i. e. nhiều hàng trong cơ sở dữ liệu). Có lẽ một trong những lợi ích chính của việc sử dụng bảng tùy chỉnh là chúng ta không cần phải tuần tự hóa dữ liệu nữa. Sắp xếp theo thứ tự là OK để lưu trữ, nhưng làm giảm đáng kể khả năng truy vấn hiệu quả của chúng tôi. Sử dụng bảng của riêng bạn cho phép bạn thiết kế lược đồ tốt nhất cho nhu cầu của mình. Điều này mang lại cho bạn sự tự do hoàn toàn trong việc truy vấn dữ liệu của mình và có thể cực kỳ mạnh mẽ Tạo một bảng tùy chỉnhKhi tạo một bảng mới, điều quan trọng là phải có được lược đồ ngay lần đầu tiên vì điều này có thể gây khó khăn cho việc thay đổi sau này. Lược đồ giống như bản thiết kế cho bảng. Chúng ta cần xác định từng cột, cũng như bất kỳ thuộc tính nào có thể áp dụng cho cột đó. Đối với Lệnh đăng nhập, chúng tôi sẽ cần các cột sau
Tạo một bảng mới trong cơ sở dữ liệu được sử dụng bởi WordPress cũng đơn giản như viết câu lệnh SQL để tạo nó, sau đó chuyển bảng đó vào hàm 1. Mặc dù không bắt buộc phải sử dụng, nhưng hàm này được khuyến nghị khi thực hiện các thay đổi đối với cơ sở dữ liệu vì nó kiểm tra cấu trúc bảng hiện tại, so sánh nó với cấu trúc bảng mong muốn và thêm hoặc sửa đổi bảng nếu cần
Lưu ý rằng bạn thường nên sử dụng 2 khi tham chiếu tên bảng trong cơ sở dữ liệu WordPress. Tiền tố này do người dùng có thể định cấu hình và thường được xác định trong 3 của bạn. Chúng tôi đang sử dụng 4 trong trường hợp này vì chúng tôi chỉ tạo một bảng duy nhất cho tất cả thông tin đăng nhập cli (như người dùng). Khi cài đặt nhiều trang, 2 sẽ chứa ID blog trong tiền tố cho trang hiện tại (i. e. 6, 7, v.v. ) trong đó 4 sẽ luôn giống như trang web chính (i. e. 9) bất kể trang web hiện tại. Lượt cài đặt trên một trang web 4 và 1 sẽ luôn giống nhau. Nếu bảng tùy chỉnh của bạn sẽ chứa dữ liệu dành riêng cho trang web, bạn nên sử dụng 1 để đảm bảo bảng được tạo cho mọi trang con trên nhiều trangHàm 1 cũng yêu cầu câu lệnh SQL mà bạn chuyển cho nó. Đây là những điều quan trọng cần xem xét vì nó sẽ khiến SQL hợp lệ khác không thực hiện được quá trình phân tích cú pháp và xác thực của hàmCẢNH BÁO. KHÔNG NHÌN TRỰC TIẾP VÀO CHỨC NĂNG. () Một vấn đề mà bạn có thể gặp phải khi tạo bảng như tôi đã làm, đó là một lỗi như thế này
Đây là lỗi bạn sẽ gặp phải khi chỉ định độ dài tối đa là 255 cho cột varchar hoặc tinytext. Vì đây là giới hạn về byte nên độ dài tối đa sẽ khác nhau tùy thuộc vào bộ ký tự của bảng. Gary Pendergast (một. k. a. @pento) giải thích trong nguồn
Bây giờ chúng ta đã có mã để tạo bảng tùy chỉnh, chúng ta thực sự chạy nó khi nào và ở đâu? Tạo quy trình nâng cấpQuy trình nâng cấp là một quy trình được thiết kế để cập nhật trạng thái của hệ thống từ phiên bản cũ hơn sang phiên bản mới hơn. Có thể bạn đã quen với màn hình riêng của WordPress nhắc cập nhật cơ sở dữ liệu giữa các bản phát hành chính Quy trình nâng cấp không nhất thiết phải cụ thể để thực hiện một thao tác trên cơ sở dữ liệu, nhưng đây có lẽ là trường hợp sử dụng phổ biến nhất. Nó bao gồm hai phần cơ bản. một trình kích hoạt và (các) quá trình Trình kích hoạt nói chung là một kiểm tra phiên bản đơn giản có thể chạy khi tải hoặc một hook cụ thể, thường là sớm trong một vòng đời yêu cầu nhất định. Lấy phiên bản cơ sở dữ liệu hiện tại của bạn từ cơ sở dữ liệu (Lõi WordPress lưu trữ số phiên bản cơ sở dữ liệu của nó trong tùy chọn 4; không thay đổi điều này), so sánh phiên bản đó với phiên bản của plugin/chủ đề đã tải, v.v. Nếu phiên bản đã lưu nhỏ hơn phiên bản đã cài đặt, hãy tiếp tục quy trình nâng cấp và cập nhật phiên bản cơ sở dữ liệu đã lưu khi hoàn tất. Đây là logic cơ bản nhất nhưng có thể cần kiểm tra thêm khi kiểm soát quy trình nào sẽ chạy tiếp theo nếu bạn có nhiềuChúng tôi sẽ lập mô hình xử lý phiên bản của WordPress bằng tùy chọn của riêng mình và chỉ lưu trữ một số nguyên đơn giản cho phiên bản cơ sở dữ liệu của chúng tôi
Trong đoạn mã trên, việc gọi hàm 5 sẽ chạy bất kỳ bản nâng cấp nào chưa được áp dụng. Hiện tại đây chỉ là một, nhưng cung cấp một nơi để đặt nhiều hơn trong tương laiGọi nâng cấpTầm quan trọng của thời điểm chạy quy trình nâng cấp sẽ phụ thuộc phần lớn vào bản nâng cấp và tác dụng của nó. Điều này đặc biệt quan trọng do tính chất đồng bộ của PHP; . Trong trường hợp này, việc tạo bảng chỉ tốn một lượng thời gian không đáng kể nên bạn không cần phải lo lắng nhiều — nhưng khi nào thì thực hiện? . Mã trong lệnh sẽ được thay đổi để sử dụng bảng mới, vì vậy nếu bản nâng cấp không chạy truy vấn cơ sở dữ liệu để chèn bản ghi vào bảng tùy chỉnh sẽ nổ tung vì không có bảng cho đến khi bản nâng cấp chạy WordPress trên mỗi lần tải 6. Nếu phiên bản cơ sở dữ liệu đã lưu nhỏ hơn phiên bản hiện tại đã xác định (được xác định trong 7) thì bạn sẽ được chuyển hướng đến màn hình nâng cấp ở trên. Hầu hết các plugin không buộc người dùng phải trải qua quy trình chặn như thế này để cập nhật cơ sở dữ liệu, nhưng làm như vậy sẽ cho người dùng cơ hội sao lưu cơ sở dữ liệu của họ trước chẳng hạn. Làm mọi thứ theo cách này cũng yêu cầu mã mới của bạn tương thích ngược với cách cũ. Loại quy trình này cũng có thể chạy hoàn toàn trong nền mà không làm phiền người dùng làm bất cứ điều gìTrong trường hợp này, lớp lệnh đã có phương thức tên là 8 được chạy trước khi đăng nhập mới được tạo. Điều này hiện đang kiểm tra xem plugin máy chủ đồng hành đã được cài đặt chưa và phiên bản của nó có đáp ứng phiên bản theo yêu cầu của lệnh không. Nếu không, thì lệnh sẽ bị lỗi với hướng dẫn về cách cập nhật plugin đã cài đặt (bằng một lệnh khác. ). Đây có vẻ là một nơi hoàn hảo để kiểm tra xem cơ sở dữ liệu đã được cập nhật chưa và nâng cấp nó nếu cầnMột vài nơi khác điều này có thể được chạy là
kết thúc lênBước cuối cùng là cập nhật mã hiện có trong lệnh tải và lưu dữ liệu đã được lưu trữ trước đó trong tạm thời. Vì các hoạt động này đã được cung cấp các phương thức riêng, nên chỉ có một số khối mã cần thay đổi Tôi sẽ không xem qua mọi thay đổi, nhưng đây là cách mã thay đổi để lưu thông tin đăng nhập mới vào cơ sở dữ liệu mới thay vì sử dụng thông tin đăng nhập tạm thời Trước
Sau đó
Bớt tư tưởngWordPress đi kèm với khá nhiều cách để duy trì dữ liệu của chúng tôi. Trong nhiều trường hợp, những điều này là quá đủ và có thể làm được nhiều điều với chúng. Nếu có nhu cầu thay đổi từ giải pháp này sang giải pháp khác, chúng ta có thể viết quy trình nâng cấp để xử lý việc đó Dưới đây là một số trường hợp sử dụng bảng tùy chỉnh có thể là công cụ phù hợp cho công việc
Hãy nhớ rằng lợi ích phải trả giá bằng một số thứ chúng tôi nhận được miễn phí với các giải pháp WordPress được tạo sẵn như hook và bộ nhớ đệm, ngoài công việc cần thiết là tạo và duy trì (các) bảng bổ sung. Tuy nhiên, đừng nhầm lẫn, khi nói đến sức mạnh và tính linh hoạt, sẽ không có gì tốt hơn một lược đồ và API được thiết kế tốt được xây dựng và điều chỉnh theo nhu cầu cụ thể của bạn Plugin hoặc chủ đề của bạn có sử dụng bảng tùy chỉnh không? Mục nhập này đã được đăng trong WP Migrate DB Pro, Cơ sở dữ liệu và được gắn thẻ WordPress, Cơ sở dữ liệu, Phát triển WordPress, Bảng tùy chỉnh Thông tin về các Tác giảEvan MattsonEvan là cựu thành viên của nhóm Delicious Brains. Anh ấy là một Web Artisan và kỹ thuật số chậm chạp với nguồn gốc sâu xa trong PHP và WordPress. Là một người đa ngôn ngữ đầy tham vọng và là sinh viên phát triển phần mềm, anh ấy chấp nhận một cuộc sống không ngừng học hỏi và trau dồi kỹ năng thủ công @aaemnnosttv aaemnnost. TV
|