web-dev-qa-db-ja.com

テーマごとにどの設定/オプションが保存されますか。また、これはテーマの切り替えにどのように影響しますか?

テーマを(私の場合は子テーマに)切り替えると、同じことが変わらないことがわかりました。

  • ウィジェット
  • メニュー

少なくともこれは私がこれまでに見つけたものです:

ウィジェット

テーマを切り替えてもウィジェットを失うことはありません

テーマを切り替えるときにウィジェットを失うことを避けます

メニュー

子テーマに切り替えるとメニュー名が壊れます

私の質問は、活発なテーマに基づいて保存されているものが他にあるかどうか、そしてこの振る舞い全体に関するより多くの情報を見つけることができる場所です。

2
kraftner

いくつかの調査を行った後、この答えは予想よりも少し長くなりましたが、これが本質です:

TL; DR:メニューの配置とウィジェットの配置/順序はテーマごとに保存されるため、テーマを切り替えるときに復元できます。これにはnotにはメニューとウィジェットの個々の設定が含まれないため、これらを変更した場合、これらの変更はWordPressサイトに対してグローバルであり、ロールバックできません。


このすべての詳細に入る前に、もう1つ明確にしましょう。これらは、テーマごとにデフォルトで保存されるものです。これは、テーマごとに保存される可能性のあるものや、テーマを切り替えるときに変更または破損するものが他にないことを意味するものではありません。テーマの切り替え時に保存、変更、または破損する可能性のあるものの短い完全なリスト:

  • カスタム投稿タイプ(1つのテーマに登録されているが、他のテーマには登録されていない)
  • ショートコード(1つのテーマに登録されているが、他のテーマには登録されていない)
  • テーマのカスタムテーマ設定(一部のテーマは設定をテーマごとに保存しますが、子テーマへの切り替えなどでは移行しない場合があります)
  • プラグイン(新しいテーマではサポートされていません)
  • ...

これで準備が整いましたので、メニューとウィジェットの詳細を見てみましょう。

メニュー

実際、Menusの背後にあるデータ構造は簡単ではありません。詳細については this answer をご覧ください

それは主な関連事項について要約するということです。

  1. メニューは、メニュー項目の名前付きセットです
  2. テーマの場所は、メニューを配置できるテーマで定義された名前付きの場所です
  3. メニューは、[外観]> [メニュー]の下のWordPressバックエンドでこれらのテーマの場所に関連付けることができます
  4. これらの関連付けは、テーマごとに保存されます

例を見てみましょう:

  • メニューM1、M2、M3
  • テーマA(テーマロケーションA1およびA2)
  • テーマB(テーマロケーションB1、B2、B3)

これらの関連付けが設定されたテーマAがアクティブになっています。

M1-> A1

M2-> A2

M3-> A2

次に、テーマBをアクティブにします。このテーマにはまだ関連付けが設定されていません。

M1->非アクティブ

M2->非アクティブ

M3->非アクティブ

これを次のように変更します。

M1-> B2

M2-> B2

M3->非アクティブ

テーマAに戻ると、再び次のようになります。

M1-> A1

M2-> A2

M3-> A2

ここで、テーマAとテーマBに影響するM1を削除します。したがって、再びテーマBに切り替えると、次のようになります。

M2-> B2

M3->非アクティブ

これらすべての変更を説明するアニメーションを作成しました。

Animation of what happens to menus when switching themes

落とし穴

  • 既に述べたように、テーマごとに保存されるのはこれらの関連付けのみです。メニューを変更または削除すると、このテーマはアクティブなテーマに関係なくグローバルに影響します。
  • 子テーマは異なるテーマとして扱われます。したがって、すべてのメニューを設定してから子テーマに切り替える場合は、メニューをテーマの場所に再度関連付ける必要があります。

ウィジェット

ウィジェットの場合、状況は少し異なりますが、劇的に複雑でなくても、さらに混乱します。

主な違いは、メニューではこれらのメニュー項目のグループ化がテーマでの使用とは無関係に存在することです。反対にウィジェットでは、このテーマに依存しない中間ステップは存在しません。ウィジェットは、テーマ固有のウィジェット領域に直接割り当てられます。そのため、テーマを切り替えると、メニューの場合よりも少し混乱が生じる可能性があります。もう一度要約しましょう。

  1. ウィジェットがあります
  2. ウィジェットエリアがあります(別名:サイドバー)
  3. ウィジェットは、[外観]> [ウィジェット]の下のWordPressバックエンドのウィジェットエリアに関連付けることができます
  4. これらの関連付けは、テーマごとに保存されます。

テーマの変更で起こることはこれです:

  1. 新しいテーマのウィジェット領域の数が異なる場合、ウィジェットはIDを無視して順序に従って移動します。そのため、ウィジェットエリアの名前に関係なく、テーマAの最初のウィジェットエリアにあったものは、テーマBの最初のウィジェットエリアになります。
  2. 対応するウィジェット領域がないウィジェットは、非アクティブなサイドバー領域に移動されます。
  3. 変更が行われる前にテーマを切り替えるこのプロセスでは、古い構成が古いテーマとともに保存されます。

もう一度例を見てみましょう。

  • ウィジェットW1、W2、W3、W4
  • テーマA(ウィジェットエリアTOP、RIGHT、BOTTOM)
  • テーマB(ウィジェットエリアヘッダー、フッター)

これらの関連付けが設定されたテーマAがアクティブになっています。

W1->トップ

W2->右

W3->ボトム

ここで、テーマBをアクティブにします。ウィジェットは、前述のルールに従って自動的に転送されます。

W1->ヘッダー

W2->フッター

W3->無効なサイドバー

これを次のように変更します。

W1->ヘッダー

W2->フッター

W3->フッター

テーマAに戻ると、以前の構成が復元されるため、再び次のようになります。

W1->トップ

W2->右

W3->ボトム

次に、テーマAとテーマBに影響するW3を削除します。したがって、再びテーマBに切り替えると、次のようになります。

W1->ヘッダー

W2->フッター

これらすべての変更を説明するアニメーションを再度作成しました。

Animation of what happens to widgets when switching themes

落とし穴

  • 繰り返しますが、メニューと同様に、テーマごとに保存されるのはウィジェットの配置と順序だけです。ウィジェットを変更または削除すると、どのテーマがアクティブであっても、この変更はこのウィジェットにグローバルに影響します。

私はこれをできるだけ明確かつ広範囲にしようとしましたが、何か追加したいことやアニメーションに対するフィードバックがある場合は、コメントを残すか、編集を提出してください!

1
kraftner