TL; DR
Không có API JavaScript trong lõi WordPress và không ai có kế hoạch, nhưng thực sự, không cần nó.
Cuối tuần
Trước hết, hãy nói rằng, liên quan đến phần phụ trợ, một số thông tin hữu ích có thể được tìm nạp từ các biến toàn cầu JavaScript đã có (WordPress yêu thích tất cả các hương vị toàn cầu).
Ví dụ
ajaxurl
cho admin-ajax.php
url được sử dụng trong các cuộc gọi ajax
pagenow
đối với sên trang quản trị hiện tại, ví dụ: 'bảng điều khiển'
adminpage
đối với tệp trang quản trị hiện tại, ví dụ: 'index-php' (dấu chấm được thay thế bằng hiphens)
typenow
cho loại bài đăng hiện tại trong khi edit.php
, post.php
hoặcpost-new.php
userSettings
có thể được sử dụng để có được thông tin người dùng đăng nhập hiện tại
Những thông tin đó cung cấp cho bạn một số "bối cảnh" của trạng thái ứng dụng khi bạn đang ở trong phần phụ trợ.
Đối với những điều khác được đề cập trong câu hỏi, bạn không cần bất kỳ "API" nào, bởi vì các hàm jQuery siêu đơn giản có thể thực hiện thủ thuật. Ví dụ: để biết menu quản trị có bị đóng hay không, bạn có thể kiểm tra lớp "gấp" trong cơ thể:
if ( $(body).hasClass('folded') ) {
alert( 'Admin left menu is closed!' );
} else {
alert( 'Admin left menu is open!' );
}
Thiếu tài liệu
Đối với những thứ như đoạn trích trước, không đáng để tạo chức năng. WP đã có quá nhiều chức năng trong PHP. Tôi thực sự hy vọng rằng các chức năng bổ sung như những chức năng đó sẽ không được thêm vào cốt lõi.
Những gì JavaScript trong WordPress thực sự cần là nhiều tài liệu hơn cho các tính năng hiện có: không có điều gì tôi viết ở trên được ghi lại trong bất kỳ tài liệu chính thức nào như Codex hoặc trong các tệp nguồn.
Frontend?
Cho đến đây tôi chỉ nói về phần phụ trợ.
Điều này là do khá nhiều tất cả những điều xảy ra trên frontend đều liên quan đến chủ đề hiện đang sử dụng. Hãy tưởng tượng có một tệp JavaScript được cung cấp bởi WordPress có chứa các hàm để lấy thông tin về trạng thái ứng dụng hiện tại; nếu một chủ đề không mê hoặc tệp JS đó, thì các chức năng đó không có sẵn và để buộc một chủ đề phải xử lý một tập lệnh như vậy sẽ hoàn toàn sai.
Không cần API (khác)
Tuy nhiên, trong WordPress, mọi thông tin bạn có thể nhận được thông qua PHP cũng có thể dễ dàng được sử dụng trong JavaScript và không có bất kỳ yêu cầu AJAX nào. Chức năng đó làm cho điều này có thể là wp_localize_script()
.
Giả sử bạn muốn lấy dữ liệu người dùng và người dùng hiện tại như vai trò người dùng của nó trong JavaScript của bạn và bạn cũng muốn biết các biến truy vấn được sử dụng trong trang hiện tại, bạn có thể thực hiện như sau:
$data = array(
'user' => wp_get_current_user(),
'query_vars' => $GLOBALS['wp']->query_vars
);
wp_localize_script( 'myscript', 'MyScriptData', $data );
Làm như vậy trong tập lệnh của bạn, MyScriptData.user
biến sẽ là một đối tượng JavaScript với tất cả thông tin người dùng tất cả các biến truy vấn.
Điều này hợp lệ cho các tập lệnh phụ trợ và frontend (nói cách khác: cho cả hai "bên"). Không cần bất kỳ API JavaScript bổ sung nào chỉ để tìm nạp thông tin đó. PHP là đủ nếu bạn sử dụng các cách thích hợp để chuyển thông tin từ PHP sang JS.
Backbone.js
Backbone.js , là một khung JavaScript cho phép mô hình phát triển MVC (sắp xếp) với JavaScript. Nó được bao gồm trong lõi với WP 3.5 - chủ yếu để xử lý thư viện phương tiện.
Thư viện này không phải là API JavaScript của WordPress, vì chắc chắn nó cho phép phát triển JavaScript mạnh hơn, nhưng không phải là một chức năng cụ thể của WordPress đã được thêm vào thư viện đó và đó là cách sử dụng cốt lõi duy nhất hiện tại của Backbone.js. Thư viện phương tiện ít nhiều không có giấy tờ và không có API công khai. Và AFAIK nó không có kế hoạch để lấp đầy khoảng trống đó. (Rất vui khi thay đổi / xóa câu nói đó - nếu ai đó có thể chứng minh tôi sai).
API-API
Như được chỉ ra bởi Rarst và Brian Fegter , API WP sẽ là một phần cốt lõi (có thể bắt đầu với WP 4.1).
Nhưng tôi phải nói rằng đó không phải là API JavaScript. Nó chỉ cho phép kết nối một yêu cầu HTTP với một điểm cuối ứng dụng được điều khiển bởi WP-API. Và API lấy dữ liệu từ cơ sở dữ liệu và trả về JSON được định dạng ở đó. Ví dụ từ các tài liệu:
Bạn muốn có được bài viết của trang web của bạn? Đơn giản chỉ cần gửi một GET
yêu cầu đến /wp-json/posts
. Cập nhật người dùng bằng ID 4
? Gửi POST
yêu cầu đến /wp-json/users/4
. Nhận tất cả các bài viết với thuật ngữ tìm kiếm GET /wp-json/posts?filter[s]=awesome
.
Vì các yêu cầu HTTP và phản hồi JSON có liên quan có thể được xử lý với bất kỳ ngôn ngữ nào hỗ trợ các yêu cầu HTTP và định dạng dữ liệu JSON (trong số đó có PHP, Ruby, Python, ASP, v.v.), mục đích chính của API WP là cho phép lấy và đặt dữ liệu WordPress từ các ứng dụng không phải WP. Điều đó có nghĩa là từ bên trong bất kỳ ứng dụng nào , không chỉ WordPress.
Chắc chắn, vì JavaScript là ngôn ngữ có thể xử lý cả yêu cầu HTTP và định dạng JSON, nên bạn cũng có thể sử dụng WP-API từ bên trong JavaScript JavaScript. Ai đó cũng đang làm việc trên máy khách WP js cho API đó, nhưng
bằng cách sử dụng wp_enqueue_script()
+ API Ajax + các chức năng PHP của WordPress, có thể truy xuất tất cả thông tin bạn cần mà không cần bất kỳ API bổ sung nào. Và vì cả ba "thành phần" đều là tiêu chuẩn đã được WP thiết lập, sử dụng chúng không phải là "giải pháp riêng". Nó chỉ sử dụng các giải pháp tiêu chuẩn để thực hiện các tác vụ tùy chỉnh (và phổ biến), đó là những gì mà sự phát triển của plugin này hướng tới.
thậm chí có thể sử dụng JavaScript để sử dụng API WP. Chỉ vì WP-API trả về JSON, nó không biến nó thành API JavaScript. Không có chức năng JavaScript nào liên quan (yêu cầu HTTP được gửi và trả lại JSON được trả lại. Khá giống với những gì xảy ra bằng cách sử dụng API AJAX). Mặt khác, bất kỳ dịch vụ nào trả về JSON phải được coi là API API của WordPress. WP-API nên được coi là API dịch vụ bên ngoài trả về JSON và có thể trường hợp trang web sử dụng dịch vụ JSON này cũng giống như trường hợp cung cấp dịch vụ JSON.
không có một điều gì có thể được thực hiện với API WP mà cũng không thể thực hiện được bằng cách sử dụng AJAX API. Nhưng có rất nhiều thứ có thể được thực hiện với AJAX API. nhưng không phải với WP-API.
Một lưu ý về WP-API + Backbone.js
Với Backbone.js, có thể nhận và lưu thông tin trong các ứng dụng hỗ trợ các yêu cầu HTTP RESTful .
Vấn đề là WordPress, cả trong các yêu cầu "thông thường" và trong AJAX, đều là RESTful: Nó chỉ hỗ trợ $_GET
và $_POST
yêu cầu theo mặc định, và sử dụng một hoặc một cái khác có cùng URl kết quả trong ... cùng một kết quả .
Ngược lại, API WP là RESTful, vì vậy các ứng dụng dựa trên Backbone có thể tận dụng lợi thế của nó cho các ứng dụng JavaScript mạnh mẽ, nhưng tôi sẽ tránh việc xác định Backbone hoặc WP API hoặc Backbone + WP API làm API JavaScript cho WordPress. ở trên.