Có API JavaScript không? Làm thế nào để truy cập dữ liệu công khai và riêng tư trong JS?


8

Theo bài đăng này, không có API JavaScript tích hợp cho Wordpress. Do đó, các nhà phát triển muốn xây dựng trên AJAX dường như đưa ra tất cả các giải pháp của riêng họ mà dường như không phù hợp với tôi.

Điều tôi thực sự nhớ ngoài việc tìm nạp bài đăng hoặc bất kỳ dữ liệu nào với API tích hợp là một tập hợp nhỏ các hàm JavaScript để xử lý giao diện back-end và front-end. Bây giờ, có bất cứ điều gì được lên kế hoạch liên quan đến vấn đề này?

Chẳng hạn, tôi rất muốn biết rằng

  • menu chính bên trái bị thu gọn,
  • những gì người dùng đã đăng nhập
  • anh ấy thuộc nhóm nào
  • thậm chí dữ liệu khách hàng như trình duyệt

và kể từ đó trở đi.


1
Chỉ cần một yêu cầu, đây không phải là bài viết đầu tiên của bạn, vui lòng sử dụng các ngắt dòng và đoạn văn. Làm cho bài viết của bạn dễ đọc hơn cho người khác. Viết tất cả mọi thứ trong một paragrahp lớn là một chút nhiều và bạn có xu hướng mất độc giả và người trợ giúp có thể theo cách này. Cảm ơn bạn
Pieter Goosen

cảm ơn, xin lỗi, đã hơi vội vàng, sẽ không xảy ra lần nữa đâu!
stackoverclan

2
Để bất cứ ai bầu chọn để đóng cái này chủ yếu dựa trên ý kiến : Vui lòng đọc câu hỏi trước khi bạn bỏ phiếu.
fuxia

1
Không vấn đề gì. Nó chỉ là một mẹo để giúp bạn trong tương lai. Đó là một thực tế rằng các câu hỏi rõ ràng bằng văn bản nhận được câu trả lời tốt :-). May mắn là tôi đã không bỏ phiếu, lần này tôi vô tội, lol :-)
Pieter Goosen

Câu trả lời:


6

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ụ

  • ajaxurlcho admin-ajax.phpurl đượ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)
  • typenowcho loại bài đăng hiện tại trong khi edit.php, post.phphoặ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.userbiế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 RarstBrian 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 GETyêu cầu đến /wp-json/posts. Cập nhật người dùng bằng ID 4? Gửi POSTyê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$_POSTyê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.


công việc tốt đẹp! cảm ơn bạn đã trả lời chi tiết; điều đó mang lại cho tôi nhiều hiểu biết và chỉ dẫn, mặc dù tôi không đồng ý về một số phần như 'không cần'. Tuy nhiên, đó là câu trả lời!
stackoverclan

Như đã nói trong câu trả lời WP API + Xương sống, ngay cả khi IMHO không thể được coi là API JS, có thể cung cấp cho bạn rất nhiều sức mạnh để tạo các ứng dụng dựa trên js rất phức tạp. Trong Backbone wiki trên GitHub có một bộ ứng dụng nâng cao sử dụng nó . API WP có thể cung cấp giao diện RESTful cho dữ liệu WordPress cần thiết để sử dụng tất cả sức mạnh của Backbone. Cũng có một cái nhìn về các slide về Backbone + WordPress. @ mc007
gmazzap

điểm vào AJAX mất quá nhiều thời gian để tạo ra một ứng dụng linh hoạt. nó thực sự là không đi!
stackoverclan

1
@stackoverclan Điểm truy cập AJAX chậm vì tải toàn bộ môi trường WordPress. Nhưng API WP cũng vậy, vì vậy bạn không nhận được lợi ích hoàn hảo với điều đó. Về mặt đo lường, sử dụng SHORTINITbạn có thể làm cho ajax nhanh hơn rất nhiều. Làm tương tự với WP API sẽ khó hơn nhiều. Btp, bạn có một ứng dụng snappy thực sự ? Mẹo: không sử dụng WordPress.
gmazzap

4

Đã có khá nhiều sự phát triển xung quanh API JSON REST được cho là sẽ được hợp nhất vào bản phát hành 4.1 . Tôi tin rằng nó chính thức sẽ được gọi là 'API WP'. Bạn có thể bắt đầu sử dụng codebase ngay bây giờ và theo kịp những phát triển mới nhất ở đây cho đến khi nó đi vào cốt lõi. Ryan McCue và nhóm đã bổ sung một số tài liệu khá hay ở đây .


3

