WordPress Rest API’sini kullanarak bir arama widget’ı oluşturun

WordPress geliştiricileri, geri kalan ateşin bir süre var olduğunu fark edecekler, ancak geçen yılın sonunda çekirdeğe entegre edildi, yani artık widget ve eklentilerde kullanılabileceği anlamına geliyor. Bu makalede, farklılıklar içeren basit bir arama widget’ı oluşturacağız. WordPress REST API’sini kullanarak, bu widget harici bir WordPress web sitesi arayacak ve sonuçları widget üzerinde görüntüler. Bu yazı, WordPress Rest API hakkında bilmeniz gerekenler hakkında sondan devam ediyor

Bir bilgi tabanı oluşturun – kolay yol! Aranabilecek bir bilgi tabanı oluşturun ve müşterilerinizin kendilerine yardım etmelerine yardımcı olun.
Bir eklenti alın
Önceki makale gibi bir widget eklentisi oluşturma, eklentiler ve widget’lar oluşturma hakkında bazı temel bilgiler varsayılmaktadır. Emin değilseniz, bu makalenin sonunda sizin için önerilen bazı okumalar vardır. Son makalede yaptığımız eklentilere bakalım. Kodunuz şöyle görünecek:
/**
* Eklenti Adı: KB – Rest Fire Widget
* Yazar: Kirsty Burgoine
*/
Rest_api_widget sınıfı wp_widget {
/**
* Widget adını ayarlar vb.
*/
genel işlev __Construct () {
$ widget_ops = dizi (
‘ClassName’ = & gt; ‘REST-API-Widget’,
‘Açıklama’ = & gt; ‘Bir Fark web sitesinden yayın çeken bir dinlenme yangın widget’ı’
);
Ebeveyn :: __ yapı (‘rest_api_widget’, ‘Rest Fire Widget’, $ widget_ops);
}
/**
* Widget’ın içeriğini çıkarır
*
* @param dizisi $ args
* @param dizisi $ örnek
*/
Genel işlev widget ($ args, $ örnek) {
// widget’ın içeriğini çıkarır
$ Response = wp_remote_get (‘http://website-with-api.com/wp-json/wp/v2/ht_kb/’);
if (is_wp_error ($ yanıt)) {
dönüş;
}
$ posts = json_decode (wp_remote_retrieve_body ($ yanıt)); if (boş ($ gönderiler)) {
dönüş;
}
echo $ args [‘Önce_widget’];
if (! boş ($ örnek [‘başlık’]))) {
echo $ args [‘Öncesi_title’]. Applate_filters (‘widget_title’, $ örnek [‘başlık’], $ örnek, $ this- & gt; id_base). $ args [‘After_title’];
}
// widget içeriğini burada oynatın
if (! boş ($ gönderiler)) {
echo ‘& lt; ul & gt;’;
Foreach ($ gönder) {
echo ‘& lt; . $ Post- & gt; bağlantı. ‘& quot; & gt;’ . $ Post- & gt; başlık- & gt; render edilebilir. ‘& a & lt;/lt;/li & gt;’;
}
echo ‘/lt;/ul & gt;’;
}
echo $ args [‘After_widget’];
}
/**
* Yöneticide seçenekler formunu çıkarır
*
* @Param Array $ Widget seçeneklerinin örneği
*/
Genel işlev formu ($ örnek) {
// Yöneticide Seçenekler Formunu Çıkarır
$ title = (! boş ($ örnek [‘başlık’]))? $ örneği [‘başlık’]: ”;
? & gt;
& lt; “php echo $ this- & gt; get_field_name (” başlık “) için; ? & quot; & gt; başlık: & lt;/label & gt;
& lt; giriş sınıfı = & quot; widefat & quot; id = & quot; “php echo $ this- & gt; get_field_id (‘başlık’); ? & gt; & quot; Name = “php echo $ this- & gt; get_field_name (‘başlık’); ? & gt; & quot; type = & quot; metin & quot; değer = & quot; ? & gt; & quot; /& Gt;
& lt;? Php
}
} // son sınıf
Add_action (‘widgets_init’, function () {
Register_widget (‘rest_api_widget’);
});
Temel olarak, yeni bir eklenti yapıyoruz. Eklentide, farklı web sitelerinden kahramanca bilgi tabanlarının özel bir yayın listesi görüntüleyen bir widget yaptık.
Şimdi yapacağımız şey, bir arama özelliği yapmak için bunu değiştirmek. Adım 1: Son Makalede Farklı Sonuçlar Almak İçin Temel Sorguları Değiştirme Mesajların bir listesini nasıl alacağımızı ve daha sonra bir yedekte özel bilgi yayınlarının türünü alabilmemiz için parametrelerin nasıl değiştirileceğini tartıştığımızı hatırlayacaksınız. Belki de öğrenmek çok şaşırtıcı değil, sadece GET yöntemiyle yapabileceğimiz değil. Bir filtreleme parametresi kullanarak, wp_query çağrılırken mevcut olan herhangi bir argümanı kullanabiliriz. Örneğin, görüntülenen yayın sayısını değiştirmek istiyorsak, şunları ekleyebilirsiniz:/yayınlar? Filtre [Posts_per_page] = 5
Bunun gibi uzun mesafeli aramalar yapın:
$ Response = wp_remote_get (‘http: // web sitesi-api-api.com/wp-json/wp/v2/posts?filter omilter class_per_page;
Veya sadece rastgele bir gönderi görüntülemek istiyorsak, şunları ekleyebiliriz:
/Gönderiler? Filtre [orderby] = rand & amp; amp; filtre [post_per_page] = 1
Ve bu arama parametreleri için de aynı. Standart WP sorgusunda, parametreler şöyle görünecektir:
‘S’ = & gt; ‘Anahtar kelime’
Bu nedenle, uzun mesafeli çağrılarımızın şöyle görünmesi gerekiyor:
$ Response = wp_remote_get (‘http: // web sitesi-api-api.com.com/wp-json/wp/v2/posts?filter nasıl
Bu, parametreleri wp_query’den ateş url dizesine değiştirmeye başladıktan sonra oldukça basittir.
Hangi parametrelerin mevcut olduğu hakkında tüm ayrıntılar için bkz. Codex WP_QUERY KILAVUZU. Aslında standart bir yazı bulmak istemiyoruz, bir tür özel bilgi gönderisi bulmak istiyoruz. Ancak, önceki makalede gördüğümüz gibi, bunu yapmak kolaydır, çünkü özel sevkiyatımızı filtreler ekleyerek halka açık hale getiririz. Bu nedenle, burada yapmamız gereken şey, özel yayınların özel yayınlarına / gönderilere / özel yayınların adıyla bilgi tabanını sormaktır. Bu durumda / ht_kb /. Uzun mesafeli çağrılar şimdi şöyle görünecek: $ tepki = wp_remote_get (‘http: // web sitesi-with-with
Adım 2: Arama kutusu ve ayar sonuçları, şimdi belirli arama terimlerine göre filtrelenecek sorgulardaki değişikliği gördük, bir sonraki adım terimi almak için bir yol yapmaktır. İlk olarak, eklentiye bir arama kutusu eklememiz gerekir. Bu yalnızca basit bir arama formu olacağından, ayrı bir arama formu yapmak yerine WordPress tarafından hazırlanan Get_Search_Form () işlevini kullanabiliriz. Eklenti dosyasında, widget işlevinizde // ana widget içeriği // ana widget içeriği olan satırları arayın ve get_search_form () ekleyin; Ve şöyle görünecek şekilde doğrudan altında düzenleyin:
// widget içeriğini burada oynatın
get_search_form ();
if (! boş ($ gönderiler)) {
echo ‘& lt; ul & gt;’;
Foreach ($ gönder) {
echo ‘& lt; . $ Post- & gt; bağlantı. ‘& quot; & gt;’ . $ Post- & gt; başlık- & gt; render edilebilir. ‘& a & lt;/lt;/li & gt;’;
}
echo ‘/lt;/ul & gt;’;
}
Şimdi sayfanızdaki widget’ı gördüğümüzde, standart bir arama formu ve aşağıdaki bilgi tabanından yayınların bir listesini göreceksiniz. Get_search_form () kullanmayı biliyoruz; Bir şey aradığımızda, arama parametreleri şu şekilde URL’lerde göründüğü:
/? S = test
‘S’ $ _GET ve ‘Test’ parametresi olmak arama teriminizdir. Bu nedenle, geriye kalan tek şey URL için arama terimini almak ve aşağıdakiler gibi bir yanıtta kullanmaktır.
if (isset ($ _get [‘s’) & amp; & amp;

$ Response = wp_remote_get (‘http://website-with-api.com/wp-json/wp/v2/ht_kb?filter ”=’. $ _ Get sertifikası);
}
başka {
$ Response = wp_remote_get (‘http://website-with-api.com/wp-json/wp/v2/ht_kb/’);
}
Bu kodla yapılan şey, $ _GET [‘S’] ‘nin boş olup olmadığını kontrol etmektir. Eğer varsa, cevabınıza koyarsınız. Değilse, arama yapılmaz ve tüm bilgi tabanı yayınlarını her zamanki gibi görüntülemek istersiniz.
Get_search_form () işlevi hakkında daha fazla ayrıntı burada bulunabilir. Burası bu makalenin bittiğini umuyoruz? Sonuçta, WordPress REST API’sını kullanarak harici web sitesindeki yayın hakkında soru soran ve daha sonra sonuçları arama parametrelerine göre döndüren bir arama formu hazırladık. Ancak … Adım 3: Görüntülenen sonuçları değiştirin Yeni arama widget’ını test edersek, işleyen widget’ı beklendiği gibi görebiliriz, ancak mevcut web sitesinin sonuçlarını ana sayfa içeriğindeki geri yükleyecektir.
Arama widget’ı, WordPress şablon sistemi nedeniyle bu arama sonuçları şablonuna aktarılan ‘testler’ ve sayfalar için sonuçları görüntüler. WordPress, hangi şablon veya şablonun kullanılacağını belirlemek için bir sorgu dizesi kullanır. Arama formu gönderildiğinde, URL’ye ‘s’ parametresini eklediğinden, WordPress’e arama sonuçları sayfasını aramasını ve yeniden yönlendirmesini söyledi. TwentySixteen temasında Search.php. Daha fazla bilgi için bkz. Şablon hiyerarşi belgeleri. İkinci sonuç görüntülendiğinden API’yi aynı anda kullanarak yerel web sitelerinde ve harici web sitelerinde arama yapmak istiyorsak bu iyidir. Ancak, bu durumda bunu yapmak istemiyoruz. Sadece widget’ta görüntülenecek bir yangın kullanarak sonuçların döndürülmesini istiyoruz. Ana sayfa etkilenmemelidir. Bunu yapmanın birkaç yolu var. Bu örnek için get_search_form () nasıl değiştireceğimizi göreceğiz; Aramasının parametresi olarak ‘S’ kullanmamaya hizmet eder. Bunun yerine sorunu geçmek ‘A’ olarak değiştirilecektir.
İlk adım, yeni bir işlev oluşturarak formu gerçekten değiştirmektir.
API_SEARCH_FORM ($ form) işlevi {
$ form = ‘& lt; form rolü = & quot; arama & quot; Yöntem = & quot; Get & quot; class = & quot; arama formu & quot; Eylem = & quot; ‘ . Home_url (‘/’). ‘& quot; & gt;

& lt; label & gt;

& lt; span class = & quot; ekran okuyucu-metin “& quot; ” . _X (‘Ara:’, ‘etiket’). ‘& lt;/span & gt;
& lt; giriş türü = & quot; arama & quot;Class = & quot; arama alanı & quot;yer tutucu = & quot; ‘.ESC_ATTR_X (‘arama …’, ‘yer tutucu’). ‘& Quot;değer = & quot; ‘.get_search_query ().’& quot;name = & quot; a & quot;başlık = & quot; ‘.ESC_ATTR_X (‘Ara:’, ‘etiket’). ‘& Quot;/& lt;/label & gt;
& lt; düğme türü = & quot; gönder & quot;Class = & quot; SAPS-EDME “SPAN Sınıfı = & quot; Screen-Reader-Text & quot; ;
& lt;/form & gt; ‘;
Dönüş $ formu;
}
add_filter (‘get_search_form’, ‘api_search_form’, 100);
İşlevinin kendisi oldukça basittir, bu temelde varsayılan formdan ziyade kullanım için yeni bir formdur. TwentySixteen temasına referansa bakar ve mevcut arama formunu kontrol edersek, koddaki tek farkın arama girişinin adı olduğunu not ederiz. Başlangıçta ‘name = s’ idi ve şimdi ‘name = a’ idi. Bu, ‘S’ parametresini URL’den kaldırır. Not: Bu yaklaşımla, bir ana bilgisayar web sitesi aramak yerine API kullanmayı aramak için ana arama formunu değiştiririz. Bu nedenle, web sitesindeki diğer yerlerde ana arama formunu kullanırsak, artık web sitesi sunucusundan arama sonuçlarına yol açmayacağını düşünmek önemlidir. İki farklı aramaya sahip olmak için en kolay çözüm, bu yeni form için get_search_form () değiştirmek yerine doğrudan widget’a bir kod eklemektir; Son adım bir filtre eklemektir. Bu, WordPress’e mevcut formun değiştirilmesini söyler. Widget sınıfından sonra tüm blok kodunu eklenti dosyasına ekleyebiliriz. Bu, bunun yerine Function.php temasına girilebilir, ancak eklentiye koyarak, formdaki değişikliklerin yalnızca eklenti etkinleştirilirse yapıldığı anlamına gelir. Şimdi giriş adını ‘A’ olarak değiştirdik
, gerçek arama parametrelerini de değiştirmeliyiz. Parametreler artık URL’de şu şekilde görünecektir: /? S = test yerine /? A = test ve bu nedenle sorgu dizesinin WordPress’in arama sonuçları şablonuna aktarılması gerektiğini söyleyen kısmını silin. Yeni bir parametre kullanarak arama yapabilmeniz için, ‘S’ yerine ‘A’ parametresini kullanmak için daha önce yazılan kodu güncelleyin. Şimdi şöyle görünmelidir: if (isset ($ _get [‘a’]) & amp; & amp;
$ Response = wp_remote_get (‘http://website-with-api.com/wp-json/wp/v2/ht_kb?filter ”=’. $ _ Get sertifikası));
} başka {
$ Response = wp_remote_get (‘http://website-with-api.com/wp-json/wp/v2/ht_kb/’);
}
$ _GET’teki arama parametreleri değişmiş olsa da, bunun gerçek sorgudaki filtreyi değiştirmediğini unutmayın. Bunun nedeni, arama için standart WP sorgusunun hala ‘s’ olmasıdır. Şimdi widget’ı test ettiğimizde, harici web sitenizde bir bilgi tabanı makalesi arayabilir ve Arama Sonuçları sayfasına yönlendirilmeden sonuçları iade edebilmeliyiz.
Widget için tam kod sayfalarının aktarılması olmadan ‘test’ sonuçlarını görüntüleyen bir widget bulun:
/**
* Eklenti Adı: KB – Rest Fire Widget
* Yazar: Kirsty Burgoine
*/
Rest_api_widget sınıfı wp_widget {
/**

* Widget adını ayarlar vb.
*/
genel işlev __Construct () {
$ widget_ops = dizi (
‘ClassName’ = & gt; ‘REST-API-Widget’,
‘Açıklama’ = & gt; ‘Bir fark web sitesinden yayın çeken bir dinlenme yangın widget’ı’);
Ebeveyn :: __ yapı (‘rest_api_widget’, ‘Rest Fire Widget’, $ widget_ops);
}
/**
* Widget’ın içeriğini çıkarır
*
* @param dizisi $ args* @param dizisi $ örnek
*/
Genel işlev widget ($ args, $ örnek) {
// widget’ın içeriğini çıkarır
if (isset ($ _get [‘a’]) & amp; & amp;
$ Response = wp_remote_get (‘http://website-with-api.com/wp-json/wp/v2/ht_kb?filter ”=’. $ _ Get sertifikası));
} başka {
$ Response = wp_remote_get (‘http://website-with-api.com/wp-json/wp/v2/ht_kb/’);
}
if (is_wp_error ($ yanıt)) {
dönüş;
}
$ posts = json_decode (wp_remote_retrieve_body ($ yanıt));
if (boş ($ gönderiler)) {
dönüş;
}
echo $ args [‘Önce_widget’];
if (! boş ($ örnek [‘başlık’]))) {
echo $ args [‘Öncesi_title’]. Applate_filters (‘widget_title’, $ örnek [‘başlık’], $ örnek, $ this- & gt; id_base). $ args [‘After_title’];
}
// widget içeriğini burada oynatın
get_search_form ();
if (! boş ($ gönderiler)) {
echo ‘& lt; ul & gt;’;
Foreach ($ gönder) {
echo ‘& lt; . $ Post- & gt; bağlantı. ‘& quot; & gt;’ . $ Post- & gt; başlık- & gt; render edilebilir. ‘& a & lt;/lt;/li & gt;’;
}
echo ‘/lt;/ul & gt;’;
}
echo $ args [‘After_widget’];
}
/**
* Yöneticide seçenekler formunu çıkarır
*
* @Param Array $ Widget seçeneklerinin örneği
*/
Genel işlev formu ($ örnek) {
// Yöneticide Seçenekler Formunu Çıkarır
$ title = (! boş ($ örnek [‘başlık’]))? $ örneği [‘başlık’]: ”;
? & gt;
& lt; “php echo $ this- & gt; get_field_name (” başlık “) için; ? & quot; & gt; başlık: & lt;/label & gt;
& lt; giriş sınıfı = & quot; widefat & quot; id = & quot; “php echo $ this- & gt; get_field_id (‘başlık’); ? & gt; & quot;
Name = “php echo $ this- & gt; get_field_name (‘başlık’); ? & gt; & quot; type = & quot; metin & quot; değer = & quot; ? & gt; & quot; /& lt; php
}
}
API_SEARCH_FORM ($ form) işlevi {
$ form = ‘& lt; form rolü = & quot; arama & quot; Yöntem = & quot; Get & quot; class = & quot; arama formu & quot; Eylem = & quot; ‘ . Home_url (‘/’). ‘& quot; & gt;
& lt; label & gt;
& lt; span class = & quot; ekran okuyucu-metin “& quot; ” . _X (‘Ara:’, ‘etiket’). ‘& lt;/span & gt;
& lt; giriş türü = & quot; arama & quot; Class = & quot; arama alanı & quot; yer tutucu = & quot; ‘ . ESC_ATTR_X (‘arama …’, ‘yer tutucu’). ‘& Quot; değer = & quot; ‘ . get_search_query (). ‘& quot; name = & quot; a & quot; başlık = & quot; ‘ . ESC_ATTR_X (‘Ara:’, ‘etiket’). ‘& Quot; /& Gt;
& lt;/label & gt;
& lt; düğme türü = & quot; gönder & quot; Class = & quot; SAPS-EDME “SPAN Sınıfı = & quot; Screen-Reader-Text & quot; ;
& lt;/form & gt; ‘;
Dönüş $ formu;
}
add_filter (‘get_search_form’, ‘api_search_form’, 100);
Add_action (‘widgets_init’, function () {
Register_widget (‘rest_api_widget’);
});
Bu, bir yangın dinlenme kullanarak özel bir arama widget’ının çok basit bir uygulamasıdır.Daha önce gösterildiği gibi, arama sonuçlarının sayısını veya görünüm sırasını sınırlamak için kuyruğa ek filtreler ekleyebiliriz.Widget hakkında arama terimi ve sonuç miktarı gibi ek bilgileri görüntülemeyi seçebilirsiniz veya JQuery/JavaScript’i biliyorsanız, bunu daha fazla alıp iyi bir etki ekleyebilirsiniz, böylece sonuçlar gerekmeden döndürülürsünüz sayfayı yenile.Daha fazla okuma: Widget API (WordPress Codex)
İlk WordPress Widget’ınızı Oluşturmaya Giriş (Tutsplus)
Özel bir WordPress Widget nasıl yapılır (Yeni Başlayan WP)
WordPress için Widget eklentisi nasıl yapılır (WP Explorer)

admin

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir