REST API ve WPGraphQL
4 dk okuma
Alan grubundaki iki anahtar, diğer sistemlerin değerlerinizi hiç PHP yazmadan okumasını sağlar:
Ayar (grup Settings, Group settings sekmesi) | Varsayılan | Sonuç |
|---|---|---|
Show in the REST API ( | kapalı | Grubun yazı türlerinin çekirdek REST uç noktalarında bir |
Show in GraphQL ( | kapalı | Eklenti WPGraphQL ile: grubun yazı türlerinin GraphQL türünde salt okunur bir |
İkisi de yalnızca etkin grupları dikkate alır, yalnızca sütunu olan üst düzey alanları sunar ve Password alanlarını asla sunmaz (grup ve yineleyicilerin içindeki parola alt alanlarını da). İkisi de yazı türlerini aynı biçimde bulur: Post type is equal to X biçimindeki konum kurallarından. Diğer türdeki kurallar (şablon, durum, taksonomi...) yazı türü eklemez.
Kısaca REST API
Seçenek Show in the REST API açıkken, konumlandırılmış türdeki her yazı yanıtında şunu alır:
{
"id": 42,
"wpmcf": {
"book_details": { "subtitle": "A story", "pages": 320, "in_print": true, "chapters": [ { "name": "One" } ] }
}
}POST /wp-json/wp/v2/posts/42 { "wpmcf": { "book_details": { "pages": 350 } } }- Anahtarlar: önce grup anahtarı, sonra alan anahtarı. Değeri olmayan alan
nullolur. Değerler saklanan PHP değerleridir. - Okuma yazının kendi görünürlüğünü izler; view bağlamında parola korumalı bir yazı boş bir
wpmcfdöndürür. - Yazma, yazıyı düzenleme izni gerektirir ve alan türlerinden geçer; bilinmeyen gruplar ve alanlar
400hatası verir. - Yalnızca yazılar: kullanıcıların, terimlerin ve yorumların özniteliği yoktur.
Eksiksiz başvuru (tüm kurallar, hata kodları, şema ve örnekler) Geliştirici API'si bölümündeki REST API sayfasındadır.
WPGraphQL
WPGraphQL (bu adı taşıyan ücretsiz eklenti) başka hiçbir şey için gerekli değildir. O olmadan hiçbir şey kaydedilmez ve hiçbir şey çalışmaz; varsa Show in GraphQL açık olan gruplar şemada görünür.
Gereksinimler
- WPGraphQL eklentisi etkin.
- Alan grubu etkindir, Show in GraphQL seçeneği açıktır ve Post type is equal to X konum kuralına sahiptir.
- Yazı türü WPGraphQL'de sunulur:
show_in_graphqlaçıktır ve birgraphql_single_namedeğeri vardır. Yazılar ve sayfalar varsayılan olarak öyledir. Özel bir yazı türü için GraphQL desteğiyle kaydedin (bu eklentinin Post Types ekranında GraphQL seçeneği yoktur), örneğin:
add_filter( 'register_post_type_args', function ( $args, $post_type ) {
if ( 'book' === $post_type ) {
$args['show_in_graphql'] = true;
$args['graphql_single_name'] = 'book';
$args['graphql_plural_name'] = 'books';
}
return $args;
}, 10, 2 );Birden çok yazı türüne konumlandırılmış bir grup, alanı bunların her birinde alır. WPGraphQL'in göstermediği bir yazı türü atlanır. Konumlandırılmış hiçbir yazı türü sunulmuyorsa grup hiç kaydedilmez.
Adlandırma
Anahtarı book_details olan bir grup için:
Ne | Ad | Kural |
|---|---|---|
Nesne türü |
|
|
Şunlar üzerindeki alan: |
|
|
İçindeki alanlar |
| camelCase alan anahtarı ( |
Grup anahtarı, önek dahil olmak üzere tamamen hesaba katılır: anahtarı wpmcf_doc_a11_gql olan bir grup WpmcfWpmcfDocA11Gql olur. Kısa GraphQL adları istiyorsanız kısa grup anahtarları seçin.
Yalnızca alt çizgilerle ayrışan anahtarlar (a_b ve a__b) aynı ada eşlenir. Adı ilk grup korur, diğeri GraphQL'den sessizce çıkarılır. Grup anahtarlarını birbirinden ayrı tutun.
Değer türleri
Alan türü | GraphQL türü | Notlar |
|---|---|---|
True / False |
| |
Number, Range |
|
|
Image, File ve Attachment (ek kimlikleri olarak saklanır) |
| Ek kimliği. Medya öğesini bu kimlikle sorgulayın. |
Liste veya nesne olarak saklanan alanlar (Checkbox, Group, Repeater, Relationship, Link, Map...) |
| Değer JSON olarak kodlanmıştır (örneğin |
Diğer her şey (Text, Text area, Select, Date, Email, URL...) |
|
Boş alan null olur. Sayısal bir alanda sayı olmayan değer null olur.
Sunulmayanlar: Password alanları, düzen alanları (tab, accordion...) ve kendi başlarına alan olarak alt alanlar (bunlar kapsayıcılarının JSON dizgesinin parçasıdır).
Örnek sorgu
query Books {
posts(first: 3) {
nodes {
title
wpmcfBookDetails {
subtitle
pageCount
inStock
format
chapters # JSON string, e.g. "[{\"name\":\"One\"}]"
cover # attachment ID
}
}
}
}Yanıt:
{
"data": {
"posts": {
"nodes": [
{
"title": "A story",
"wpmcfBookDetails": {
"subtitle": "A story",
"pageCount": 320,
"inStock": true,
"format": "pb",
"chapters": "[{\"name\":\"One\"}]",
"cover": 1205
}
}
]
}
}
}Şu alanın görsel URL'sini almak için: cover, medya öğesini veritabanı kimliğiyle isteyin (mediaItem( id: 1205, idType: DATABASE_ID ) { sourceUrl }).
Erişim ve görünürlük
- Salt okunur. Mutation yoktur. Bir istemciden değer yazmak için REST özniteliğini kullanın.
- Kullanıcının hangi yazıları görebileceğine (taslaklar, özel yazılar) WPGraphQL karar verir.
wpmcfalanı, çözümlediği yazıya eklenir. - Bir parola korumalı yazı, görüntüleyen onu düzenleyemiyorsa
nulldöndürür; bu, tümwpmcf{Group}alanı için geçerlidir. - Çözümleyicinin tanımlayamadığı bir nesne için grubun alanı
nullolur.
Nasıl doğrulandı
WPGraphQL, dokümantasyon sitesinde kurulu değildir. Kayıt ve çözümleyici, register_graphql_object_type() ve register_graphql_field() işlevlerinin yerine geçen sahte sürümlerle çalıştırıldı: yukarıdaki tablolardaki kayıtlı tür adları, alan adları ve GraphQL türleri eklentinin kaydettiği şeylerdir; çözümleyici gösterilen değerleri döndürdü (mantıksal değerler, float'lar, tamsayı olarak kimlikler, JSON dizgesi olarak kapsayıcılar, ziyaretçiler için parola korumalı yazılarda null). Gerçek eklentiyle canlı bir şema sorgulanmadı.
Sorun giderme
Sorun | Kontrol |
|---|---|
Alan şemada görünmüyor | WPGraphQL etkin mi? Show in GraphQL açık ve grup etkin mi? |
Alanın adı beklenmedik | Bkz. Adlandırma: grup anahtarı eksiksiz kullanılır. |
Bir yineleyici dizge olarak geliyor | Tasarım gereği: kapsayıcılar JSON dizgeleridir. |
| Yazı parola korumalı ve görüntüleyen onu düzenleyemiyor ya da grubun konumu o yazıyla eşleşmiyor. |
İki grup var, biri eksik | Anahtarları aynı GraphQL adına eşleniyor (alt çizgiler). Anahtarlardan birini yeniden adlandırın. |
Hâlâ takıldınız mı? Destek ile iletişime geçin