Trong khi về mặt lịch sử, WP đã trở lại trung tâm cuối cùng, đã có những tuyên bố được đưa ra trong nhiều năm nay về việc chuyển sang sử dụng JS nặng. Với các cam kết tương thích ngược trong tâm trí, có thể nghi ngờ rằng JS sẽ đạt được tính chẵn lẻ hoặc tiếp quản PHP bất cứ lúc nào (theo ý kiến ​​của tôi), nhưng đã có một số tiến bộ về nó.

Quản trị viên WordPress hiện vận chuyển với Backbone và Underscore, vốn là một phần lớn của phép lặp thư viện phương tiện mới nhất. Thật không may, các chi tiết cụ thể của việc thực hiện là không có giấy tờ và việc sử dụng của bên thứ ba tương đối không phổ biến.

Plugin REST API đang được phát triển dưới dạng plugin tính năng của Wikipedia, với mục đích chính thức sẽ được đưa vào lõi WordPress trong tương lai.


thật tuyệt vời, liên kết 'plugin tính năng' giúp tôi rất nhiều để hiểu những gì đang thực sự xảy ra, nhất định phải đọc trước khi đi săn ;-)
stackoverclan

3

Để trả lời tuyên bố của bạn:

[...] không có API Javascript tích hợp cho Wordpress. Do đó, các nhà phát triển muốn xây dựng trên Ajax dường như đưa ra tất cả bằng giải pháp của riêng họ mà dường như không phù hợp với tôi.

Không có "giải pháp riêng" nào được thực hiện. Bạn có thể dễ dàng điều bằng cách sử dụng ATP vớiajax_template_part() bằng @GM hoặc plugin tương tự và tham gia một cắt ngắn, nhưng vẫn không có cách nào phi tiêu chuẩn để đi với AJAX trong WordPress. Những "giải pháp riêng" / cách (phần lớn) đang làm sai . Các cuộc gọi AJAX (đại khái) được thực hiện như thế này:

  1. Đăng ký gọi lại AJAX trên hook nhận biết ngữ cảnh (công khai hoặc riêng tư / đăng nhập)
  2. Đăng ký, Enqueue và bản địa hóa tập lệnh
  3. Sử dụng jQuery $.ajax()và các chức năng tương tự để phản ứng với sự tương tác của người dùng. Làm việc với đối tượng JS toàn cầu (cục bộ) để chuyển dữ liệu trở lại cuộc gọi lại PHP.
  4. Bên trong cb PHP, bạn xác thực, lọc và vệ sinh dữ liệu, kiểm tra Nonces và các tham chiếu, thực hiện công cụ DB của bạn và trả về JSONifying dữ liệu bằng cách sử dụng wp_send_json_success()và các chức năng tương tự.

Nếu một plugin hoặc chủ đề không làm theo cách đó, thì tác giả đã không đọc mọi thứ hoặc không nhìn vào các ví dụ. Có một khung cho rằng đó nên được sử dụng.

Thông tin chi tiết và chi tiết hơn về cách xử lý AJAX trong WP có thể được tìm thấy trong cuốn sách cộng đồng "WordPressTheRightWay" .

Điều tôi thực sự nhớ ngoài việc tìm nạp bài đăng hoặc bất kỳ dữ liệu nào với API tích hợp là một bộ chức năng Javascript nhỏ để xử lý giao diện back-end và front-end. [...] Chẳng hạn, tôi rất muốn biết rằng menu chính bên trái bị thu gọn hoặc người dùng nào đã đăng nhập hoặc anh ta thuộc nhóm nào, hoặc thậm chí dữ liệu khách hàng như trình duyệt, v.v.

WordPress đơn giản là không cụ thể trong những gì bạn cần làm với AJAX. Đó là lý do tại sao bạn có thể nhét khá nhiều thứ vào một mảng được bản địa hóa / toàn cầu hóa và có sẵn cho các cuộc gọi AJAX của bạn. Và điều đó hoàn toàn phù hợp với cách hoạt động của Backbone: Bạn phải làm những việc bạn muốn bạn muốn làm chúng.

Nếu bạn muốn sử dụng một số khung công tác JavaScript MVC có ý kiến ​​như AngularJs, thì bạn đang ở sai vị trí. Có những CMS khác như OctCMS, Drupal8, v.v ... tốt hơn nhiều trong việc cung cấp cơ sở cho điều đó. WordPress sẽ yêu cầu bạn xây dựng một bộ Điểm cuối viết lại tùy chỉnh nơi bạn có thể trả lại bộ dữ liệu cho Bộ điều khiển JS của mình.


chào, cảm ơn vì câu trả lời chi tiết hơn Tôi thích nó bởi vì bạn đã đưa ra một số hướng dẫn và thực hành tốt nhất.
stackoverclan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.