2011-06-28 32 views
7

Tôi đã viết một plugin tùy chỉnh cho trang WordPress của tôi dựa trên việc đọc/ghi từ tệp dữ liệu xml trong thư mục plugin. Khi tôi kiểm tra mã PHP chuẩn này để đọc/ghi tệp, nó sẽ cho phép tôi tạo/ghi vào các tệp nằm ở cấp độ wp-admin /, nhưng không phải tệp trong thư mục plugin, mặc dù nó có thể đọc từ cả hai.Viết cho một tập tin từ plugin WordPress của tôi

$file = 'test.xml'; (Can write to this file) 
$file = plugins_url()."/my-plugin/test.xml"; (Can read but not write to this file) 
// Open the file to get existing content 
$current = file_get_contents($file); 
echo $current; 
// Append a new person to the file 
$current .= "<person>John Smith</person>\n"; 
// Write the contents back to the file 
file_put_contents($file, $current); 

tôi nhận được lỗi debug sau:

Warning: file_put_contents(http://localhost/wp_mysite/wp-content/plugins/my-plugin/test.xml) [function.file-put-contents]: failed to open stream: HTTP wrapper does not support writeable connections in /Applications/MAMP/htdocs/wp_mysite/wp-content/plugins/my-plugin/my-plugin.php on line 53

Tôi hiện đang chạy này ra một máy chủ MAMP địa phương, nhưng muốn có một giải pháp mà sẽ cho phép tôi đóng gói và xuất bản các plugin trên bất kỳ máy chủ WordPress . Cách tiếp cận đúng là gì?

Cảm ơn-

Trả lời

10

Không truy cập thông qua HTTP nếu bạn muốn ghi vào tệp. Truy cập trực tiếp thay vì cả đọc và viết vì nó nhanh hơn và phương pháp trực tiếp nhất để truy cập tệp.

Để có được đường dẫn thư mục Plugin cơ sở, sử dụng WP_PLUGIN_DIR liên tục:

$file = 'test.xml'; // (Can write to this file) 
$file = WP_PLUGIN_DIR."/my-plugin/test.xml"; 
//  ^^^^^^^^^^^^^ 

này sẽ khiến bạn không tận dụng HTTP mà không nên được sử dụng ở tất cả vì lý do hiệu suất và vì HTTP không hỗ trợ viết. Nhưng quan trọng nhất, vì nó là một tập tin trên máy chủ bạn có quyền truy cập, truy cập trực tiếp vào nó.

+0

@hakre bất kỳ ý tưởng nào nếu một điều tương tự tồn tại cho các chủ đề? một cái gì đó giống như 'WP_THEME_DIR'> – Blowsie

+2

@Blowsie: Không giống như CONSTANT nhưng một cái gì đó tương tự. Xem ở đây để xem "bức tranh lớn": http://codex.wordpress.org/Determining_Plugin_and_Content_Directories – hakre

Các vấn đề liên quan