Bisakah saya menggunakan REST-API pada format permalink biasa?

9

Baru-baru ini semua permintaan REST-API saya tiba-tiba berubah untuk mengembalikan kesalahan 404, Setiap permintaan (tidak peduli titik akhir khusus atau bawaan).

Lalu saya pikir itu karena struktur permalink. /wp-json/tidak dapat diakses di bawah permalink biasa, karena tidak ada aturan redirect yang tersedia saat ini.

Apakah mungkin untuk menggunakan titik akhir REST dalam situasi ini? Kustom dan bawaan.

Jack Johansson
sumber

Jawaban:

16

Ya kamu bisa. Cukup tambahkan rest_routeparameter kueri.

Begitu

https://wordpress.org/wp-json/

akan menjadi

https://wordpress.org/?rest_route=/

Atau https://wordpress.org/wp-json/wp/v2/akan https://wordpress.org/?rest_route=/wp/v2memberi Anda contoh yang lebih lengkap.

Jadi Anda bertanya-tanya bagaimana cara memutuskan mana yang akan digunakan? Jangan khawatir lagi, ada fungsi untuk itu:get_rest_url()

Pilihan lain adalah fakta bahwa secara default ada <link>di header yang memberi Anda root API.

<link rel='https://api.w.org/' href='https://wordpress.org/wp-json/' />

Jadi jika Anda perlu mencari tahu dari sisi klien JS hanya menggunakan sesuatu di sepanjang baris

document.querySelectorAll('link[rel="https://api.w.org/"]')[0].getAttribute('href');

Jadi pada dasarnya Anda tidak boleh mengambil wp-jsonbagian seperti yang diberikan (dan hardcode itu) tetapi selalu membangunnya secara dinamis baik menggunakan get_rest_url()atau pendekatan JS yang disebutkan di atas.

pembuat kraftner
sumber
Jadi, jika saya ingin menggunakannya di dataran, itu akan menjadi seperti apa https://wordpress.org/?rest_route=SOMEPATH&value1=X&value2=Y? Ini berarti saya harus memiliki persyaratan untuk mendeteksi struktur permalink dan mengubah rute REST berdasarkan itu?
Jack Johansson
Yah mungkin tidak bersyarat tetapi Anda harus membangunnya secara dinamis. Lihat hasil edit di atas.
kraftner
bagaimana Anda menggunakan rute ini dengan jsonp? Saya mencoba /?rest_route=/?_jsonp=callBackfntetapi mendapatkan status 404.
redshift
@ redshift Biasanya tolong buka pertanyaan terpisah untuk hal-hal seperti ini. Dalam kasus Anda, Anda harus membaca tentang pembatas string kueri en.wikipedia.org/wiki/Query_string#Structure Anda harus menulis seperti ini/?rest_route=/&_jsonp=callBackfn
kraftner
1

Anda dapat menambahkan satu penulisan ulang di server web Anda.

Misalnya untuk nginx

location ~ ^/wp-json/ {
    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}
northtree
sumber
0

The rest_routeparameter permintaan adalah Ugly(pilihan kata bukan milikku Wordpress ini) gaya Permalink. Anda dapat mengubah gaya permilink menjadi Post nameseperti yang diilustrasikan dalam cuplikan layar di bawah ini dan wp-jsonrute harus dapat diakses di URL. Mungkin saja gaya permilink lain ini akan berfungsi, tetapi Post namebekerja untuk saya dan saya tidak menjelajahinya lebih jauh

Gambar menggambarkan klik tombol yang diperlukan untuk mengubah pengaturan

Max Carroll
sumber