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

  1. Plugin đã được cài đặt không chính xác

    Trong trường hợp này, không thể tạo bảng trong cơ sở dữ liệu

    Truy cập vào cơ sở dữ liệu bị giới hạn bởi cài đặt của nó

  2. DUNG DỊCH

    • Xóa các hạn chế truy cập vào cơ sở dữ liệu trong khi cài đặt plugin
    • Kiểm tra quyền truy cập cho người dùng, từ đó WordPress kết nối với cơ sở dữ liệu
    • Kiểm tra tất cả các cài đặt làm việc với cơ sở dữ liệu trong wp-config. tập tin php. Cũng có thể đặt ra các hạn chế
  3. Cơ sở dữ liệu đã được thay đổi thủ công
  4. DUNG DỊCH

    • Nếu không có bản sao lưu cơ sở dữ liệu để bạn có thể khôi phục – bạn cần cài đặt lại plugin
  5. Cơ sở dữ liệu đã được chuyển sang máy chủ khác hoặc được khôi phục không chính xác từ bản sao lưu

    Đã xảy ra lỗi trong quá trình thay thế/khôi phục và bản sao lưu chưa được xử lý hoàn chỉnh

    Không có tất cả dữ liệu của các bảng trong bản sao lưu

  6. DUNG DỊCH

    • Khôi phục chính xác cơ sở dữ liệu từ bản sao lưu

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ập

Là 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
Hãy dành thời gian của bạn;

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ỉnh

Khi 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

  • public_key – Khóa được sử dụng trong URL ma thuật
  • private_key – Khóa bí mật để xác thực đăng nhập
  • user_id – ID của người dùng mà thông tin đăng nhập ma thuật sẽ xác thực
  • created_at – Ngày và giờ đăng nhập được tạo
  • WordPress database error Specified key was too long; max key length is 767 bytes for query
    
    0 – Ngày và giờ đăng nhập hết hạn

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

WordPress database error Specified key was too long; max key length is 767 bytes for query
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

global $wpdb;
$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE `{$wpdb->base_prefix}cli_logins` (
  public_key varchar(255) NOT NULL,
  private_key varchar(255) NOT NULL,
  user_id bigint(20) UNSIGNED NOT NULL,
  created_at datetime NOT NULL,
  expires_at datetime NOT NULL,
  PRIMARY KEY  (public_key)
) $charset_collate;";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);

Lưu ý rằng bạn thường nên sử dụng

WordPress database error Specified key was too long; max key length is 767 bytes for query
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
WordPress database error Specified key was too long; max key length is 767 bytes for query
3 của bạn. Chúng tôi đang sử dụng
WordPress database error Specified key was too long; max key length is 767 bytes for query
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,
WordPress database error Specified key was too long; max key length is 767 bytes for query
2 sẽ chứa ID blog trong tiền tố cho trang hiện tại (i. e.
WordPress database error Specified key was too long; max key length is 767 bytes for query
6,
WordPress database error Specified key was too long; max key length is 767 bytes for query
7, v.v. ) trong đó
WordPress database error Specified key was too long; max key length is 767 bytes for query
4 sẽ luôn giống như trang web chính (i. e.
WordPress database error Specified key was too long; max key length is 767 bytes for query
9) bất kể trang web hiện tại. Lượt cài đặt trên một trang web
WordPress database error Specified key was too long; max key length is 767 bytes for query
4 và
/*
 * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
 * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
 * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
 */
$max_index_length = 191;
// wordpress/wp-admin/includes/schema.php
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
/*
 * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
 * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
 * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
 */
$max_index_length = 191;
// wordpress/wp-admin/includes/schema.php
1 để đảm bảo bảng được tạo cho mọi trang con trên nhiều trang

Hàm

WordPress database error Specified key was too long; max key length is 767 bytes for query
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àm

CẢNH BÁO. KHÔNG NHÌN TRỰC TIẾP VÀO CHỨC NĂNG. ()

Wordpress TẠO BẢNG NẾU KHÔNG TỒN TẠI

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

WordPress database error Specified key was too long; max key length is 767 bytes for query

Đâ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

/*
 * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
 * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
 * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
 */
$max_index_length = 191;
// wordpress/wp-admin/includes/schema.php

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ấp

Quy 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

Wordpress TẠO BẢNG NẾU KHÔNG TỒN TẠI

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

/*
 * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
 * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
 * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
 */
$max_index_length = 191;
// wordpress/wp-admin/includes/schema.php
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ều

