web-dev-qa-db-ja.com

Wordpress 3.5メディアライブラリを使用したマルチサイトネットワークでの1つのメディアライブラリの使用

私は現在、Wordpressが画像のプライマリサイトを常に使用するように修正することを検討しています。私はこれを使って達成しています:

function use_main_blog_library()
{
    echo "<script>alert('is happenin');</script>";
    switch_to_blog(1);
}
add_action('load-media-new.php', 'use_main_blog_library');
add_action('load-media-upload.php', 'use_main_blog_library');
add_action('load-media.php', 'use_main_blog_library');
add_action('load-upload.php', 'use_main_blog_library');

これは古いメディアライブラリでは機能しますが、新しいメディアライブラリは変わりません。プライマリライブラリも使用するように新しいもの(JavaScriptに大きく依存していることがわかっている)を設定できる方法はありますか?

5
Ollie

プライマリサイトを使用してページや投稿を含むすべてのコンテンツをホストしない限り、これは不可能になります。また、最も近い場所にはたくさんの余計な作業が必要になります。

あなたの既存の 'kludge'は多くの深刻な問題を引き起こし、メンテナンスパフォーマンスとセキュリティ問題の時限爆弾でした。これは最初の大きな問題になるでしょう、そして私はもっと来ることを保証することができます。

しかし、それはあなたの最初の問題が無効であることを意味するのではなく、あなたの修正が解決策ではないこと、そして修正のための修正が決して良いことではありません。

なぜそれは悪いのですか?

問題はメディアの保存方法にあります。はい、ファイルはサーバーのディスクに保存されますが、WordPressはデータをファイルに保存するのではなく、添付ファイルとして保存します。

添付ファイルは、投稿タイプが「添付」で、投稿メタ、コメント、分類法、タイトル、投稿ステータスなどを持つ投稿です。また、ネットワーク内の各サイトには独自の投稿テーブルがあり、添付ファイルの親は投稿として設定されているため添付するには、どうやってルートサイトから添付ファイルの投稿を取得し、それを別のサイトのテーブルにまたがる投稿に添付するのでしょうか。投稿親IDは投稿IDであり、サイトIDやネットワークIDは含まれていません。

それは不可能です。あなたはURLを挿入するためにいくつかのハックを試みることができますが、それは多大な努力と面倒なことでしょう。

たとえば、メタの変更、タイトルなどの変更はサイト間で行われません。画像が削除されてもサイト間で更新されず、ギャラリーも機能しないため、投稿がめちゃくちゃになる可能性があります。 - >投稿IDが混乱する添付ファイルの関係。多くのプラグインと機能は正しく機能しません。注目の画像では添付ファイルのURLではなく添付ファイルのIDも保存されるため、これも破損する可能性があります。

古いコードが動かなくなった理由

古いアップローダはthickboxとiframeによって動かされていたので、あなたの古いコードは各タブのためにロードされたページにフックしています。しかしながら、新しいアップローダはthickboxやiframeではありません。それはbackbone.jsによって供給され、完全に書き直されました。

私はそれをどうやるか

私は主図書館にアクセスしないでしょう。代わりに私はメインライブラリを同期させます(微妙な違いに注意してください)。プライマリサイトで添付ファイルの投稿を作成するときは、各ブログに切り替えて複製し、それらのサイトにも表示されるようにします。これはすべてのプラグインと標準機能が期待通りに動作することを可能にし、そして標準的な操作によって保持されたすべての仮定がまだ当てはまる、 そして あなたが望むものを手に入れる。

それに続いて、それがネットワーク上の他のサイトも更新するようにポストエディットタイトルなどにフックします。

最後に、すべてのサイトでプラグインを有効にします。そうすれば、画像がサブサイトにアップロードされた場合、その画像はプライマリサイトに再作成され、残りはすべてのサイトに表示されます。

7
Tom J Nowell