Apakah ada API JavaScript? Bagaimana cara mengakses data publik dan pribadi di JS?

8

Menurut posting ini tidak ada API JavaScript bawaan untuk Wordpress. Oleh karena itu pengembang yang ingin membangun AJAX tampaknya datang dengan solusi mereka sendiri yang sepertinya tidak tepat bagi saya.

Apa yang benar-benar saya lewatkan selain dari mengambil posting atau data apa pun dengan API bawaan adalah serangkaian kecil fungsi JavaScript untuk menangani antarmuka back-end dan front-end. Sekarang, adakah yang direncanakan tentang masalah ini?

Misalnya, saya ingin tahu itu

  • menu utama kiri diciutkan,
  • pengguna apa yang masuk
  • kelompok mana dia,
  • bahkan data klien seperti browser

Dan seterusnya.

stackoverclan
sumber
1
Hanya satu permintaan, ini bukan posting pertama Anda, silakan gunakan jeda baris dan paragraf. Jadikan posting Anda lebih mudah dibaca oleh orang lain. Menulis semuanya dalam satu paragraf besar sedikit banyak dan Anda cenderung kehilangan pembaca dan mungkin pembantu dengan cara ini. Terima kasih
Pieter Goosen
terima kasih, maaf, sedikit terburu-buru, tidak akan terjadi lagi!
stackoverclan
2
Kepada siapa pun yang memberikan suara untuk menutup hal ini sebagai berdasarkan pendapat : Harap baca pertanyaan sebelum Anda memberikan suara.
fuxia
1
Tidak masalah. Ini hanya tip untuk membantu Anda di masa depan. Ini adalah fakta bahwa pertanyaan jelas yang ditulis dengan baik mendapatkan jawaban yang baik :-). Untungnya saya tidak memilih, kali ini saya tidak bersalah, lol :-)
Pieter Goosen

Jawaban:

6

TL; DR

Tidak ada JavaScript API di inti WordPress dan tidak ada yang direncanakan, tetapi sebenarnya, tidak perlu.

Backend

Pertama-tama katakanlah, mengenai backend, beberapa informasi yang berguna dapat diambil dari variabel global JavaScript yang sudah ada (WordPress menyukai semua rasa global).

Misalnya

  • ajaxurlagar admin-ajax.phpurl digunakan dalam panggilan ajax
  • pagenow untuk siput halaman admin saat ini, misalnya 'dasbor'
  • adminpage untuk file halaman admin saat ini, misalnya 'index-php' (titik diganti dengan hiphens)
  • typenowuntuk jenis posting saat ini saat dalam edit.php, post.phpataupost-new.php
  • userSettings dapat digunakan untuk mendapatkan informasi oc pengguna saat ini login

Informasi itu memberi Anda beberapa "konteks" dari status aplikasi saat Anda berada di backend.

Untuk hal-hal lain yang disebutkan dalam pertanyaan, Anda tidak memerlukan "API", karena fungsi jQuery super-sederhana dapat melakukan triknya. Untuk misalnya mengetahui apakah menu admin ditutup, Anda dapat memeriksa kelas "terlipat" di badan:

if ( $(body).hasClass('folded') ) {
  alert( 'Admin left menu is closed!' );
} else {
  alert( 'Admin left menu is open!' );
}

Kekurangan Dokumentasi

Untuk hal-hal seperti cuplikan sebelumnya, tidak perlu membuat fungsi. WP sudah memiliki terlalu banyak fungsi di PHP. Saya sangat berharap bahwa fungsi tambahan seperti itu tidak akan ditambahkan ke inti.

Apa yang benar-benar dibutuhkan oleh JavaScript di WordPress adalah dokumentasi untuk fitur yang ada: tidak ada hal yang saya tulis di atas yang didokumentasikan dalam dokumen resmi apa pun seperti Codex atau dalam file sumber.

Paling depan?

Sampai di sini saya hanya berbicara tentang backend.

