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


8

この投稿によると、Wordpress用の組み込みJavaScript APIはありません。したがって、AJAXで構築したい開発者は、私には正しくないと思われる独自のソリューションをすべて思いついたようです。

組み込みAPIを使用して投稿やデータをフェッチすることとは別に、私が実際に見逃しているのは、バックエンドとフロントエンドのインターフェースを処理するJavaScript関数の小さなセットです。さて、この問題に関して何か計画はありますか?

たとえば、私はそれを知りたいです

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

など。


1
リクエストは1つだけです。これは最初の投稿ではありません。改行と段落を使用してください。投稿を他の人に読みやすくします。すべてを1つの大きなパラグラフで書くのは少し大変であり、この方法で読者や可能なヘルパーを失う傾向があります。ありがとう
Pieter Goosen 2014年

ありがとう、申し訳ありませんが、少し急いでいたので、二度と起こりません!
stackoverclan 2014年

2
主に意見に基づいてこれを締めくくるに投票した人:投票する前に質問を読んでください。
fuxia

1
問題ない。これは、将来的に役立つヒントにすぎません。よく書かれた明確な質問が良い答えを得るのは事実です:-)。幸運にも私は投票しませんでした、今回は無実ですlol :-)
Pieter Goosen 2014年

回答:


6

TL; DR

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

バックエンド

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

例えば

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

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

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

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ファイルをエンキューしない場合は、それらの機能は利用できませんとする強制的なスクリプトは絶対に間違っているだろうエンキューするテーマを。

(別の)APIは不要

ただし、WordPressでは、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オブジェクトになります。

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

Backbone.js

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

このライブラリは、WordPress JavaScript APIではありません。より強力なJavaScript開発が確実に可能になるためです。しかし、このライブラリには、WordPress固有の関数が1つも追加されておらず、Backbone.jsの現在のコア使用法はこれだけです。メディアライブラリは多かれ少なかれ文書化されておらず、パブリックAPIはありません。そして私の知る限り、そのギャップを埋める計画はありません。(誰かが私に間違いを証明することができるなら-その声明を変更/削除して喜んでください)。

WP-API

RarstBrian Fegterが指摘したように、WP APIはコアの一部になるでしょう(おそらくWP 4.1以降)。

しかし、私はそれがJavaScript API ではないことを言わなければなりません。WP-APIによって制御されるアプリケーションエンドポイントにHTTPリクエストを接続することを許可するだけです。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の主な目的は、WordPressデータの取得と設定を可能にすることです非WPアプリケーションから。つまり、WordPressだけでなく、あらゆるアプリケーションの内部からです。

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

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

  • JavaScriptを使用してWP APIを利用することも可能です。WP-APIがJSONを返すからといって、JavaScript APIにはなりませ。JavaScript関数は含まれていません(HTTPリクエストが送信され、JSON応答が返されます。AJAXAPIを使用して行われるものとほとんど同じです)。それ以外の場合、JSONを返すサービスはすべてWordPress JS APIと見なされます。WP-APIは、JSONを返す外部サービスAPIと考える必要があります。このJSONサービスを使用するサイトが、それを提供するサイトと同じである場合があります。

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

WP-API + Backbone.jsに関するメモ

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

問題は、「通常の」リクエストとAJAXリクエストの両方で、WordPressはすべてRESTfulであるということです。デフォルトでのみサポート$_GETおよび$_POSTリクエストし、同じURlでどちらか一方を使用すると、結果は同じになります。 。

それどころか、WP APIはRESTfulなので、バックボーンベースのアプリケーションは強力なJavaScriptアプリケーションでそれを利用できますが、私は、バックボーンまたはWP APIまたはバックボーン+ WP APIをWordPressのJavaScript APIとして定義しないでください。上記。


よくやった!詳細な回答ありがとうございます。「必要なし」のようないくつかの部分に同意しないにもかかわらず、それは私に多くの洞察と指示を与えます。しかし、それが答えです!
stackoverclan 2014年

