web-dev-qa-db-ja.com

添付ファイル分類のバルクチーム割り当り

添付ファイルのカスタム分類法を作成しました。すべて問題ありませんが、今度はデフォルトのwordpress media admin( 'upload.php')の一括操作を使用して、添付ファイルにその用語を一括して割り当てることができるようにしたいです。

ここにwpseで私は管理メディアテーブルの一括操作に関する質問/回答をいくつか見つけました。

これ そして /これ - 他 .

これらは、選択メニューに一括操作を追加する方法についての指示を与えてくれます(フィルタはないので、私はjavascriptを使用する必要があります)が、私の場合は異なります。

一括アクションが選択されたときにリンクされた質問/回答では、ページフォームがすぐに送信されます。代わりに、一括アクションを選択して(例: "Assign Terms")標準投稿で一括[編集]アクションを選択したときに表示されるUIと非常によく似たUIを表示したい(下の画像を参照)。

enter image description here

ここで用語を選択し、最後に「更新ボタン」をクリックして添付ファイルに用語を一括割り当てします。

どうすればこれを達成できますか?

5
gmazzap

質問で述べたように、標準の選択メニューに一括アクションを追加するためのフィルタはありません。それより良いものはありますが、追加アクションではなく削除アクションにのみ使用できます。だから、たとえphp/wp開発者にとって(私のように)それが醜い(そしておそらく醜い)ようであってもたぶんチャンスはjsを使うことです。

悪い知らせは、質問の中の要求を達成するために、私たちもたくさんのJavaScriptを必要とすることです。

代替案はありません。フィルタやアクションがない場合、またはJavaScriptを使用する場合、またはコアファイルを変更する場合です。 2つの悪の間で、小さい方を選びましょう。

ワークフロー

  1. PHP:用語選択UIのHTMLマークアップを出力する関数を作成します。投稿用の標準一括編集UIからたくさんコピーできます 参照
  2. PHP:1.で作成した関数をajaxのアクションにフックする
  3. JS:一括選択メニューにオプションを追加するコードを作成する
  4. JS:[適用]ボタン(テーブルのヘッダーに1つ、フッターに1つ)をクリックしてインターセプトし、prevent_default()を呼び出し、ajaxリクエストでその時点でcreate関数を呼び出す1.結果として与えられたHTMLをテーブルの適切な場所に配置します。
  5. PHP$_POSTから添付ファイルIDの配列と用語の配列(すべての分類法の配列)を受け取る関数を作成し、指定された添付ファイルに用語を割り当てるだけです。
  6. PHP:2番目のajaxアクションで5.で作成した関数をフックする
  7. JS:私たちのUIの[更新]ボタンがクリックされたときに実行されるajax呼び出しを作成します。 (UIはajax経由で追加されるため、jQuery.on()を使用することを忘れないでください)。それは、ポイント5で作成された関数を呼び出し、完了したら、ページをupload.phpにリダイレクトして、管理メッセージを使用して成功またはエラーメッセージを表示するのに役立つクエリ変数を追加します。
  8. PHP:すべてのjsをファイルに保存した後、 'upload.php'のためだけにエンキューし、それにnonceや翻訳文字列などの変数を渡すためにwp_localize_scriptを使用します。

Ajaxリクエストを処理する関数は、nonceのチェックや現在のユーザーが必要なアクションを実行できるかどうかなどのセキュリティチェックを行う必要があることに注意する必要があります。

以下は、一括用語割り当てのためのUIの外観のプレビューです。

enter image description here

階層型と非階層型の分類法の実装が異なること、および非階層型の分類法の実装が提案されていることに注意してください。

誰かが興味を持っているなら、私はここで言われていることをするプラグインを作成しました、そしてもう少し、実際にはプラグインは2に別れています:

  1. 最初の部分はいくつかの標準的な議論を使って添付ファイルの分類法を登録する
  2. 2番目の部分では、添付ファイル用に登録されたすべての分類法に対して、ここで説明されているように一括用語の割り当てを実装します(プラグインによって登録されたものだけではありません)。

誰かが2番目の部分を使用したいが最初の部分は使用したくない場合(すでに必要な分類法がすべて登録されているため)、登録をブロックするためにフィルターが与えられます。

デフォルトの分類法をプラグインに登録させたいがデフォルトの引数が気に入らない場合は、デフォルトの引数を変更するために別のフィルタが提供されます。

ボーナス機能として、3つ目のフィルタを使用すると、他の添付ファイル分類を登録するためにプラグインを使用することができます。プラグインには添付ファイル分類を考慮して設定されたデフォルト引数が多数あり、逆にregister_taxonomyのデフォルト引数があります。ポスト分類法を念頭に置いて設定されています。

プラグインは、ローカライズを容易にするために独自のテキストドメインも実装しています。

プラグインコードは GitHub にあります

5
gmazzap