Wordpress içinde ajax çağrıları ve JSON nasıl yönetilir


13

Tercihen JSON kullanarak jQuery üzerinden erişmek istediğiniz özel bir yazı türü var.

Önce ilk şeyler. / echos json döndüren bir işlev oluşturmak yeterince kolaydır, ancak jquery üzerinden nasıl erişebilirim.

Mike'ın bu soruya yazdığı gibi , - anladığım kadarıyla - bunu wordpress köküne yerleştiriyor. hangi php dosya adını kullanarak erişilebilir hale getirir - ama bu tavsiye edilir? Bir eklenti klasörünün içine koymak istiyorum.

Wordpress kodeksini okumaya çalıştım, ancak yönetici sayfası olmasa da, her ajax aramasını admin-ajax.php'ye gönderirken, ajax çağrılarının işlendiği yol beni karıştırıyor.

Birisi yaşadığım sorunları düzeltebilir mi?

/Fırtına

Düzenle

Ben sorun nasıl ajax aramalar wordpress içinde yapılması gerektiği, yanı sıra arama yapmak / işlemek için php ve js kodunuzu nereye yerleştirildiğini anlamak oldu.

Bağlantı verdiğim diğer soruda, dosyayı wp köküne yerleştiren bir işlev oluşturdunuz - bunu yapmak istemiyorum. Ama şimdi wp_ajax_ (nopriv _) [eylem] kullanmayı öğrendim ve etkili bir şekilde ben oluşturmak json erişebilirsiniz. Kalan sorun nerede çağrı yapmak için JS yerleştirmelisiniz. Eklentiler js dosyasına yerleştirmek istiyorum, ancak bu bir yönetici sayfasında değil , bir sayfada sunulacak gibi , ajaxurl tanımlanmadı, bu yüzden php kullanarak yankı var.

echo admin_url('admin-ajax.php');

Yani soru nasıl bu php javascript ile birleştirmek gerekir ve daha sonra nasıl bir dosya veya komut dosyası olarak görerek, onu enqueue gerekir olur.


Daha açıklayıcı bir başlık vermek için sorunuzun başlığını düzenlemek istiyorum, ancak okuduktan sonra sorunuzun ne olduğundan% 100 emin değilim. Özel gönderi türleriyle ilgisi olmayan bir JSON özet akışına nasıl erişeceğinizi mi soruyorsunuz (CPT sorunuza gerçekten aktarmıyor mu?) Ve kökte olmaması önemli mi? Yönetici işlevselliği için mi? Belki de mücadele etmekte olduğunuz teknik yaklaşıma ek olarak son kullanıcının bakış açısından gerçekte neyi başarmaya çalıştığınızı açıklamanız da yardımcı olabilir.
MikeSchinkel

Evet, başlığın şimdiye kadarki en açıklayıcı olmadığını söyleyebilirim. Biraz önce bir şey koydum çünkü ilk başta daha da kötü biriyle paylaştım. Daha fazla bilgi içeren yayın düzenlendi.
Fırtına

Az önce koyduğum özel yazı türü, çünkü popüler görünen json-api eklentisi aslında özel yazı türlerini kapsamıyor.
Fırtına

Yanıtlar:


17

Ajax İşleyici

Ajax işleyicisinin wp-admin/dizinde olması gerçekten biraz kafa karıştırıcıdır , ancak evet, yönetici olmayan istekler için de kullanabilirsiniz ve kullanmalısınız. Daha sonra wp_ajax_nopriv_[action]kanca yerine normal yerine bir işleyici kaydedersiniz wp_ajax_[action]. Bu durumda, yalnızca ilk satırlarınıadmin-ajax.php izlemeniz gerekir , çünkü oturum açmamış bir kullanıcı tarafından yapılan bir istek sayfayı 50. satırda bırakacaktır.

