Tempat menyimpan file PHP yang dibuat oleh plugin / tema

12

Ada kasus-kasus di mana plugin atau tema perlu membuat file php di suatu tempat yang nantinya bisa memasukkannya. Misalnya plugin captcha, atau semacam sistem templating seperti ranting / smarty (Dalam situasi saya ini adalah mesin templat sederhana untuk koleksi widget).

Di mana seharusnya file ini dibuat?

Satu-satunya tempat yang bisa saya pikirkan adalah wp-content/uploads/, tapi itu tidak terdengar benar :)

Jadi apakah ada tempat yang aman di mana Anda dapat membuat file, dan tidak khawatir tentang itu dihapus di WordPress / plugin / pembaruan tema?

Salah satu solusinya bisa dengan membuat tema anak / direktori di direktori tema / plugin ...

onetrickpony
sumber

Jawaban:

5

Anda tidak dapat mengandalkan akses tulis di plugin atau direktori tema, jadi wp_upload_dir () adalah satu-satunya direktori yang mungkin.
Tetapi saya benar-benar ragu bahwa ada kebutuhan untuk menyimpan informasi dalam file baru. Jika templat dibuat oleh pengguna, simpan dalam opsi dan parsing konten dengan fungsi plugin reguler Anda (misalnya dengan mengganti placeholder dengan strtr()).

fuxia
sumber
ya, itu bagus untuk mengganti variabel (saya punya sesuatu seperti itu sekarang). Tetapi jika Anda juga ingin mengizinkan pengguna untuk menggunakan tag bersyarat seperti IF atau loop objek, Anda perlu menulis kode php ...
onetrickpony
5

Saat bekerja pada plugin Wordpress, saya menemukan pertanyaan Anda. Saya juga pertama kali berpikir untuk membuat file sementara untuk menyimpan beberapa data yang dibuat oleh plugin saya. Namun, dengan memberikan sedikit pemikiran, pendekatan ini terasa aneh bagi saya karena Anda tidak ingin memiliki data sementara tergeletak di satu server jika Anda mencoba skala menggunakan sekelompok server.

Jadi saya mencari lagi dan tampaknya solusi yang valid untuk masalah seperti itu adalah Wordpress Transients API yang memungkinkan Anda untuk menyimpan data dalam database dengan tanggal kedaluwarsa. Tentu saja masalah Anda masih memerlukan file yang di-cache secara lokal, misalnya jika terlalu besar untuk basis data, tetapi setidaknya saya sarankan untuk melihat opsi ini juga :-)

Sebi
sumber
3

Saya hanya bisa memikirkan beberapa alasan bagus mengapa plugin perlu membuat file. Salah satunya adalah mencadangkan opsi rumit yang dapat diekspor dan diunduh pengguna untuk pindah ke situs baru. Yang lainnya adalah plugin sitemap.

Jika plugin Anda memiliki file templat yang dapat dikustomisasi pengguna, Anda harus memberikan opsi kepada pengguna untuk memindahkan file yang dikustomisasi ke direktori tema saat ini sehingga ketika plugin Anda diperbarui, file itu tidak akan ditimpa. Anda dapat mencoba memuat file dari direktori tema terlebih dahulu kemudian kembali ke direktori plugin Anda.

Gravity Forms menyimpan formulir yang diunggah dalam foldernya sendiri di dalam unggahan. W3 Total Cache menggunakan konten-wp, redirect login menggunakan metode yang saya jelaskan di atas.

Chris_O
sumber
1

Jika Anda harus membuat file (seperti file sementara untuk Plugin CAPTCHA), Anda harus menggunakan \wp-content\uploads\(atau direktori khusus seperti \wp-content\plugin-slug-files\).

Sebagian besar kode khusus lainnya harus benar-benar disimpan dalam Database.

Chip Bennett
sumber
1
dan eval()itu? tidak mungkin ...
onetrickpony
Apa yang perlu Anda lakukan eval()?
Chip Bennett
pikirkan smarty misalnya. Katakanlah Anda membuat widget dan Anda ingin pengguna memiliki kemampuan untuk menyesuaikan output sesuai keinginan mereka. Jadi, Anda menambahkan textarea di opsi widget di mana pengguna dapat menulis sendiri template seperti smarty untuk widget itu. Template itu perlu dikompilasi, dan cara terbaik untuk melakukannya adalah dengan membuat file PHP dan memasukkannya ke dalam widget.
onetrickpony
Kedengarannya seperti bentangan yang cukup besar dari penggunaan yang dimaksudkan dari pilihan Widget / Widget ...
Chip Bennett
1
Tentu tidak. Tetapi IMHO jika pengguna membutuhkan banyak fleksibilitas dalam membuat Widget khusus, maka pengguna harus menulis Plugin khusus, atau menambahkan kode Widget khusus ke file functions.php Theme miliknya. Mengapa memiliki Plugin, yang menciptakan Widget, yang memungkinkan pengguna membuat Widget lain?
Chip Bennett
1

Saya selalu menyarankan autoloader yang kompatibel dengan PSR-0 dan folder library yang hanya berfungsi.

Beberapa pengguna WP mungkin menembak Anda saat itu tetapi mungkin Anda tidak fokus pada pengguna ini, jadi ini bisa menjadi pilihan. Terutama jika Anda mendapatkan lebih banyak dan lebih spesifik lib vendor.

hakre
sumber