web-dev-qa-db-ja.com

テーマを削除したら設定を削除しますか?

テーマがテーマディレクトリから削除された(無効にされていない)場合にのみアクションを実行することは可能ですか?

たとえば、テーマが削除された後にデータベースからテーマ設定を削除したいとします。それで、テーマが削除されたときにこれを実行したいです。

delete_option( 'mysettings' );
4
jay

他の答えが暗示しているように思われるように、これを行うための組み込みの方法はありません。 に似たテーマアンインストールAPIはありません - プラグイン用 。テーマが自分自身をアンインストールすることができるように、実際に 長年のチケット はこの機能をWordPressコアに追加するためのものです。 コンセンサス from リード開発者 /これはテーマに持たせたい機能ではないということがあるようです。その論理的根拠が何であるか私はよくわかりません。たぶんあなたは彼らにそれの利点を説明するのを助けることができます。

2
J.D.

テーマ設定によってどのオプションが生成されたかを知ることは非常に複雑です。

しかし、あなたが例えばWoocommerceのような名前変換に従うならば(Woocomerceによって作成されたすべてのオプションはプラグインディレクトリ名としてwoocommerce_*およびwoocommerceのような名前を持ちます)。テーマオプションの検索や削除が簡単になります。

テーマのオプションについては、これを探すことができます。

現在のテーマがDeepfocusと呼ばれる場合、そのオプション名はdeepfocus_ *のようになります。

現在のテーマがTwenty Twelveの場合、オプション名はtwentytwelve_ *のようになります。

:私はテーマ固有のオプションを削除するためにこれらの規約に従う簡単なプラグイン( WP-Delete-Theme-Option )を作成しました。

プラグインはテーマのディレクトリ名からオプション名を生成します。

0
Ravinder Kumar

それは本当に私が思うテーマ作者に完全に依存します...あるものは他のものより良いガベージコレクションをします。原因を突き止めようとしているwp_optionsテーブルを完全に調べ終えたところです。その間に、テーマを削除してサーバーから削除されて以来、非常に多くのテーマオプションが見つかりました。幸いなことに、私が自分のテーブルを削除して整理したいと考えているオプションが最も多いのは、作者がすべての「自分の」ファイルにNiceという接頭辞を付けて、簡単に識別できるようにしたことです。あなたのテーブルに入って、これがあなたの場合であるかどうか確かめてください。もしそうなら、あなたは適切なクエリを書くことができます。

また、transientとsite_transientsは一定の時間が経過した後に自分自身を削除することになっています...これも常にそうとは限りません。私は手動でそれらのページとページも削除しました。

それが質問に答えるかどうかはわかりません。それはあなたがphp関数を生成したいようです...私はmySqlクエリを行い、そのようにします。 (もちろんdbバックアップを最初にして!)

0

この部分のコードで私が見つけた唯一のアクション/フィルターフックは

do_action( 'delete_site_transient_' . $transient, $transient );

テーマが正常に削除された後にdelete_site_transient('update_themes');内で呼び出されるfunction delete_theme($stylesheet, $redirect = '')内で呼び出されます。

それで私はdelete_site_transient_update_themesに私の行動を加えてこれをするでしょう。このアクションでは、いくつかの条件(テーマの名前)を確認してからいくつかのオプションを削除できます。

もちろん、このコードはテーマが非アクティブでそのディレクトリがサーバから削除された後に呼び出されます。だから、あなたはそのテーマの中にこのアクションを追加することはできません(それはいいでしょう)そしてあなたはそれを何らかのプラグインの中に置かなければなりません。 (テーマが削除された後にテーマオプションが削除されることを確認するためだけに追加のプラグインをインストールするのが賢明であるかどうか私は確信していません).

0

私は質問を理解したかどうかわからないので、最初にそれを言い換えるつもりです、しかし、私がそうするならば、私はこれのための回避策をしました。

質問を次のように理解する

テーマが無効化されている場合、サイトオプションは保持されるため、再度有効化されている場合は再入力する必要はありませんが、削除すると完全に削除されます。

テーマではなくプラグインの無効化とアンインストールのフックについて話すので、これは完全な答えではありません。

  1. 無効にすると、オプション設定を小さなバックアップテーブルにプッシュしました。
  2. アクティブにすると、バックアップテーブルが存在するかどうかを確認し、存在する場合は、バックアップからオプション設定を復元してテーブルを削除します(または単に行を確認して行を削除します)。それが明らかにwoocommerceの上のメモのようなテーマに結び付けられるようにあなたがテーブルに名前を付けることを確認してください。また、最新の設定が使用可能になるように、使用後は必ず設定を削除してください。
  3. 削除時には、通常どおりに動作します(これにより、オプション設定が完全​​に消去されます)。

こうすれば、プラグインとテーマの競合をチェックするために無効にする必要がある場合に、ユーザーがオプション設定をやり直す必要がなくなります(最近Wooテーマで行ったように)。

0
Margaret Fisk