Yani kanca için bir işlev kayıt wp_ajax_nopriv_get_custom_post_datave sormak eğer denilen alacak admin-ajax.phpolan actionparametre seti get_custom_post_data. die()İşleyicinizin sonunda kendiniz aradığınızdan emin olun , aksi takdirde varsayılan değer die(-1)döndürülür. Ayrıca wp_ajax_get_custom_post_data, sitenize giriş yaptıysanız, noprivkancaya çarpmayacağınızdan , oturum açmış olan sürümü (aynı işleyici işlevine, sorun değil) kaydedin .

Javascript için sunucu tarafı yapılandırma

Sunucu tarafı yapılandırma verilerini ( admin-ajax.phpURL gibi ) gönderme hilesi wp_localize_script(). Sayfanın üst kısmına eklenecek bir dizi anahtar ve değer iletirsiniz. Bu muhtemelen başlangıçta yalnızca yerelleştirilebilir dizeler için oluşturulmuştur, ancak bunu yapılandırma verilerini iletmek için de kullanabilirsiniz.

wp_localize_script('storm_json_config', 'storm_config', array(
    'ajaxurl' => admin_url('admin-ajax.php'),
));

storm_json_configtanıtıcı adıdır (daha sonra aykıyı kaldırmak istiyorsanız), storm_configverilerinizi içerecek Javascript nesnesinin adıdır. Statik Javascript dosyanız benzer bir satır içerebilir jQuery.post(storm_config.ajaxurl, ...).

Bueltge'nin benzer bir soruya verdiği cevaba da bakınız .

Eklenti dizininden statik Javascript

Statik bir Javascript dosyasını kendi eklenti dizininizden yüklemek için kullanın wp_enqueue_script(). Bu şöyle görünecektir:

wp_enqueue_script('storm_json', plugin_dir_url(__FILE__) . 'js/json.js', array('jquery'), '20101105');

storm_jsonYine bir tanıtıcı adı nerede , o zaman dosyaya bağlantı, daha sonra bağımlılıklar (olabilir null) ve daha sonra güncellemeleri tarayıcı önbelleklerini yenmek için istek sonra eklenecek bir sürüm numarası verir.


mükemmel cevap. Bu merak ettiğim şeydi ve işe yaramış gibi görünüyor. Artık /wp-admin/admin-ajax.php?action=[action] 'a erişebilir ve bir json sonucu alabilirim. Benim sorun şimdi nerede ajax çağrı yapmak için js koymak. Echo admin_url ('admin-ajax.php') koymam gerektiğinden; url olarak, benim eklentiler js dosyasına koyamazsınız. Öyleyse nasıl canlandırırım? Senaryoyu sayfanın ortasına yazdırmak istemiyorum.
Fırtına

@Storm: Yanıtımı wp_localize_script()sunucu tarafından tarayıcıya yapılandırma verilerini göndermek için kullanabileceğiniz şekilde genişlettim . (Küçük ipucu: @Bir kullanıcı adına eklerseniz , bu kişi yanıtınızı bildirir. Bu yüzden @Mike: I updated the titleyorumunuzu gördüğünden emin olur)
Jan Fabry

Çok teşekkürler Jan. Şimdi tüm paketi anladığımı düşünüyorum. Tamamen anlamak için hepsiyle biraz uğraşmam gerekecek ama çok yardımcı oldunuz! Yanıt kabul edildi =) btw @ notu için teşekkürler. Ama şimdi cevabınıza yorum yaparken, yine de bir uyarı alacaksınız değil mi?
Fırtına

@Storm: Evet, uyarı, yorum yaptığınız sorunun veya cevabın yazarına gider ve ayrıca bir @ önerisinde bahsettiğiniz başka bir katılımcıya gidebilir. Bu yüzden bildiriminizi "ücretsiz" olarak aldım, ancak sizi içermezsem bu mesaj için bir bildirim alamazsınız. Stack Exchange ağının genel meta sitesinde tam bir açıklama var.
Jan Fabry
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.