Kết nối với cơ sở dữ liệu bằng tập tin wordpress wp-config


8

Làm cách nào tôi có thể kết nối với cơ sở dữ liệu bằng tệp wp-config.php?

Tôi đang cố gắng làm cho tập lệnh trở nên thân thiện hơn với Wordpress và tôi cần kết nối với cơ sở dữ liệu, nhưng không cài đặt tập lệnh làm plugin.

Về cơ bản tôi có trên kịch bản của mình

$host = "xxxxxxxxxxx"; //database location
$user = "xxxxxxxxxxx"; //database username
$pass = "xxxxxxxxxxx"; //database password
$db_name = "xxxxxxxx"; //database name

//Database Connection
$link = mysql_connect($host, $user, $pass);
mysql_select_db($db_name);

Tập lệnh không thể được cài đặt dưới dạng plugin (có thể giúp mọi việc dễ dàng hơn), vì vậy tôi cần kết nối với cơ sở dữ liệu bằng wp-config.php hiện có khi cài đặt ... Bạn có ý tưởng nào không ???

Cảm ơn trước

Chỉnh sửa và làm rõ

1- Tôi cần sử dụng wp-config.php, không cần sửa đổi. 2- Tập lệnh sẽ được đặt tại www.example.com/script/ 3- Nó không thể được thực hiện như một plugin vì cốt lõi của tập lệnh yêu cầu phải được truy cập công khai mà không có bất kỳ màn hình đăng nhập nào nhảy xung quanh. 4- Câu hỏi của tôi về cơ bản là làm thế nào để kết nối với cơ sở dữ liệu bằng tệp wp-config.php bằng cách sửa đổi tập lệnh ở trên.


1
Vui lòng giải thích tại sao chính xác nó không thể là plugin.
kaiser

Bởi vì tập lệnh yêu cầu phải được truy cập công khai, không phải ở phía quản trị viên (tập lệnh sẽ không hoạt động trên bất kỳ thư mục nào như wp-content / plugin vì màn hình đăng nhập có thể đi qua).
dùng983248

Tôi nghĩ rằng bạn có thể muốn chỉnh sửa câu hỏi của bạn để nói những gì bạn muốn làm với kịch bản của bạn. Khá nhiều thứ có thể là một plugin :)
Stephen Harris

Xác thực IPN cho Paypal, Xem, nó không hoạt động với tôi khi thực hiện nó từ thư mục Plugins, nhưng có từ một thư mục bên ngoài toàn bộ cài đặt Wordpress
user983248

Câu trả lời:


10

Sử dụng định nghĩa các bộ người dùng trong wp-config:

mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

EDIT : Vì tập lệnh của bạn nằm ngoài môi trường Wordpress, điều bạn muốn làm là khởi tạo nó trước khi sử dụng định nghĩa trong wp-config.

require_once('./path/to/the/wp-config.php');
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

1
Mà bạn đã nói rằng nó hiện không hoạt động trong câu hỏi của riêng bạn. Sẽ không hạ thấp, nhưng vui lòng đảm bảo rằng câu trả lời của bạn thực sự hiệu quả và cho thấy những gì OP làm sai. Cảm ơn! :) Btw: Chào mừng bạn đến với WPSE và đừng để sự thúc đẩy nhỏ bé đó ngăn cản bạn trả lời các câu hỏi khác. Trả lời luôn được đánh giá cao.
kaiser

Kết nối đến cơ sở dữ liệu hoạt động. Vấn đề trong câu hỏi của tôi là trừu tượng hóa chức năng gọi nó ra một tệp bên ngoài. Các giá trị tôi đang sử dụng ở đây được xác định được đặt trong wp-config.phpđó bạn sử dụng để thiết lập Wordpress. Bạn đã ít nhất thử nó trước khi cho rằng nó không hoạt động?
akamaozu

Đây là một chút ngoài câu hỏi ban đầu
user983248

Bạn đã thực sự thử nó chưa? Tôi đã có cùng một vấn đề chính xác mà bạn gặp phải (kết nối với cơ sở dữ liệu) và tôi đã giải quyết nó bằng cách sử dụng định nghĩa được đặt bởi wp-config (như bạn yêu cầu) . Biến duy nhất bạn cần là $ db_name, vì tất cả phần còn lại đã có trong môi trường WP nhờ wp-config.php. Miễn là môi trường Wordpress được tải, bạn có toàn quyền truy cập vào định nghĩa. chỉnh sửa: Tập lệnh của bạn có nằm ngoài môi trường Wordpress không?
akamaozu

Có, vui lòng đọc bản chỉnh sửa cuối cùng của tôi và cảm ơn vì đã dành thời gian
user983248

3

Bạn có thể biến tập lệnh của mình thành một phần của bài đăng WordPress, chỉ cần sử dụng $wpdbđối tượng được cung cấp bởi chính WordPress. Đối $wpdbtượng đã thiết lập kết nối cơ sở dữ liệu và bạn có thể sử dụng nó để thực hiện bất kỳ hoạt động cơ sở dữ liệu nào: chèn, cập nhật, truy vấn, v.v ... Đây là phương pháp thích hợp hơn để thực hiện công cụ DB trong WordPress vì bạn không phải mở bất kỳ kết nối cơ sở dữ liệu bổ sung nào .

Dưới đây là một ví dụ đơn giản để lấy các bài đăng trong tương lai:

$posts = $wpdb->get_results("SELECT ID, post_title FROM wp_posts WHERE post_status = 'future' AND post_type='post' ORDER BY post_date ASC LIMIT 0,4");

Kiểm tra bài viết này để biết thêm thông tin: http://wp.smashingmagazine.com/2011/09/21/interacting-with-the-wordpress-database/


1
Khi tôi xóa liên kết khỏi câu trả lời của bạn, tôi không có thông tin về giải pháp thực tế sẽ là gì, ngoài một gợi ý $wpdbcó thể thực hiện các tác vụ cơ sở dữ liệu cơ bản. Bạn có vui lòng cải thiện câu trả lời của bạn để thể hiện một số ví dụ cơ bản? Cảm ơn.
kaiser

Bài báo ở đó có một mô tả rất chi tiết về $wpdbđối tượng, vì vậy tôi không muốn cắt và dán nhiều văn bản ở đó. Nhưng về cơ bản, nếu tập lệnh của bạn là một phần của WordPress, bạn có thể sử dụng $wpdbđối tượng để chạy các truy vấn cơ sở dữ liệu như thế này: $posts = $wpdb->get_results("SELECT ID, post_title FROM wp_posts WHERE post_status = 'future' AND post_type='post' ORDER BY post_date ASC LIMIT 0,4"); Người đặt câu hỏi đã làm rõ sau đó rằng anh ta không muốn biến nó thành plugin, vì vậy câu trả lời của tôi là bây giờ ít liên quan hơn, vì vậy tôi quyết định để nó như vậy.
obaranovsky

Hãy luôn luôn đặt bất kỳ thông tin một nhu cầu vào câu hỏi. Bình luận được làm sạch thường xuyên. Dù sao, tôi đọc câu trả lời khác và câu hỏi một lần nữa và -1 cả hai. Cho đến bây giờ, câu hỏi ban đầu vẫn giống như một nỗ lực để hack / lây nhiễm một trang web và câu trả lời khác là chống lại thực tiễn tốt nhất trong mỗi dòng.
kaiser

Đây là giải pháp tốt hơn theo ý kiến ​​của tôi. Việc sử dụng các chức năng WordPress tích hợp luôn được ưu tiên hơn. Sau khi tìm kiếm trong đối tượng $ wpdb, nó sẽ trở nên rõ ràng.
dùng3135691
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.