WordPress Rest API kullanarak Meta Veri Post ile Çalışma
WordPress API dinlenmesinin ikinci sürümünde, özel alanın WordPress’te nasıl ele alındığı ile ilgili bazı iyileştirmeler yapıldı. İkinci sürümü indirmediyseniz, WordPress.org aracılığıyla veya proje için resmi Repo Github’ın “Geliştir” dalını klonlayarak yapabilirsiniz. Bu makalede, WordPress Rest’i ve bir yazı için meta verilerin nasıl alınacağını veya güncellenmesini kullanarak bir yayın yayın alanını nasıl düzenleyeceğinizi ve oluşturacağınızı öğreneceksiniz. Ayrıca, bir postayı veya bir yayınla ilgili diğer verileri ortaya çıkarmak için bir yayının varsayılan bitiş noktasının nasıl ayarlanacağını öğreneceksiniz. Bu makale esas olarak Meta Post’u tartışmasına rağmen, çoğu kullanıcının meta’sına da uygulanabilir.
Meta alanını API REST’i yüklediğiniz varsayımla dinlendirin ve API REST üzerinden yayın almaya ve güncellemeye alışkınsınız, ana yazı verileriyle nasıl çalışacağınızı bilebilirsiniz. Bir gönderi isterseniz, gönderiler için meta alanınızın dahil olmadığını bilmek istersiniz. Meta Post için son bir nokta var, ancak kimlik doğrulama gerektiriyor. Buna girmeden önce, Meta alanını ana post rotasında nasıl açığa çıkaracağınızı öğrenmeniz gerekir. Bu, meta düzleminin herhangi bir kimlik doğrulaması olmadan veya kimlik doğrulaması gerektiren meta bitiş noktasını kullanmadan yayınlar veya bir grup yayın taleplerinde görünmesini sağlar.
“Jedi” adlı bir tür yazınız ve “LightSaber_Color” adlı bir meta alanınız olduğunu düşünün ve “WP-JSON/WP/V2/Jedi” nin “LightBer_Color” alanının değerini göstermek için tüm isteklerin “WP-JSON/WP/V2/Jedi” i istediğinizi düşünün. Bu durumda, bu alanı yanıtı eklemek için Register_API_Field () işlevini kullanabilirsiniz. Bu işlevin üç bağımsız değişkeni vardır: birincisi, bir alan eklemek için ne tür bir nesne – bu durumda yazı türü anlamına gelir -. İkincisi bu alanın adıdır – bu durumda meta alanının adı. Üçüncüsü dizi argümanıdır. Dizide, alan değerini elde etmek ve güncellemek için işlevlerin adları için dönüş çağrısı işlevini tanımlamanız gerekir. Aşağıdaki örnek ve daha sonra bazı örneklerde Meta Post’u alıp güncelleyecektir. Başlamak için bazı genel iade çağrısı işlevleri hazırlayacaksınız: slug_get_post_meta_cb işlevi ($ object, $ field_name, $ istek) {
return get_post_meta ($ object [‘id’], $ field_name);
}
Slug_update_post_meta_cb işlevi ($ değer, $ object, $ field_name) {
return update_post_meta ($ object [‘id’], $ field_name, $ değer);
} Bu iki işlevin yalnızca API’da listelenen alanın adı meta anahtarla aynı ise çalışacağını unutmayın. Ayrıca, meta anahtarın korunmadığından emin olun. Ad uygun değilse, özel bir iade çağrısı gerekecektir. Korunan meta – alt satırla başlayan anahtar – hemen tartışacağım.
Bu işlevlerin her ikisi de argümanı API REST’den Get_post_meta işlevine ve zaten bilinen Update_update_meta ile doğru şekilde eşleştirir. “Alanların” meta alanı olarak muamele edilmesine gerek olmadığını belirtmek önemlidir. Herhangi bir adla bir alanı bildirebilir ve Register_rest_field () ile ihtiyacınız olan her şeyi yapmak için bir iade işlevi sağlayabilirsiniz. Bu iki işlevle yangın alanınızı kaydedebilirsiniz: add_action (‘rest_api_init’, function () {register_api_field (‘jedi’,,
‘Lightsaber_color’,
Dernek (
‘get_callback’ => ‘slug_get_post_meta_cb’,
‘update_callback’ => ‘slug_update_post_meta_cb’,
‘şema’ => sıfır,
)
);
}); Şimdi, “WP-JSON/WP/V2/Jedi/,” LightSaber_Color “Alanına” her bir istek yapıldığında, verilere Jedi Gönderi türündeki sevkiyat için uygun meta alan değerine sahip.
API için doğrulanmış bir istekte bulunursanız, Meta Alanını API REST ile oluşturma ve düzenleme API için, tüm yayınlar Meta için ek bir uç noktaya sahip olacaktır. Örneğin, “WP-JSON/WP/V2/Posts/1/Meta”, kimlik teslimat 1 için korunmayan tüm meta alanları görüntüler, ancak yalnızca kimlik doğrulaması için talepler için görüntülenir. Meta_data veya diğer ilgili verileri kamuya açık hale getirmek istiyorsanız, bu verileri, kimlik doğrulamayan kullanıcılara özel bitiş noktaları olmadan ortaya çıkarmanın tek yoludur. Meta’nın bir gönderi için bitiş noktası, her meta anahtarın meta kimliğini görüntüler. Bu, mevcut meta alanının güncellenmesi için yararlıdır.
Örneğin, Jedi Post Type 42 kimliğindeki bir yazıya ışın kılıcı rengine bir değer eklemek istiyorsanız, “WP-JSON/WP/V2/Jedi/42/Meta” adlı bir yazı isteği yapacaksınız ve İstek gövdesi, güncellediğiniz meta anahtarları ve yeni değer içerir. Anahtarı güncellemek için, “WP-JSON/WP/V2/Jedi/42/Meta” ye bir istekte bulunarak Meta Kimliği bulmanız gerekir, ardından kimliği meta kimliğinin son noktasına yeni bir yazı isteğinde kullanın- Örneğin, meta kimliği 100 ise, “WP-JSON/WP/V2/Jedi/42/Meta/100” olacaktır. Aşağıda, bir meta oluşturmak için HTTP Fire WordPress kullanan bir örnek: // Meta Post 1 için URL’yi alın
$ url = rest_url (‘wp/v2/direkler/1/meta’);
// Temel yazar başlıklarını ekleyin (üretimde kullanmayın)
$ header = dizi (
‘Yetkilendirme’ => ‘Temel’. Base64_encode (‘admin’. ‘:’. ‘Parola’),
);
// Talebin içeriğini bir meta anahtar/değerle hazırlayın
$ body = dizi (
‘Anahtar’ => ‘LightSaber_Color’,
‘Değer’ => ‘mavi’
);
// Gönderi isteği yapın
$ tepkisi = wp_remote_request ($ url, dizi (
‘Yöntem’ => ‘yazı’,
‘Başlık’ => $ başlık,
‘Beden’ => $ Body
)
);
// Yanıt bir hata değilse, renk yankısı ve yeni bir meta anahtardan bir meta kimlik alın
$ body = wp_remote_retrieve_body ($ yanıt);
if (! Is_wp_error ($ body)) {
$ body = json_decode ($ body);
$ meta_id = $ body-> id;
Yankı “renk”. $ Body-> Değer;
İf ($ meta_id) {
// URL’nin sonuna meta kimlik ekleyin
$ url. = ‘/’. $ meta_id;
// bu sefer sadece değerler göndermeniz gerekiyor
$ body = dizi (
‘Değer’ => ‘yeşil’
);
$ tepkisi = wp_remote_request ($ url, dizi (‘yöntem’ => ‘yazı’,
‘Başlık’ => $ başlık,
‘Beden’ => $ Body
)
);
// Bir hata değilse, yeni bir renk yankısı
$ body = wp_remote_retrieve_body ($ yanıt);
if (! Is_wp_error ($ body)) {
$ body = json_decode ($ body);
“Şimdi renk”. $ Body-> Değer;
}
}
}
Meta alanını yaptıktan hemen sonra düzenlemeyebilirsiniz. Bununla birlikte, nasıl değişiklik yapabileceğinizi göstermek için, SEO WordPress Yoast eklentisi tarafından eklenen SEO başlıklarının ve SEO açıklamalarının nasıl düzenleneceğini ve göndermeye yanıt olarak kullanılabilir hale getirileceğini göstereceğim.
Bu, tartışmayı tam bir daireye getirmeye yardımcı olacaktır.
“Yoast_wpseo_title” ve “yoast_wpseo_metadesc” meta WordPress tarafından korunmaktadır. Onlar için bir yangın talebi yapmak için önce korumayı silmeniz gerekir. Bunun için “IS_PROTCTED_META” filtresini kullanabilirsiniz. Bu filtre API dinlenmesinin bir parçası olmadığından, bu filtre bu alanın kullanımını etkiler. Korumanın yalnızca API çağrısı sırasında silindiğinden emin olun – bu da sabit bir REST_REQUEST’e göre belirlenebilir. İlk olarak, “is_protected_meta” filtresini ilişkilendirin. REST_REQUEST sabiti doğruysa, bir arka aramada, bu iki alanı korumasız olarak ayarlayın.
Aşağıdaki görünüm: add_filter (‘IS_PROTECED_META’, işlev ($ korumalı, $ meta_key) {
if (‘_yoast_wpseo_title’ == $ meta_key ||
$ korumalı = yanlış;
}
Geri $ korunan;
}, 10, 2); Şimdi, API’da her iki alanı da kayıt için kaydedebilirsiniz: Register_api_field (‘post’, ‘_ yoast_wpseo_metadesc’,
Dernek (
‘get_callback’ => ‘slug_get_post_meta_cb’,
‘update_callback’ => ‘slug_update_post_meta_cb’,
‘şema’ => sıfır,
)
); Tüm bunlarla birlikte, bir yazı için Meta’nın son noktasına bir GET isteği ile kimliklerini arayabilirsiniz. Bu, değeri güncellemek için posta isteği göndermek için bir URL oluşturmanıza izin verir. Tabii ki, bir değer yoksa, bunu yapmalısınız.
Aşağıda, yukarıdaki örnek koduna benzer şekilde kaydedilmiş ve korunmayan alana bağlı olan, posta kimliği için iki alanda bir değer oluşturabilen veya değer kazanabilen bir işlevdir: slug_update_wp_seo_via_api ($ post_id, $ meta_desc, $ meta_desc , $ meta_desc) {
// meta gönderiler için URL alın
$ meta_url = rest_url (‘wp/v2/direkler/’. $ post_id. ‘/meta’);
// Temel yazar başlıklarını ekleyin (üretimde kullanmayın)
$ başlıklar [‘yetkilendirme’] = $ auth_headers;
// Tüm meta için bir alma isteği yapın
$ tepkisi = wp_remote_request ($ meta_url, dizi (
‘Yöntem’ => ‘al’,
‘Başlık’ => $ başlık,
)
);
// Yanıt bir hata değilse devam edin
$ body = wp_remote_retrieve_body ($ yanıt);
if (! Is_wp_error ($ body)) {
// meta verileri diziye alın
$ meta_data = json_decode ($ body);
// İkinci alan için değişkenleri false olarak ayarlayın
$ meta_title_id = $ meta_desc_id = false;
// Birbirimizi bulana kadar tekrarlayın
foreach ($ meta olarak $ meta_data) {
// Geçerli meta anahtarı bunun için başlık ayar değişkeni ise
if (‘_yoast_wpseo_title’ == $ meta-> tuş) {$ meta_title_id = $ meta-> id;
}
// Geçerli meta anahtarı bir açıklama değişkeni ise, bunun için değişkeni ayarlayın
if (‘_yoast_wpseo_metadesc’ == $ meta-> anahtar) {
$ meta_desc_id = $ meta-> id;
}
// ikimiz de varsa döngüye karar verin
if (false! = $ meta_desc_id && yanlış! = $ meta_title_id) {
zarar;
}
}
// Meta başlık kimliği için bir değerimiz olup olmadığını görün
// Evet ise güncelleme yapmazsa
if ($ meta_title_id) {
// URL’nin sonuna meta kimlik ekleyin
$ url = $ meta_url. ‘/’. $ meta_title_id;
// Vücuda değeri girin
$ body = dizi (
‘değer’ => $ meta_title
);
// Gönderen istekler aracılığıyla güncelleme
$ tepkisi = wp_remote_request ($ url, dizi (
‘Yöntem’ => ‘yazı’,
‘Başlık’ => $ başlık,
‘Beden’ => $ Body
)
);
// SEO başlığını güncellerken yanıtı ortaya çıkarmak için harekete geçin
DO_AGE (‘slug_wp_seo_title_updated_via_api’, $ yanıt, $ post_id);
} değilse {
// Vücuttaki değeri ve anahtarı girin
$ body = dizi (
‘Tuş’ => ‘_yoast_wpseo_title’,
‘değer’ => $ meta_title
);
// Gönderi İstekleri aracılığıyla yap
$ tepkisi = wp_remote_request ($ meta_url, dizi (
‘Yöntem’ => ‘yazı’,
‘Başlık’ => $ başlık,
‘Beden’ => $ Body
)
);
// SEO başlığı oluştururken yanıtı ortaya çıkarmak için eylemler çalıştırın
DO_AGE (‘slug_wp_seo_title_created_via_api’, $ yanıt, $ post_id);
}
// Meta Açıklama Kimliği için bir değerimiz olup olmadığını görün
// Evet ise güncelleme yapmazsa
İf ($ meta_desc_id) {
// URL’nin sonuna meta kimlik ekleyin
$ url = $ meta_url. ‘/’. $ meta_desc_id;
// Değeri gövde $ body = diziye ekleyin (
‘değer’ => $ meta_desc
);
// Gönderen istekler aracılığıyla güncelleme
$ tepkisi = wp_remote_request ($ url, dizi (
‘Yöntem’ => ‘yazı’,
‘Başlık’ => $ başlık,
‘Beden’ => $ Body
)
);
// SEO açıklamasını güncellerken yanıtı ortaya çıkarmak için harekete geçin
do_age (‘slug_wp_seo_desc_updated_via_api’, $ yanıt, $ post_id);
} değilse {
// Vücuttaki değeri ve anahtarı girin
$ body = dizi (
‘Anahtar’ => ‘_yoast_wpseo_metadesc’,
‘değer’ => $ meta_desc
);
// Gönderi İstekleri aracılığıyla yap
$ tepkisi = wp_remote_request ($ meta_url, dizi (
‘Yöntem’ => ‘yazı’,
‘Başlık’ => $ başlık,
‘Beden’ => $ Body
)
);
// SEO açıklaması oluştururken yanıtı ortaya çıkarmak için harekete geçin
do_age (‘slug_wp_seo_desc_created_via_api’, $ yanıt, $ post_id);
}
}
} Post meta ile nasıl çalışacağından daha fazlasını öğrenirsiniz, şimdi WordPress Rest API kullanarak yazı türü için Meta Posting ile çalışmaya başlamalısınız. Register_api_field’ın sadece bir meta alandan daha fazlasını kullanabileceğini unutmayın: Bu, istediğiniz her türlü veriyi görmek ve güncellemek için bir kapıdır. Bu makalede öğrendikleriniz, verileri görüntülemeniz veya depolamanız gereken herhangi bir işlevle Register_API_field () kullanmanız için sizi donatır. Bu pratik küçük işlev, ateşin en kullanışlı kısımlarından biridir. Gücünü akıllıca kullanın. Düşüncelerinizi ve sorularınızı aşağıdaki yorumlarda paylaşın!