Chú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

namespace WP_CLI_Login;

function upgrade_200($wpdb) {
    global $wpdb;

    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE `{$wpdb->base_prefix}cli_logins` (
      public_key varchar(191) NOT NULL,
      private_key varchar(191) NOT NULL,
      user_id bigint(20) UNSIGNED NOT NULL,
      created_at datetime NOT NULL,
      expires_at datetime NOT NULL,
      PRIMARY KEY  (public_key)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
    $success = empty($wpdb->last_error);

    return $success;
}

function upgrade() {
    $saved_version = (int) get_site_option('wp_cli_login_db_version');

    if ($saved_version < 200 && upgrade_200()) {
        update_site_option('wp_cli_login_db_version', 200);
    }
}

Trong đoạn mã trên, việc gọi hàm

/*
 * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
 * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
 * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
 */
$max_index_length = 191;
// wordpress/wp-admin/includes/schema.php
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 lai

Gọi nâng cấp

Tầ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

/*
 * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
 * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
 * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
 */
$max_index_length = 191;
// wordpress/wp-admin/includes/schema.php
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
/*
 * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
 * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
 * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
 */
$max_index_length = 191;
// wordpress/wp-admin/includes/schema.php
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à

/*
 * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
 * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
 * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
 */
$max_index_length = 191;
// wordpress/wp-admin/includes/schema.php
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ần

Một vài nơi khác điều này có thể được chạy là

  • Khi cài đặt plugin đồng hành thông qua lệnh đăng nhập
  • Khi kích hoạt plugin đồng hành bằng hook kích hoạt plugin
    Lưu ý móc kích hoạt plugin không được gọi khi plugin được nâng cấp
  • Mọi yêu cầu wp-admin, được nối với hành động
    /*
     * Indexes have a maximum size of 767 bytes. Historically, we haven't need to be concerned about that.
     * As of 4.2, however, we moved to utf8mb4, which uses 4 bytes per character. This means that an index which
     * used to have room for floor(767/3) = 255 characters, now only has room for floor(767/4) = 191 characters.
     */
    $max_index_length = 191;
    // wordpress/wp-admin/includes/schema.php
    
    9 (tương tự như lõi WordPress)
  • Mọi yêu cầu, được nối với các hành động
    namespace WP_CLI_Login;
    
    function upgrade_200($wpdb) {
        global $wpdb;
    
        $charset_collate = $wpdb->get_charset_collate();
    
        $sql = "CREATE TABLE `{$wpdb->base_prefix}cli_logins` (
          public_key varchar(191) NOT NULL,
          private_key varchar(191) NOT NULL,
          user_id bigint(20) UNSIGNED NOT NULL,
          created_at datetime NOT NULL,
          expires_at datetime NOT NULL,
          PRIMARY KEY  (public_key)
        ) $charset_collate;";
    
        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);
        $success = empty($wpdb->last_error);
    
        return $success;
    }
    
    function upgrade() {
        $saved_version = (int) get_site_option('wp_cli_login_db_version');
    
        if ($saved_version < 200 && upgrade_200()) {
            update_site_option('wp_cli_login_db_version', 200);
        }
    }
    
    0 hoặc
    namespace WP_CLI_Login;
    
    function upgrade_200($wpdb) {
        global $wpdb;
    
        $charset_collate = $wpdb->get_charset_collate();
    
        $sql = "CREATE TABLE `{$wpdb->base_prefix}cli_logins` (
          public_key varchar(191) NOT NULL,
          private_key varchar(191) NOT NULL,
          user_id bigint(20) UNSIGNED NOT NULL,
          created_at datetime NOT NULL,
          expires_at datetime NOT NULL,
          PRIMARY KEY  (public_key)
        ) $charset_collate;";
    
        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);
        $success = empty($wpdb->last_error);
    
        return $success;
    }
    
    function upgrade() {
        $saved_version = (int) get_site_option('wp_cli_login_db_version');
    
        if ($saved_version < 200 && upgrade_200()) {
            update_site_option('wp_cli_login_db_version', 200);
        }
    }
    
    1

kết thúc lên

Bướ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

private function persistMagicUrl(MagicUrl $magic, $endpoint, $expires)
{
    set_transient(
        self::OPTION . '/' . $magic->getKey(),
        json_encode($magic->generate($endpoint)),
        ceil($expires)
    );
}

Sau đó

