Có bắt buộc phải sử dụng tiền tố $ wpdb-> trong các bảng tùy chỉnh không


16

Xin lỗi nếu câu hỏi này là tầm thường. Tôi mới bắt đầu phát triển plugin trong WordPress.

Trong tất cả các hướng dẫn tôi đã tìm thấy điều này: trong khi tạo các bảng tùy chỉnh, $wpdb->prefixđược sử dụng.

Thí dụ:

$table_name = $wpdb->prefix . "liveshoutbox";

Câu hỏi của tôi:

Có bắt buộc phải sử dụng $wpdb->prefixkhông? Điều gì xảy ra nếu tôi không sử dụng tiền tố cho các bảng tùy chỉnh của mình?

Câu trả lời:


22

Nó là bắt buộc, mặc dù nó không được thi hành.

Hãy xem xét kịch bản khi hai trang Wordpress đã được thiết lập trong cùng một cơ sở dữ liệu. Một với tiền tố wp_và một với tiền tố wp2_. Nếu bạn cài đặt plugin của mình trong cả hai trang web có tiền tố, các bảng đã tạo của bạn sẽ wp_liveshoutboxdành cho trang đầu tiên và wp2_liveshoutboxcho trang thứ hai. Nhưng nếu bạn bỏ qua tiền tố, cả hai trang web sẽ sử dụng cùng một bảng có tên liveshoutboxvà toàn bộ sự việc sẽ tan vỡ.


12
Nói cách khác, nó là bắt buộc . :)
Hết

4

Hãy xem xét những điều sau đây:

Plugin của bạn được sử dụng trên mạng wordpress, sử dụng các tiền tố bảng khác nhau cho mỗi trang web. Plugin của bạn có thể chạy đồng thời trên 836 trang web khác nhau, tất cả trong cùng một cơ sở dữ liệu. wp_385677_liveshoutboxlà một tên bảng hoàn toàn hợp lý.

Plugin của bạn được cài đặt bởi người dùng có một số khái niệm về bảo mật và đã thay đổi tiền tố bảng để chặn các bot cố gắng tiêm select * from wp_users vào hệ thống. Ngay cả khi họ tìm thấy một lỗ hổng mới, nó sẽ không hoạt động.

Sử dụng các phím tắt như tên bảng mã hóa cứng là một cách tốt để đưa sản phẩm lên và chạy, nhưng không phải là một cách tốt để phát hành nó. trong một thời gian rất ngắn, plugin sẽ có một đống bình luận "không hoạt động" về nó, trong trường hợp xấu nhất bạn sẽ phá vỡ trang web của người khác.

Nếu tôi có một truy vấn phức tạp và tôi không muốn đối phó với nỗi đau của việc viết, 'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id ....bạn có thể sử dụng thay thế. Ví dụ:

$query = 'select foo from %table% left join %meta% on %table%.ID = %meta%.meta_id ... ';

$change = array (
    '%table%' => $wpdb->prefix . '_mytable',
    '%meta%'  => $wpdb->prefix . '_mytablemeta'
    );


$sql = str_replace( array_keys( $change ), array_values( $change ), $query );

$results = $wpdb->get_results( $sql );

Wordpress liên tục thay đổi. Những gì "công việc" hôm nay có thể không hoạt động vào ngày mai. Đó là lý do tại sao có các hàm API. Các nhà phát triển Wordpress sẽ đảm bảo hành vi API công khai nhất quán (hoặc họ sẽ khấu hao chức năng). Nếu bạn bắt đầu sử dụng các cuộc gọi phương thức nội bộ vì nó 'nhanh hơn theo cách đó', nó thường sẽ quay lại cắn bạn. Có rất ít phím tắt thực sự trong phần mềm - chúng chỉ chuyển công việc cần thiết từ nay sang sau và như thẻ tín dụng của bạn "sau này" thường có giá cao hơn.


Vì điều này đề cập đến nhiều trang, một yếu tố bổ sung cần lưu ý mà tôi không thấy trong câu trả lời là việc sử dụng $wpdb->prefix . "users"sẽ dẫn đến một bảng không hợp lệ trong bản cài đặt nhiều trang. Đó là bởi vì nó sẽ gắn tiền tố db vào bảng. Tuy nhiên, multisite chỉ sử dụng một bảng người dùng, vì tất cả người dùng là người dùng mạng. Vì vậy, nếu truy vấn liên quan đến các bảng wp_users hoặc wp_usermeta, bạn phải sử dụng $wpdb->usershoặc $wpdb->usermetatương ứng.
butlerblog
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.