web-dev-qa-db-ja.com

JavaScript APIはありますか? JSでパブリックデータとプライベートデータにアクセスする方法

によると、この記事 Wordpressには組み込みのJavaScript APIはありません。したがって、AJAXを基にしたい開発者は、自分には向いていないような独自の解決策を思いついたようです。

私が投稿をフェッチしたり、内蔵のAPIを使ってデータを取得したりすること以外に欠けているのは、バックエンドとフロントエンドのインターフェースを扱うためのJavaScript関数の小さなセットです。さて、この問題に関して何か計画はありますか?

例えば、私はそれを知りたいのですが

  • 左側のメインメニューは折りたたまれています
  • ログインしているユーザー
  • 彼がどのグループなのか
  • ブラウザのようなクライアントデータも

など。

8
stackoverclan

TL; DR

WordPressコアにはJavaScript APIがなく、誰も計画していませんが、実際には必要ありません。

バックエンド

まず第一に、バックエンドに関して、すでに存在するJavaScriptグローバル変数からいくつかの有用な情報を取得できるとしましょう(WordPressはすべてのグローバルフレーバーを愛しています)。

例えば。

  • ajaxurl ajax呼び出しで使用されるadmin-ajax.php url
  • pagenowは、現在の管理ページのスラッグ用です。 「ダッシュボード」
  • adminpageは、現在の管理ページファイル用です。 'index-php'(ドットはハイフンに置き換えられます)
  • typenowは、edit.phppost.php、またはpost-new.phpにいる間の現在の投稿タイプ
  • userSettingsは、現在ログインしているユーザーの情報を取得するために使用できます

これらの情報は、バックエンドにいる間のアプリケーションの状態の「コンテキスト」を提供します。

質問で言及されている他のことについては、「API」は必要ありません。超単純なjQuery関数がトリックを実行できるからです。たとえば管理メニューが閉じているかどうかを知るには、「folded」クラスの本文を確認できます。

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

ドキュメントの欠如

前のスニペットのようなものについては、関数を作成する価値はありません。 WPには既にPHPの関数が多すぎます。これらのような追加機能がコアに追加されないことを本当に望みます。

WordPressのJavaScriptが本当に必要とするのは詳細なドキュメント既存の機能の場合:上記で書いたものはどれもCodexなどの公式ドキュメントやソースファイルには記載されていません。

フロントエンド?

ここまでは、バックエンドについてのみ説明しました。

これは、フロントエンドで発生するほとんどすべてのことが、現在使用中のテーマに関連しているためです。現在のアプリケーションの状態に関する情報を取得するための関数を含むWordPressによって提供されるJavaScriptファイルがあるとします。テーマがそのJSファイルをキューに登録しない場合、これらの関数は利用できず、そのようなスクリプトをキューに登録するforceが絶対に間違っています。

(別の)APIは不要

ただし、WordPressでは、every PHPを介して取得できる情報はJavaScriptでも簡単に使用でき、AJAXリクエストは必要ありません。これを可能にする関数は wp_localize_script() です。

JavaScriptで現在のユーザーとそのユーザーロールなどのユーザーデータを取得し、現在のページで使用されているクエリ変数も知りたいと仮定すると、次のことができます。

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

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

スクリプトでこれを行うと、MyScriptData.user変数は、すべてのユーザー情報とすべてのクエリ変数を持つJavaScriptオブジェクトになります。

これは、バックエンドスクリプトとフロントエンドスクリプト(つまり、「サイド」の両方)に有効です。その情報を取得するためだけにadditionalJavaScript APIは必要ありません。適切な方法を使用してPHPからJSに情報を渡す場合は、PHPで十分です。

Backbone.js

Backbone.js は、JavaScriptによる(一種の) MVC 開発パターンを可能にするJavaScriptフレームワークです。これは、主にメディアギャラリーを処理するために、WP 3.5のコアに含まれていました。

このライブラリはWordPress JavaScript APIではありません。確かに、より強力なJavaScript開発が可能になりますが、WordPress固有の単一の機能がそのライブラリに追加されたわけではなく、唯一のcurrent Backbone.jsのコア使用。メディアライブラリは、ほとんど文書化されておらず、パブリックAPIはありません。そして、そのギャップを埋めることは計画されていません。 (誰かが私を間違っていると証明できるなら、その声明を変更/削除してうれしいです)。

WP-API

RarstおよびBrian Fegterで指摘されているように、WP APIはコアの一部になります(おそらくWP 4.1以降)。

しかし、それはnot JavaScript APIだと言わざるを得ません。 HTTPリクエストを、WP-APIによって制御されるアプリケーションエンドポイントに接続することができます。また、APIはデータベースからデータを取得し、そこでフォーマットされたJSONを返します。ドキュメントの例:

サイトの投稿を取得したいですか? GETリクエストを/wp-json/postsに送信するだけです。 ID 4のユーザーを更新しますか? POSTリクエストを/wp-json/users/4に送信します。検索用語「すごい」ですべての投稿を取得しますか? GET /wp-json/posts?filter[s]=awesome

HTTPリクエストと関連するJSONレスポンスは任意の言語で処理できるため、HTTPリクエストとJSONデータ形式(特にPHP、Ruby、Python、ASPなど)をサポートしているため、WP API主な目的は、非WPアプリケーションからWordPressデータを取得および設定できるようにすることです。これは、WordPressだけでなく、内部から任意のアプリケーションを意味します。