回答WP API +バックボーンで述べたように、IMHOをJS APIと見なすことができない場合でも、非常に複雑なjsベースのアプリケーションを作成するための強力な機能を提供できます。GitHubのBackbone wikiには、それを使用する高度なアプリのコレクションがあります。WP APIは、バックボーンのすべての機能を使用するために必要なWordPressデータへのRESTful インターフェースを提供できます。また、Backbone + WordPressに関するこれらのスライドもご覧ください。@ mc007
gmazzap

AJAXエントリポイントの時間がかかりすぎて、簡単なアプリを作成できません。実際にはノーゴー!
stackoverclan 2015年

1
@stackoverclan AJAXエントリポイントは、WordPress環境全体をロードするため低速です。しかし、WP APIもそうなので、それでパフォーマンスのメリットを得ることはできません。国では、を使用SHORTINITすると、ajaxを大幅に高速化できます。WP APIで同じことを行うと、はるかに困難になります。Btp、あなたは本当に本当のスナップアプリですか?ヒント:WordPressは使用しないでください。
gmazzap


3

歴史的にWPはバックエンド中心でしたが、JSの大量使用への移行についてこれまで何年にもわたって宣言がありました。後方互換性のコミットメントを念頭に置いて、JSがすぐに同等になるかPHPを引き継ぐか(私の意見では)は疑問ですが、ある程度の進歩がありました。

WordPress管理者は現在、最新のメディアライブラリーのイテレーションの大部分を占めていたBackboneとUnderscoreを同梱しています。残念ながら、実装の詳細は非常に文書化されておらず、サードパーティによる使用は比較的一般的ではありません。

REST APIプラグインは、将来WordPressコアに含まれることを公式に意図した「機能プラグイン」として開発されています。


素晴らしい、「機能プラグイン」リンクは、実際に何が起こっているのかを理解するのに大いに役立ちます。ハントに行く前に必ずお読みください;-)
stackoverclan

3

あなたの声明に答えるには:

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

実行すべき「独自の解決策」はありません。@GMまたは同様のプラグインでATPをajax_template_part()使用することで物事を緩和近道をすることができますが、それでもWordPressでAJAXを使用する非標準的な方法はありません。それらの「独自の解決策」/方法(ほとんどの場合)は間違っています。AJAX呼び出しは(大まかに)次のように行われます。

  1. AJAXコールバックをコンテキスト認識フックに登録します(パブリックまたはプライベート/ログイン)
  2. スクリプトの登録、エンキュー、ローカライズ
  3. jQuery $.ajax()および同様の関数を使用して、ユーザーの操作に反応します。グローバルな(ローカライズされた)JSオブジェクトを操作して、データをPHPコールバックに返します。
  4. PHP cbの内部では、データを検証、フィルタリング、サニタイズし、Noncesとリファラーをチェックし、DBに関することをwp_send_json_success()行い、JSONifyデータを使用して同様の関数を返します。

プラグインまたはテーマがそのようにしていない場合、作成者は物事を読んでいないか、例を見ていません。そこ使用されるべきもののスケルトンが。

WPでAJAXを処理する方法の詳細については、コミュニティブック「WordPressTheRightWay」を参照してください

組み込みAPIを使用して投稿やデータをフェッチすることとは別に、私が実際に見逃しているのは、バックエンドとフロントエンドのインターフェースを処理するJavascript関数の小さなセットです。[...]たとえば、左側のメインメニューが折りたたまれているか、どのユーザーがログインしているか、どのグループにログインしているか、あるいはブラウザなどのクライアントデータさえも知りたいです。

WordPress は、AJAX でをする必要があるという点で特定されいません。そのため、ローカライズ/グローバル化された配列にほとんどすべてを詰め込んで、AJAX呼び出しで使用できるようにすることができます。そして、それはバックボーンのしくみと完全に一致します。やりたいことをやりたいのです

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


こんにちは、より詳細な回答に感謝します。あなたはすでにいくつかのガイダンスとベストプラクティスを思い付くので、私はそれが好きです。
stackoverclan 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.