web-dev-qa-db-ja.com

ネットワーク/マルチサイトからのプラグインのアンインストール時にすべてのブログからオプションを削除する

Codexはアンインストール時のオプションの削除について述べています

//各ブログのオプションを削除するためにブログを介してループするマルチサイトループには注意してください。あなたはそれらを残すだけでいいのです。

私はあまり期待していませんが、それを行うための確立されたスケーラブルな方法はありますか?理論的にはアンインストールユーティリティプラグインを持つことはできますが、実際にそれを行っている人はいませんでした。それは単なる悪い考えでしょうか、それともDBに残されたゴミを気にする人がいないのでしょうか。

2
Mark Kaplun

これはWikiであるため、コーデックスは信頼性の低い情報源として悪名高く知られています(しかし、おそらく既に知っています)。ただし、巨大なネットワークでのアンインストールでは規模が拡大しないことはおそらく事実です。

私のプラグインの1つで は、 wp_is_large_network() がtrueでない限り、すべてのサイトでプラグインのアンインストールルーチンを実行します。大規模なネットワークでは、プラグインはアンインストールを適切に実行できないと想定しているため、試行しません。

別のことは、プラグインが実際にインストールされているサイトを追跡し(ネットワークがアクティブでない場合)、ネットワークのサイズに関係なくそれらの各サイトでアンインストールするようにすることです。したがって、ネットワーク上に20000のサイトがあり、プラグインが3にしかインストールされていない場合、3つのサイトから自身をアンインストールします。

巨大なネットワークを運用している人々は、常にこの種のことを処理していることに留意することも重要だと思います(たとえば、WordPressを更新するたびに)。ほとんどの場合、インストール/更新/アンインストールはスケーリングされないことを理解しているので、とにかくそのために独自のスクリプトを何度も作成する必要があります。

だから私のプラグインでは基本的に基本的なアンインストールルーチンの提供に焦点を合わせ、スケーリングする必要があるときにそれを実行し、 管理者に通知を表示する おそらくスケーリングしないのでプラグインが試行しない場合それ自体で。

更新(2015-03-16):この議論に関連するtracチケットがあることを思い出しました: #1417 、特に このコメント onから、コア自体がこのAPIを提供しないと判断された理由について非常に有益です。チケットには マルチサイトの最適化に関するいくつかの良いアドバイス :も含まれています。

私がコアでこれに反対している理由は、あなたのプラグインによって正確に示されています。それを通して見ると、awfulたくさんのテーブルを作成しています。ブログごとに6つのテーブルを作成しています。それは合理的な方法でスケーリングすることはできません。

他の多くのプラグインがはるかに少ないフットプリントであるため、ネットワーク管理者はサイトでそれを許可しません。このようなことをするための公式APIを持っているプラ​​グインにはうんざりしています。誰かが自分のネットワーク上であなたのプラグインを望んでいる場合、彼らは自分でそれらのテーブルを生成できるようにそれらのすべてを無効にしようとするでしょう。 (WordPress.comのすべてのサイトのコメントメタテーブルを生成するのに2週間ほどかかりました。)

補足-これらの多くはルックアップテーブルであり、おそらくグローバルテーブルである必要があります。そうでないものは投稿タイプにすることができます。その後、これを行う必要はまったくありません。

3
J.D.