it-swarm-vi.tech

Làm thế nào làm được

Tôi đã tạo một số bảng bổ sung cho plugin tôi đang phát triển và cần thêm chỉ mục vào các bảng này.

Cách WordPress để làm điều này là gì?

Sử dụng dbDelta() dường như không hoạt động và tôi không thấy bất kỳ lỗi nào trong nhật ký.

9
Milk

Bạn có thể thực thi tùy ý Các câu lệnh SQL với wpdb :: query () , bao gồm Báo cáo định nghĩa dữ liệu, ví dụ:.

function
create_index ()
{
    global $wpdb ;

    $sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;

    $wpdb->query ($sql) ;

    return ;
}

Lưu ý:Bởi vì $wpdb->query() có thể thực thi tùy ý SQL, nếu câu lệnh bạn chuyển đến nó chứa ANYnhập của người dùng, thì bạn nên sử dụng wpdb :: ready () để bảo vệ chống lại các cuộc tấn công SQL Injection.

Nhưng điều này đặt ra câu hỏi: làm thế nào bạn tạo các bảng dành riêng cho plugin của mình? "Thủ công" hay lập trình? Nếu lập trình, bạn đã không sử dụng $wpdb->query()? Nếu bạn đã thực hiện "thủ công", thì bạn thực sự nên tạo các bảng (và chỉ mục của chúng) khi kích hoạt plugin.

Xem câu trả lời tuyệt vời cho câu hỏi WPSE khác này để biết cách nối vào kích hoạt plugin (và/hoặc hủy kích hoạt và gỡ cài đặt) để thực hiện những việc như tạo bảng riêng tư.

Sử dụng dbDelta, trên đầu trang của PRIMARY KEY, bạn có thể bao gồm Word KEY để tạo chỉ mục cho các cột khác:

Bạn phải sử dụng khóa Word KEY thay vì từ đồng nghĩa INDEX và bạn phải bao gồm ít nhất một KEY.

Ví dụ từ lược đồ.php trong lõi:

CREATE TABLE $wpdb->termmeta (
  meta_id bigint(20) unsigned NOT NULL auto_increment,
  term_id bigint(20) unsigned NOT NULL default '0',
  meta_key varchar(255) default NULL,
  meta_value longtext,
  PRIMARY KEY  (meta_id),
  KEY term_id (term_id),
  KEY meta_key (meta_key($max_index_length))
) $charset_collate;

Nguồn: codex - Tạo bảng bằng plugin

3
froger.me