Saya ingin memfilter posting berdasarkan beberapa bidang khusus acf dengan hubungan AND. Sesuatu seperti ini:
$args = array(
'post_type' => 'product',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'color',
'value' => 'blue',
'compare' => '=',
),
array(
'key' => 'price',
'value' => array( 20, 100 ),
'type' => 'numeric',
'compare' => 'BETWEEN',
),
),
);
Saya bahkan mungkin memiliki lebih banyak filter. Bagaimana saya bisa mengonversikan ini ke filter REST API 2?
advanced-custom-fields
meta-query
rest-api
Sohrab Taee
sumber
sumber
Jawaban:
Solusi ini berfungsi dengan
get_items()
di/lib/endpoints/class-wp-rest-posts-controller.php
dalamv2 WP Rest API
.Pertama, Anda ingin membuat
GET
argumen seperti yang Anda inginkan untuk anew WP_Query()
. Cara termudah untuk melakukannya adalah denganhttp_build_query()
.Ini akan menghasilkan sesuatu seperti:
filter%5Bmeta_query%5D%5Brelation%5D=AND&filter%5Bmeta_query%5D%5B0%5D%5Bkey%5D=color&filter%5Bmeta_query%5D%5B0%5D%5Bvalue%5D=blue&filter%5Bmeta_query%5D%5B0%5D%5Bcompare%5D=%3D&filter%5Bmeta_query%5D%5B1%5D%5Bkey%5D=test&filter%5Bmeta_query%5D%5B1%5D%5Bvalue%5D=testing&filter%5Bmeta_query%5D%5B1%5D%5Bcompare%5D=%3D
Yang, jika Anda ingin dibaca, Anda juga dapat menggunakan alat Chrome dan
decodeURIComponent('your-query-here')
membuatnya lebih mudah dibaca ketika Anda memasukkannya ke URL JSON Rest API Anda :https://demo.wp-api.org/wp-json/wp/v2/product?filter[meta_query][relation]=AND&filter[meta_query][0][key]=color&filter[meta_query][0][value]=blue&filter[meta_query][0][compare]==&filter[meta_query][1][key]=test&filter[meta_query][1][value]=testing&filter[meta_query][1][compare]==
Catatan: Untuk menggunakan jenis posting kustom Anda, Anda akan meletakkan
product
sebelumnya?
/wp-json/wp/v2/<custom-post-type>?filter[meta_query]
Jadi, Anda memiliki permintaan Anda, tetapi kami perlu memberi tahu WP cara menangani beberapa hal:
product
meta_query
meta_query
sumber
Ini adalah tes yang saya buat di Localhost:
Untuk alasan keamanan, permintaan meta tidak diizinkan di WP Api, pertama-tama yang harus Anda lakukan adalah menambahkan meta_query ke diizinkan rest_query dengan menambahkan fungsi ini pada tema wordpress Anda
functions.php
setelah itu Anda perlu membangun kueri html dengan menggunakan fungsi ini di situs web lain yang akan mendapatkan data dari situs wordpress
Saya mengubah array bidang sehingga tampilannya sekarang seperti argumen kueri Anda. String kueri yang disandikan akan terlihat seperti ini:
Dengan menggunakan
urldecode()
, yang dalam hal ini adalah:urldecode('http://yourwordpreswebssite.com/wp-json/wp/v2/posts?' . $field_string);
Anda akan memiliki URL seperti ini:Jika Anda dapat memberikan kami URL situs web langsung Anda sehingga kami dapat mengujinya menggunakan tukang pos langsung di situs web Anda, karena untuk mengujinya di localhost atau situs WordPress yang ada akan diperlukan untuk membuat jenis posting khusus produk dan menambahkan bidang meta dll. Dll. Cheers!
sumber
product
taksonomi. Ini sangat bagus! Tidak berpikir tentang membungkusmeta_query
di dalamfilter
:)Anda dapat melakukannya tanpa Rest API Seperti ini (Ini adalah filter posting saya)
sumber
Di Wordpress 4.7
filter
argumen telah dihapus.Anda dapat mengaktifkannya lagi menginstal plugin ini yang disediakan oleh tim Wordpress. Hanya setelah itu Anda dapat menggunakan salah satu solusi yang diusulkan dalam jawaban lain.
Saya belum menemukan solusi untuk melakukan hal yang sama tanpa menginstal plugin.
sumber