Saya mencoba membuat titik akhir API khusus di WordPress, dan saya perlu mengarahkan permintaan ke halaman virtual di root WordPress ke halaman aktual yang dikirimkan bersama dengan plug-in saya. Jadi pada dasarnya, semua permintaan ke satu halaman sebenarnya dialihkan ke yang lain.
Contoh:
http://mysite.com/my-api.php
=>http://mysite.com/wp-content/plugins/my-plugin/my-api.php
Maksudnya adalah untuk membuat url untuk titik akhir API sesingkat mungkin (mirip dengan http://mysite.com/xmlrpc.php
tetapi untuk mengirim file endpoint API yang sebenarnya dengan plug-in daripada mengharuskan pengguna untuk memindahkan file di sekitar dalam instalasi dan / atau inti hack mereka .
Tusukan pertama saya adalah menambahkan aturan penulisan ulang kustom. Namun, ini punya dua masalah.
- Titik akhir selalu memiliki garis miring. Itu menjadi
http://mysite.com/my-api.php/
- Aturan penulisan ulang saya hanya diterapkan sebagian. Itu tidak akan mengarahkan ke
wp-content/plugins...
, itu akan mengarahkan keindex.php&wp-content/plugins...
. Ini menyebabkan WordPress menampilkan halaman yang tidak ditemukan kesalahan atau hanya default ke beranda.
Ide ide? Saran?
sumber
get_query_vars()
di-api.php saya. Saya memeriksa variabel apa yang dimuat. Dan satu-satunya var yang diatur adalah aaWP object
dipanggil$wp
. Bagaimana cara mengakses atau mengubah bentuk ini menjadiWP_Query
objek sehingga saya dapat mengakses variabel yang diteruskanget_query_vars()
?include
file, itu dieksekusi dalam lingkup saat ini Dalam hal ini, itu adalahwpse9870_parse_request
fungsi, yang hanya memiliki$wp
parameter. Mungkin saja$wp_query
objek global belum ditetapkan saat ini, jadiget_query_var()
tidak akan berfungsi. Namun, Anda beruntung:$wp
adalah kelas yang berisiquery_vars
anggota yang Anda butuhkan - saya menggunakannya sendiri dalam kode di atas.Ini berhasil untuk saya. Saya tidak pernah menyentuh API penulisan ulang, tetapi saya selalu mendorong diri saya ke arah baru. Berikut ini berfungsi pada server pengujian saya untuk 3.0 yang terletak di sub folder localhost. Saya tidak melihat masalah jika WordPress diinstal di root web.
Cukup masukkan kode ini dalam plugin dan unggah file bernama "taco-kittens.php" secara langsung di folder plugin. Anda perlu menulis hard flush untuk permalink Anda. Saya pikir mereka mengatakan waktu terbaik untuk melakukan ini adalah pada aktivasi plugin.
Salam hangat, -Mike
sumber
add_rewrite_rule( 'taco-kittens', 'wp-content/plugins/taco-kittens.php', 'top' );
Adakah alasan untuk tidak melakukan hal seperti ini?
http://mysite.com/?my-api=1
Kemudian cukup kaitkan plugin Anda ke 'init' dan periksa variabel get. Jika ada, lakukan apa yang perlu dilakukan plugin Anda dan mati ()
sumber
Saya mungkin tidak sepenuhnya memahami pertanyaan Anda, tetapi apakah kode pendek sederhana akan menyelesaikan masalah Anda?
Langkah:
Halaman baru bertindak sebagai titik akhir API dan kode pendek Anda mengirim permintaan ke kode plugin Anda di http://mysite.com/wp-content/plugins/my-plugin/my-api.php
(tentu saja ini berarti my-api.php akan menetapkan kode pendek)
Anda mungkin dapat mengotomatiskan langkah 1 dan 2 melalui plugin.
sumber
Saya belum pernah berurusan dengan menulis ulang sebanyak itu, jadi ini mungkin agak kasar, tetapi sepertinya berhasil:
Ini berfungsi jika Anda menghubungkan ini ke 'menghasilkan_rewrite_rules', tetapi harus ada cara yang lebih baik, karena Anda tidak ingin menulis ulang .htaccess pada setiap memuat halaman.
Sepertinya saya tidak bisa berhenti mengedit posting saya sendiri ... mungkin sebaiknya Anda mengaktifkan callback dan referensi global $ wp_rewrite sebagai gantinya. Dan kemudian hapus entri dari non_wp_rules dan output ke .htaccess lagi di Anda menonaktifkan panggilan balik.
Dan akhirnya, penulisan untuk .htaccess harus sedikit lebih canggih, Anda hanya ingin mengganti bagian wordpress di sana.
sumber
Saya memiliki persyaratan yang sama dan ingin membuat beberapa titik akhir berdasarkan siput unik yang menunjuk ke konten yang dihasilkan oleh plugin.
Lihat sumber untuk plugin saya: https://wordpress.org/extend/plugins/picasa-album-uploader/
Teknik yang saya gunakan dimulai dengan menambahkan filter untuk
the_posts
memeriksa permintaan yang masuk. Jika plugin harus menanganinya, posting dummy dihasilkan dan tindakan ditambahkan untuktemplate_redirect
.Ketika
template_redirect
tindakan dipanggil, itu harus menghasilkan keluaran seluruh isi halaman yang akan ditampilkan dan keluar atau harus kembali tanpa output yang dihasilkan. Lihat kodenyawp_include/template-loader.php
dan Anda akan tahu sebabnya.sumber
Saya menggunakan pendekatan lain yang memaksa halaman beranda memuat judul kustom, konten, dan templat halaman .
Solusinya sangat rapi karena dapat diterapkan ketika pengguna mengikuti tautan ramah seperti http://example.com/ ? Plugin_page = myfakepage
Ini sangat mudah diterapkan dan harus memungkinkan halaman tidak terbatas.
Kode dan instruksi di sini: Hasilkan halaman Wordpress kustom / palsu / virtual dengan cepat
sumber
Saya menggunakan pendekatan yang mirip dengan Xavi Esteve di atas, yang berhenti berfungsi karena peningkatan WordPress sejauh yang saya tahu pada paruh kedua 2013.
Ini didokumentasikan dengan sangat rinci di sini: https://stackoverflow.com/questions/17960649/wordpress-plugin-generating-virtual-pages-and-using-theme-template
Bagian penting dari pendekatan saya adalah menggunakan template yang ada sehingga halaman yang dihasilkan terlihat seperti itu adalah bagian dari situs; Saya ingin agar kompatibel dengan semua tema, semoga di seluruh rilis WordPress. Waktu akan memberi tahu jika saya benar!
sumber
ini adalah contoh produksi, pertama buat kelas halaman virtual:
Pada langkah selanjutnya kaitkan
template_redirect
tindakan dan tangani halaman virtual Anda seperti di bawah inisumber