Ini karena hampir semua hal yang terjadi di frontend terkait dengan tema yang sedang digunakan. Mari kita bayangkan ada file JavaScript yang disediakan oleh WordPress yang berisi fungsi untuk mendapatkan informasi tentang kondisi aplikasi saat ini; jika suatu tema tidak membuat enqueue file JS itu, fungsi-fungsi itu tidak tersedia dan untuk memaksa suatu tema untuk enqueue skrip seperti itu akan benar-benar salah.

Tidak perlu API (lain)

Namun, di WordPress, setiap informasi yang Anda dapatkan melalui PHP dapat dengan mudah digunakan dalam JavaScript juga dan tanpa permintaan AJAX. Fungsi yang memungkinkan ini adalah wp_localize_script().

Anggap Anda ingin mendapatkan pengguna saat ini dan data pengguna seperti peran pengguna di JavaScript Anda dan Anda juga ingin mengetahui variabel kueri yang digunakan di halaman saat ini, Anda dapat melakukan hal berikut:

$data = array(
  'user'       => wp_get_current_user(),
  'query_vars' => $GLOBALS['wp']->query_vars
);

wp_localize_script( 'myscript', 'MyScriptData', $data );

Melakukannya dalam skrip Anda, MyScriptData.uservariabel akan menjadi objek JavaScript dengan semua informasi pengguna semua variabel kueri.

Ini berlaku untuk skrip backend dan frontend (dengan kata lain: untuk kedua "sisi"). Tidak perlu untuk API JavaScript tambahan hanya untuk mengambil informasi itu. PHP sudah cukup jika Anda menggunakan cara yang tepat untuk meneruskan informasi dari PHP ke JS.

Backbone.js

Backbone.js , adalah kerangka kerja JavaScript yang memungkinkan (semacam) pola pengembangan MVC dengan JavaScript. Itu termasuk dalam inti dengan WP 3.5 - terutama untuk menangani galeri media.

Pustaka ini bukan WordPress JavaScript API, karena tentu saja memungkinkan pengembangan JavaScript yang lebih kuat, tetapi tidak ada fungsi khusus WordPress yang ditambahkan ke pustaka itu dan ini adalah satu-satunya penggunaan inti saat ini dari Backbone.js. Pustaka media kurang lebih tidak terdokumentasi dan tidak memiliki API publik. Dan AFAIK tidak direncanakan untuk mengisi celah itu. (Lebih dari senang untuk mengubah / menghapus pernyataan itu - jika seseorang dapat membuktikan saya salah).

WP-API

Seperti yang ditunjukkan oleh Rarst dan Brian Fegter , WP API akan menjadi bagian dari inti (mungkin dimulai dengan WP 4.1).

Tetapi saya harus mengatakan bahwa itu bukan API JavaScript. Itu hanya memungkinkan untuk menghubungkan permintaan HTTP ke titik akhir aplikasi yang dikendalikan oleh WP-API. Dan API mengambil data dari database dan mengembalikannya JSON diformat di sana. Contoh dari dokumen:

Ingin mendapatkan kiriman situs Anda? Cukup kirim GETpermintaan ke /wp-json/posts. Perbarui pengguna dengan ID 4? Kirim POSTpermintaan ke /wp-json/users/4. Dapatkan semua posting dengan istilah pencarian "luar biasa"? GET /wp-json/posts?filter[s]=awesome.

Karena permintaan HTTP dan respons JSON terkait dapat ditangani dengan bahasa apa pun yang mendukung permintaan HTTP dan format data JSON (di antaranya PHP, Ruby, Python, ASP, dll.), Tujuan utama API WP adalah memungkinkan untuk mendapatkan dan mengatur data WordPress. dari aplikasi non-WP. Itu artinya dari dalam aplikasi apa pun , tidak hanya WordPress.

