哪些设置/选项是按主题保存的,这对主题切换有何影响?

时间:2014-05-27 作者:kraftner

我意识到,当切换主题时(在我的情况下,切换为儿童主题),有些事情会不一样:

小部件菜单至少这是我目前发现的:

小部件

Don\'t lose widgets when switching themes

Avoid losing widgets when switching themes

菜单

Switching to child theme breaks menu names

我的问题是,是否有任何其他存储在活动主题的基础上,以及在哪里可以找到有关整个行为的更多信息。

1 个回复
最合适的回答,由SO网友:kraftner 整理而成

在做了一些研究之后,这个答案比预期的要长一些,但这是关键:

TL;DR: Menu placement and Widget placement/order is saved on a Theme basis and can therefore be restored when switching Themes. This does not include the individual settings of Menus and Widgets, so if you change them these changes are global to your WordPress site and can\'t be rolled back.


在我详细讨论所有这些之前,让我再明确一点:这些是默认情况下根据主题保存的内容。这并不意味着没有其他东西可以在主题的基础上保存,或者在切换主题时更改或中断。仅列出切换主题时可能会保存、更改或中断的内容的简短而非详尽的列表:

自定义帖子类型(在一个主题中注册,但不在另一个主题中注册)

  • 短代码(在一个主题中注册,但不在另一个主题中注册)
  • 主题的自定义主题设置(某些主题在主题基础上保存其设置,例如切换到子主题时可能不会转换)
  • 插件(新主题不支持)
  • 菜单实际上菜单背后的数据结构并不简单。有关更多详细信息,请查看this answer

    话虽如此,我将回顾一下主要的相关内容:

    菜单是菜单项的命名集,主题位置是在主题中定义的命名位置,您可以在其中放置菜单,菜单可以与WordPress后端中的这些主题位置关联在外观下;菜单然后以主题为基础保存这些关联让我们看一个示例:

    菜单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

      陷阱正如前面所说,在每个主题的基础上保存的唯一东西是那些关联。如果更改或删除菜单,无论哪个主题处于活动状态,此更改都将对该菜单产生全局影响

        小部件

        小部件的情况有点不同,即使不太复杂,也会更加混乱。

        主要区别在于,对于菜单,这些菜单项分组的存在与它们在主题中的使用无关。相反,对于小部件,不存在与主题无关的中间步骤。小部件直接分配给特定于主题的小部件区域。因此,切换主题可能会导致比菜单更混乱的局面。让我们再次回顾一下:

        有小部件有小部件区域(也称为侧栏)

      • 小部件可以与WordPress后端中的小部件区域关联在外观下;小部件然后按主题保存这些关联
      • 主题变化的结果是:

        如果新主题具有不同数量的小部件区域,小部件将根据忽略ID的顺序移动。因此,无论小部件区域如何命名,主题A中第一个小部件区域中的内容将位于主题B中的第一个小部件区域。没有相应小部件区域的小部件将移动到非活动侧栏区域

        控件W1、W2、W3、W4主题A(控件区域顶部、右侧、底部)

      • 主题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

          陷阱再次出现,与菜单一样,每个主题唯一保存的是小部件的位置和顺序。如果更改或删除小部件,无论哪个主题处于活动状态,此更改都将对该小部件产生全局影响


        我试图尽可能清楚和广泛地说明这一点,但如果您有任何需要添加的内容或对动画的任何反馈,请留下评论或进行编辑!

    结束

    相关推荐

    "Widgets" menu doesn't appear

    我正在开发一个WordPress主题,它在我的本地主机和一个live server上运行得很好,但在我的另一个live server上,小部件菜单(从外观)不会出现。是的,所有3台服务器都有相同的3.6.1 WordPress版本,主题文件也相同。知道这是什么原因吗?这是functions.php 注册小部件区域:if (function_exists(\'register_sidebar\')) { register_sidebar(array( \'name\' => \