private function persistMagicUrl(MagicUrl $magic, $endpoint, $expires)
{
    global $wpdb;

    $data = $magic->generate($endpoint);

    $wpdb->insert("{$wpdb->base_prefix}cli_logins", [
        'public_key' => $magic->getKey(),
        'private_key' => $data['private'],
        'user_id' => $data['user'],
        'created_at' => gmdate('Y-m-d H:i:s'),
        'expires_at' => gmdate('Y-m-d H:i:s', $data['time'] + ceil($expires)),
    ]);
}

Bớt tư tưởng

WordPress đ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

  • Dữ liệu để lưu trữ không phù hợp về mặt khái niệm để lưu trữ dưới dạng bài đăng, thuật ngữ, người dùng, tùy chọn hoặc siêu dữ liệu
  • Dữ liệu không thể được tuần tự hóa cho “khả năng truy vấn”
  • Số lượng hàng cần thiết trong một bảng lõi có thể dễ dàng đạt tới 10 nghìn hoặc hơn
  • Dữ liệu sẽ phải tuân theo các truy vấn phức tạp cần được tùy chỉnh cao để thực hiện

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 Mattson

Evan 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

  • Ajax nói.

    Lựa chọn của tôi sẽ là sử dụng Pods. https. // nhóm. io/docs/learning/what-are-advanced-content-types/

  • Robert nói.

    Người không phải là lập trình viên ở đây… Tôi đã xếp một số chức năng khá phức tạp lên trên WordPress bằng Bộ công cụ. https. // các loại wp. com/ — thành phần Chế độ xem đặc biệt hữu ích trong việc cho phép tôi nhúng chức năng tùy chỉnh trên các Trang mà tôi có thể tạo kiểu bằng CSS và các mã ngắn dữ liệu do plugin tạo ra

    • Charles Horwood nói.

      Tôi đã sử dụng bộ công cụ trong một vài năm, bây giờ tôi xây dựng mọi thứ thành plugin hoặc chủ đề bằng OOP, nó giúp cuộc sống dễ dàng hơn. -). Hiện tại mình đang xây dựng hệ thống diễn đàn đầy đủ dựa trên đối tượng WP Query và Post, tiến triển tốt, Nên là nền tảng nhanh vì chưa thấy bbpress hay bạn thân sử dụng nhiều nên cơ sở dữ liệu tùy chỉnh lưu trữ tất cả các bản ghi diễn đàn được thay đổi bởi key forum_type với forum, . Tôi lạc đề lol, hướng dẫn của bạn về các bảng tùy chỉnh, một trong những bảng tốt nhất mà tôi đã tìm thấy cho đến nay, bạn làm việc tuyệt vời 🙂

      • Lesley Evensen nói.

        Charles – tò mò về cách tiếp cận của bạn. Mình cũng đang cần xây dựng hệ thống diễn đàn, hỗ trợ các tài nguyên chia sẻ trên diễn đàn. Làm cách nào để bạn xử lý việc đưa dữ liệu diễn đàn của mình lên các trang/bài đăng hoặc bạn chỉ có giao diện người dùng tùy chỉnh của riêng mình thay vì các trang/bài đăng?

  • richalt2 nói.

    Chúng tôi lưu trữ các ứng dụng tình nguyện, có cấu trúc bộ chọn, hộp kiểm, dòng văn bản và trường văn bản đầy đủ. Tình nguyện viên có thể truy xuất và chỉnh sửa ứng dụng của họ. Quản trị viên của chúng tôi có thể tìm kiếm tình nguyện viên. Vì vậy, tôi đã luôn sử dụng một số bảng tùy chỉnh. Mà có vẻ phù hợp với tiêu chí của bạn. Vào thời điểm tôi thiết lập tính năng này, khoảng 10 năm trước, WordPress không cung cấp nhiều trợ giúp để tích hợp cập nhật và truy xuất bảng độc lập. Có vẻ như không ai trong cộng đồng có bất kỳ lời khuyên nào cả. Vì vậy, tôi đã sử dụng Trang php tùy chỉnh vào thời điểm đó. Các trang này hoạt động không thay đổi trong suốt 8 năm phát hành WP vừa qua, vì vậy không thể hoàn toàn tệ được. Tôi vừa trải qua một bản cập nhật và chuyển đổi tất cả chức năng cập nhật và truy xuất cơ sở dữ liệu ứng dụng của mình sang plugin WordPress. Cảm thấy sạch sẽ hơn một chút. Tôi vẫn muốn nói rằng không có nhiều lời khuyên về cách tích hợp quyền truy cập đó vào một DB độc lập. Tôi nên nói thêm rằng chúng tôi có khoảng 5000 tình nguyện viên đăng nhập trên trang web của chúng tôi

    • Evan nói.

      10 năm trước là một thời gian dài trước khi các loại bài đăng tùy chỉnh được giới thiệu nên tôi cho rằng đó là một lựa chọn dễ thực hiện vào thời điểm đó. Có vẻ như nó vẫn hoạt động tốt với bạn, điều này thật ấn tượng sau một thời gian dài. Rất vui khi biết bạn thấy bài viết hữu ích

    • bernhard nói.

      pods (một plugin CPT) đã có từ lâu vì CPT không tồn tại nên nó vẫn có một tính năng gọi là ACT (loại nội dung nâng cao) trong đó dữ liệu được lưu trữ trong các bảng riêng biệt – và nó cung cấp tùy chọn lưu trữ Dữ liệu meta WordPress trong . //bạn bè. vỏ quả. tôi )

  • bernhard nói.

    cũng có thể không phải là một plugin mà là một gói… hiện tại bạn có thể xuất/nhập các cấu hình không thân thiện lắm nhưng có thể sử dụng mã nguồn mở – hoan nghênh các đóng góp ^^

  • BrowserCam nói.

    Đó có phải là một giải pháp tốt nếu chúng tôi ở https. //www. trình duyệtcam. com truy vấn cơ sở dữ liệu trực tiếp mà không cần liên quan đến nhà phát triển PHP và wordpress để tạo bảng mới/tùy chỉnh?

  • Stein Sourcing nói.

    Xin chào Evan Mattson, Cảm ơn bạn rất nhiều vì bài đăng về tạo bảng tùy chỉnh wordpress. Tôi nghĩ rằng, bài đăng này là hữu ích nhất cho nhà phát triển wordpress mới. Tôi thấy bài viết đầy đủ của bạn. Ví dụ đầy đủ tạo câu chuyện wp tùy chỉnh. Cảm ơn Stein & Đối tác https. //www. steinandpartners. com

  • Josh Lewis. nói.

    Có hướng dẫn về cách tạo mối quan hệ giữa hai (2) bảng tùy chỉnh không? . e. Câu đố và câu hỏi với mối quan hệ nhiều-nhiều giữa chúng?

  • Maq Said nói.

    Cảm ơn bạn đã viết bài viết này, điều này thực sự làm tôi suy nghĩ rõ ràng vì tôi đang tìm cách hiểu cách thức hoạt động của WordPress DB. Tôi muốn hỏi câu hỏi tiếp theo, WordPress xử lý bảng xóa như thế nào? . tất cả các thành phần của nó sẽ bị xóa bao gồm cả bảng đã tạo và mỗi khi plugin được kích hoạt và hủy kích hoạt thì chức năng tạo bảng có chồng lên bảng hiện có không? . cảm ơn

    Tại sao TẠO BẢNG nếu không tồn tại?

    Câu lệnh “TẠO BẢNG nếu không tồn tại” rất hữu ích trong việc tạo bảng vì câu lệnh này sẽ không tạo bảng nếu bảng cùng tên đã tồn tại trong cơ sở dữ liệu< . .

    Làm cách nào để tạo bảng cơ sở dữ liệu trong WordPress mà không cần plugin?

    Đầu tiên, trong Tài liệu, nhấp vào nút Chèn ở đầu tài liệu, sau đó di chuột qua tùy chọn bảng và chọn kích thước cho bảng của bạn. Next, while still in Google Docs, enter the information into the table which makes formatting easier, and you won't be able to change the rows and columns later on in WordPress.

    Bạn có thể tạo một bảng trong WordPress không?

    WordPress giúp thêm bảng cực kỳ dễ dàng bằng trình chỉnh sửa khối mặc định của WordPress . Chỉ cần tạo một bài đăng hoặc trang mới hoặc chỉnh sửa một bài đăng hoặc trang hiện có. Khi đã ở trong trình chỉnh sửa nội dung, hãy nhấp vào biểu tượng (+) để thêm một khối mới, sau đó chọn 'Bảng'.

    Có thể tạo bảng mà không cần sử dụng tạo câu lệnh trong MySQL không?

    Trong SQL chuẩn không có cách nào để sử dụng bảng mà không tạo bảng . Có một phím tắt để tạo bảng dựa trên câu lệnh chọn. Tuy nhiên, điều này cũng dựa trên lệnh CREATE TABLE.