Saya mulai sedikit dengan REST API. Jika saya tidak sepenuhnya menyesatkan, init
hook tindakan juga dieksekusi saat permintaan REST API. Sekarang, saya ingin menjalankan beberapa kode saja, ketika itu bukan permintaan REST API.
Jadi saya mencari perintah seperti is_rest()
untuk melakukan sesuatu seperti
<?php
if( ! is_rest() ) echo 'no-rest-request';
?>
Tetapi saya tidak dapat menemukan sesuatu seperti ini. Apakah ada di is_rest()
luar sana?
init
. Perhatikan juga bahwa bagian-bagian dari API dapat digunakan secara internal pada permintaan yang bukan permintaan REST, sehingga Anda berisiko melanggar sesuatu jika Anda mengandalkan deteksi itu.Jawaban:
Ini poin yang bagus oleh @Milo,
REST_REQUEST
konstanta didefinisikan sebagaitrue
, di dalamrest_api_loaded()
jika$GLOBALS['wp']->query_vars['rest_route']
tidak kosong.Ini terhubung ke
parse_request
melalui:tetapi
parse_request
kebakaran lebih lambat dariinit
- Lihat misalnya Codex di sini .Ada saran (oleh Daniel Bachhuber) di tiket # 34373 tentang
WP_Query::is_rest()
, tetapi ditunda / dibatalkan.sumber
Hanya tersandung masalah yang sama dan menulis fungsi sederhana
is_rest
yang memungkinkan Anda untuk memeriksa apakah permintaan saat ini adalah permintaan API WP REST.Referensi:
sumber
Untuk mengatasi masalah ini, saya menulis fungsi kustom sederhana berdasarkan asumsi bahwa jika URI yang diminta berada di bawah URL API Rest situs WordPress, maka itu adalah permintaan API Rest.
Apakah itu titik akhir yang valid, atau dikonfirmasi, bukan untuk fungsi ini untuk menentukan. Pertanyaannya adalah ini: apakah URL tersebut merupakan URL potensial Rest API?
Jika Anda
$_SERVER['REQUEST_URI']
tidak terisi dengan benar, fungsi ini akan tetap kembalifalse
, apa pun.Tidak ada pengodean URL sehingga jika Anda karena suatu alasan mengubah basis URL API Anda, ini akan beradaptasi.
sumber
Mungkin tidak benar, tetapi saya berakhir dengan
Silakan beri tahu saya jika ini tidak benar. Mencoba membuat starter plugin yang bermanfaat untuk akhirnya berbagi: https://gitlab.com/ripp.io/wordpress/plugin-starter
sumber
Dua opsi di sini benar-benar,
REST_REQUEST
sudah ditentukan.rest_api_init
tempat yang Anda inginkaninit
.sumber
Inilah yang saya pikirkan:
Saya belum punya banyak waktu untuk melihat ke dalam membuat CLI mendeteksi permintaan REST sebelum
parse_request
tindakan telah dipecat. Saya terbuka untuk saran!Saya belum menulis beberapa tes di sekitar fitur ini, saya akan memperbarui jawaban ini begitu saya lakukan.
- Edit
Baru saja menemukan bagaimana WooCommerce menangani ini. WooCommerce tampaknya tidak memperhitungkan permalink polos:
sumber