もちろん、JavaScriptはHTTPリクエストとJSON形式の両方を処理できる言語なので、WordPress JavaScript内からWP-APIを使用することもできます。誰かが WP js client のAPIについても取り組んでいますが、

  • wp_enqueue_script() + Ajax API + WordPress PHP関数を使用すると、追加のAPIなしで必要なすべての情報を取得できます。そして、3つの「成分」はすべてWP確立された標準であるため、それらを使用することは「独自のソリューション」ではありません。標準のソリューションを使用してカスタム(および一般的な)タスクを実行するだけです。これが、このプラグイン開発のすべてです。

  • javaScriptを使用してWP APIを利用することもできます。 WP-APIがJSONを返すという理由だけでnotを実行してJavaScript APIにします。関係するJavaScript関数はありません(HTTPリクエストが送信され、JSONリポジトリが返されます。AJAX APIを使用した場合とほぼ同じです)。それ以外の場合、JSONを返すサービスはWordPress JS APIと見なされる必要があります。 WP-APIは、JSONを返す外部サービスAPIと見なされる必要があります。このJSONサービスを使用するサイトは、それを提供するサイトと同じである場合があります。

  • WP APIで実行できることは1つもありませんが、AJAX APIを使用しても実行できません。しかし、AJAX APIでできることはたくさんあります。ただし、WP-APIではnot

WP-API + Backbone.jsに関する注意

Backbone.jsを使用すると、 RESTful HTTPリクエストをサポートするアプリケーションで情報を取得および保存できます。

問題は、「通常の」リクエストとAJAXリクエストの両方でWordPressがRESTful以外のすべてであることです。デフォルトで$_GETおよび$_POSTリクエストのみをサポートし、同じURlを持つotherは...同じ結果になります。

それどころか、WP APIはRESTfulであるため、Backboneベースのアプリケーションは強力なJavaScriptアプリケーションに利用できますが、BackboneまたはWP APIまたはBackbone + WP上記のことに対するWordPressのJavaScript APIとしてのAPI。

6
gmazzap

4.1リリースにマージされた であることが想定されているJSON REST AP​​Iの周りにかなりの開発がありました。正式には「WP API」と呼ばれるようになると思います。今すぐコードベースの使用を開始し、コアになるまで最新の開発 here についていくことができます。 Ryan McCue氏とチームはかなり良いドキュメント ここ を作成しました。

4
Brian Fegter

歴史的にWPはバックエンド中心でしたが、今ではJSの多用に向けて動くことについて何年もの間宣言されていました。後方互換性のコミットメントを念頭に置いて、JSがパリティを達成するかPHPをいつでも引き継ぐかどうかは疑わしいです(私の意見では)が、ある程度進歩しています。

WordPressの管理者は、BackboneとUnderscoreを同梱しています。これらは、最新のメディアライブラリの反復作業の大部分を占めていました。残念ながら、実装の詳細は非常に文書化されておらず、第三者による使用は比較的人気がありません。

REST AP​​I pluginは 「機能プラグイン」 として開発されており、将来的にはWordPressコアに含まれる予定です。

3
Rarst

あなたの発言に答えるには:

[...] Wordpressには組み込みのJavaScript APIはありません。したがって、Ajaxを基にしたい開発者は、自分には向いていないような独自のソリューションを思いついたようです。

行うべき「独自の解決策」はありません。 ATPをajax_template_part()@GMまたは同様のプラグインを使用してショートカットを作成することで、作業を簡単にすることができますが、それでもWordPressでAJAXを使用する非標準的な方法はありませんこれらの "独自の解決策" /方法は(大体)間違ったやり方。AJAX呼び出しは(おおよそ)次のように行われます。

  1. コンテキストアウェアフックにAJAXコールバックを登録する(パブリックまたはプライベート/ログイン)
  2. スクリプトの登録、エンキュー、ローカライズ
  3. JQueryの$.ajax()と同様の関数を使ってユーザーの操作に反応します。グローバル(ローカライズ済み)JSオブジェクトを操作して、データをPHPコールバックに返します。
  4. PHP cbの内部では、データの検証、フィルタ処理、サニタイズ、Noncesと参照元の確認、DBの処理、およびwp_send_json_success()などの関数を使用してJSONifyingデータを返します。

プラグインやテーマがそのようにしていないのであれば、作者は物事を読んだり、例を見たりしませんでした。 isを使うためのスケルトンがあります。

AJAX内のWPの取り扱い方法に関するより詳細な情報は、コミュニティブック "WordPressTheRightWay"にあります

私が投稿をフェッチしたり、内蔵APIを使ってデータを取得したりすること以外に欠けているのは、バックエンドとフロントエンドのインターフェースを扱うためのJavascript関数の小さなセットです。 [...]たとえば、左側のメインメニューが折りたたまれていること、ログインしているユーザー、自分が所属しているグループ、ブラウザなどのクライアントデータであることを知りたいです。

WordPressは、あなたがAJAXを使うために必要なwhatに特定のものではありません。だからこそ、ほとんどすべてをローカライズされた/グローバル化された配列に詰め込んで、それをAJAX呼び出しに使用できるようにすることができます。そしてそれは、Backboneがどのように機能するかと完全に一致しています。それらを実行するには、あなたが好きなことをしなければなりませんwant

あなたがAngularJsのような意見のあるJavaScript MVCフレームワークを使いたいのなら、あなたは間違った場所にいます。そのための基盤を提供する上ではるかに優れているOctoberCMS、Drupal8などのような他のCMSがあります。 WordPressでは、JSコントローラ用のデータセットを返すことができるカスタムのRewriteエンドポイントのセットを構築する必要があります。

3
kaiser