Tentu, karena JavaScript adalah bahasa yang dapat menangani permintaan HTTP dan format JSON, Anda dapat menggunakan WP-API dari dalam JavaScript JavaScript juga. Seseorang juga bekerja pada klien WP js untuk API itu, tetapi

  • menggunakan wp_enqueue_script()+ fungsi Ajax API + WordPress PHP dimungkinkan untuk mengambil semua informasi yang Anda butuhkan tanpa API tambahan. Dan karena ketiga "bahan" tersebut adalah standar yang ditetapkan WP, menggunakannya bukan merupakan "solusi sendiri". Itu hanya menggunakan solusi standar untuk melakukan tugas kustom (dan umum), yang merupakan inti dari pengembangan plugin ini.

  • bahkan dimungkinkan untuk menggunakan JavaScript untuk menggunakan WP API. Hanya karena WP-API mengembalikan JSON, itu tidak menjadikannya API JavaScript. Tidak ada fungsi JavaScript yang terlibat (permintaan HTTP dikirim dan repositori JSON dikembalikan. Hampir sama dengan apa yang terjadi dengan menggunakan AJAX API). Kalau tidak, layanan apa pun yang mengembalikan JSON harus dianggap sebagai WordPress JS API. WP-API harus dianggap sebagai API layanan eksternal yang mengembalikan JSON, dan mungkin situs yang menggunakan layanan JSON ini sama dengan yang menyediakannya.

  • tidak ada satu hal pun yang dapat dilakukan dengan WP API yang tidak dapat juga dilakukan dengan menggunakan API AJAX. Tetapi ada banyak hal yang dapat dilakukan dengan API AJAX. tetapi tidak dengan WP-API.

Catatan tentang WP-API + Backbone.js

Dengan Backbone.js, dimungkinkan untuk mendapatkan dan menyimpan informasi dalam aplikasi yang mendukung permintaan HTTP tenang .

Masalahnya adalah bahwa WordPress, baik dalam permintaan "biasa" dan dalam permintaan AJAX, semuanya TETAP: Hanya mendukung $_GETdan $_POSTpermintaan per default, dan menggunakan satu atau yang lain dengan URl yang sama berakhir di ... hasil yang sama .

Sebaliknya, API WP RESTful, jadi aplikasi berbasis Backbone dapat memanfaatkannya untuk aplikasi JavaScript yang kuat, tetapi saya akan tinggal jauh dari mendefinisikan Backbone atau WP API atau Backbone + WP API sebagai API JavaScript untuk WordPress untuk hal-hal yang dikatakan atas.

gmazzap
sumber
kerja bagus! terima kasih atas jawaban terinci; itu memberi saya banyak wawasan dan arahan, meskipun saya tidak setuju pada beberapa bagian seperti 'tidak perlu'. Namun, itulah jawabannya!
stackoverclan
Seperti yang dikatakan dalam jawaban WP API + Backbone, bahkan jika IMHO tidak dapat dianggap sebagai JS API, dapat memberi Anda banyak daya untuk membuat aplikasi berbasis js yang sangat kompleks. Di Backbone wiki di GitHub ada koleksi aplikasi canggih yang menggunakannya . WP API dapat menyediakan antarmuka yang tenang untuk data WordPress yang diperlukan untuk menggunakan semua kekuatan Backbone. Lihat juga slide-slide ini tentang Backbone + WordPress. @ mc007
gmazzap
titik masuk AJAX terlalu lama untuk membuat aplikasi yang tajam. itu sebenarnya tidak pergi!
stackoverclan
1
@stackoverclan AJAX entry-point lambat karena memuat seluruh lingkungan WordPress. Tapi begitu juga WP API, jadi Anda tidak mendapatkan manfaat dengan itu. Sebaliknya, menggunakan SHORTINITAnda dapat membuat ajax jauh lebih cepat. Lakukan hal yang sama dengan WP API akan jauh lebih sulit. Btp, apakah Anda benar - benar aplikasi tajam? Kiat: jangan gunakan WordPress.
gmazzap
4

Ada sedikit perkembangan di sekitar JSON REST API yang seharusnya digabungkan ke dalam rilis 4.1 . Saya percaya ini secara resmi akan disebut 'WP API'. Anda dapat mulai menggunakan basis kode sekarang dan terus mengikuti perkembangan terbaru di sini sampai mencapai inti. Ryan McCue dan tim telah menyempurnakan beberapa dokumentasi yang cukup bagus di sini .

Brian Fegter
sumber
3

Sementara WP historis telah sentris back-end, ada deklarasi yang dibuat selama bertahun-tahun tentang pindah ke penggunaan JS berat. Dengan mengingat komitmen kompatibilitas ke belakang, patut dipertanyakan bahwa JS akan mencapai paritas atau mengambil alih PHP dalam waktu dekat (menurut saya), tetapi ada beberapa kemajuan di dalamnya.

Admin WordPress sekarang dilengkapi dengan Backbone dan Underscore, yang telah menjadi bagian besar dari iterasi perpustakaan media terbaru. Sayangnya, spesifikasi implementasi tidak terdokumentasi secara kritis dan penggunaan pihak ketiga relatif tidak populer.

Plugin REST API sedang dikembangkan sebagai "plugin fitur" dengan maksud resmi untuk dimasukkan dalam inti WordPress di masa mendatang.

Jarang
sumber
luar biasa, tautan 'fitur plugin' banyak membantu saya untuk memahami apa yang sebenarnya terjadi, pasti harus dibaca sebelum pergi berburu ;-)
stackoverclan
3

Untuk menjawab pernyataan Anda:

[...] tidak ada Javascript API bawaan untuk Wordpress. Oleh karena itu pengembang yang ingin membangun Ajax tampaknya datang dengan solusi mereka sendiri yang sepertinya tidak tepat bagi saya.

Tidak ada "solusi sendiri" yang harus dilakukan. Anda dapat meringankan hal-hal dengan menggunakan ATP denganajax_template_part() oleh @GM atau plugin yang sama dan mengambil jalan pintas, tapi masih ada cara non-standar untuk pergi dengan AJAX di WordPress. Itu "solusi sendiri" / cara (kebanyakan) melakukannya dengan salah . Panggilan AJAX (kira-kira) dilakukan seperti ini:

  1. Daftarkan callback AJAX pada konteks sadar kait (publik atau pribadi / login)
  2. Daftarkan, Enqueue, dan lokalkan skrip
  3. Gunakan jQuery $.ajax()dan fungsi serupa untuk bereaksi pada interaksi pengguna. Bekerja dengan objek JS global (terlokalisasi) untuk meneruskan data kembali ke panggilan balik PHP.
  4. Di dalam PHP cb, Anda memvalidasi, memfilter dan membersihkan data, memeriksa Nonces dan referer, melakukan hal-hal DB Anda dan mengembalikan data JSONifikasi menggunakan wp_send_json_success()dan fungsi serupa.

Jika plugin atau tema tidak melakukannya dengan cara itu, maka penulis tidak membaca semuanya atau tidak melihat contoh. Ada adalah kerangka untuk itu yang harus digunakan.

Info lebih lanjut dan terperinci tentang cara menangani AJAX di WP dapat ditemukan di buku komunitas "WordPressTheRightWay" .

Apa yang benar-benar saya lewatkan selain dari mengambil posting atau data apa pun dengan API bawaan adalah serangkaian kecil fungsi Javascript untuk menangani antarmuka back-end dan front-end. [...] Misalnya, saya ingin tahu bahwa menu utama kiri diciutkan, atau pengguna apa yang login atau grup mana dia, atau bahkan data klien seperti browser dan sebagainya.

WordPress tidak spesifik dalam apa yang perlu Anda lakukan dengan AJAX. Itu sebabnya Anda bisa memasukkan semuanya ke dalam array lokal / global dan membuatnya tersedia untuk panggilan AJAX Anda. Dan itu sejalan dengan cara kerja Backbone: Anda harus melakukan hal-hal yang Anda inginkan .

Jika Anda ingin menggunakan beberapa kerangka kerja MVC JavaScript yang disarankan seperti AngularJs, maka Anda berada di tempat yang salah. Ada CMS lain seperti OctoberCMS, Drupal8, dll yang jauh lebih baik dalam menyediakan basis untuk itu. WordPress akan meminta Anda untuk membangun set kustom Titik Akhir Menulis Ulang di mana Anda dapat mengembalikan dataset untuk Pengontrol JS Anda.

kaisar
sumber
hai, terima kasih atas jawaban yang lebih detail. Saya suka karena Anda sudah datang dengan beberapa bimbingan dan praktik terbaik.
stackoverclan