WP5.5、子主题、定制器和一个奇怪的缓存问题

时间:2020-08-25 作者:George

更新时间:

我创建了一个全新的WordPress安装,复制了基本和基本子主题,并激活了基本子主题。外观/自定义显示与下面第1点所述相同的白色屏幕。

然后我激活了Base,并且外观/自定义屏幕出现了相同的错误,这在之前的WP安装中没有发生。这让我相信我的定制程序代码有问题。我会追根究底的。

我开发了一个自定义主题,我们称之为;“基本”;,基于https://underscores.me/, 这是其他几个儿童主题的样板。基本主题具有几个可通过主题定制器访问的主题mod。我还创作了一个儿童主题Base,即“a.K.a.”;基本子项“;,现在只包含样式。css文件,复制如下:

/*
Theme Name: Base Child
Template: base
Theme URI: https://blabla.com/
Author: Me
Author URI: https://blabla.com/
Description: Base Child
Version: 1.0.0
Text Domain: base-child
Tags: custom-background, custom-logo, custom-menu, featured-images, threaded-comments, translation-ready
*/
只安装了以下插件:

ACF照片库字段(免费版)高级自定义字段(免费版)

  • 简单的页面排序
    1. 当基本主题被激活时,一切正常,这意味着所有自定义帖子类型都存在,主题定制器工作完美,所有短代码的行为都像它们应该的那样,等等。

      从现在起,事情会变得很混乱,所以请对我耐心点。一旦我激活了Base Child,奇怪的事情就开始发生了:

      如果我进入“外观/自定义”,屏幕上只显示;您正在自定义站点名称;消息,页面标题为;自定义:正在加载"E;永远其他方法都不起作用Uncaught SyntaxError: Unexpected token \'<\' on customize.php on line 5240, 在查看页面源代码时,我发现了一个php错误:Warning: sprintf(): Too few arguments in C:\\wamp64\\www\\base-boilerplate\\wp-includes\\theme.php on line <i>1027</i>style.css. 我很惊讶地看到,所有在Base中创建的自定义帖子类型都以二十个孩子的身份出现在Base Child中。关于外观/自定义,我得到了与第1点相同的行为。这就好像卑鄙的孩子还是卑鄙的孩子一样style.css. 转到浏览器,看起来Base Child仍然是二十岁的孩子。无自定义帖子类型,无外观/自定义问题

      请帮忙。

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

    我找到了罪犯。

    我的定制程序代码中有几个主题mod,其中一个是页脚文本,其中包含一些;“变量”;喜欢%year%%site% 在默认值中,将替换为前端中的实际值。只要我用{{year}}{{site}} 事情开始正常运转。

    回顾一下sprintf() 收到PHP警告,使用% 这个标志造成了混乱,尤其是%site% 以a开头%s, 已传递给sprintf() 正如雅各布所提到的:

    如果修改名称不存在,那么$default将通过sprintf()PHP函数传递,模板目录URI作为第一个字符串,样式表目录URI作为第二个字符串。

    所以sprintf() 收到额外的%s, 没有预期的参数。警告是在内联JavaScript中生成的,因此破坏了语法。

    因此,如果要在中使用变量或文本占位符$default 主题mod的值,避免使用% 作为分隔符。。。

    SO网友:Jacob Peattie

    在WordPress中,当前主题和父主题存储在数据库中,作为template (父主题)和stylesheet (子主题)中的选项wp_options. 当您根据已激活主题的目录名激活主题时,会设置这些名称Template: 主题样式的标题。css(如果存在)。

    这些选项用于确定从哪个目录加载文件,例如函数。php和加载的任何文件get_template_directory_uri()

    由于父主题是在激活子主题时设置的,因此如果您试图通过编辑子主题的样式来更改父主题。css激活后,父主题将不会更改,因为数据库仍然具有旧值。您需要停用并重新激活主题,以便识别对父主题的任何更改。

    这涵盖了第3-8点。关于第2点中的错误,JS错误几乎肯定是由PHP错误引起的。根据行号判断,PHP错误似乎是由使用get_theme_mod() 默认值(第二个参数)包含%s 在它的某个地方。如果存在,则将其视为sprintf字符串,并出于某种原因传递父主题和子主题URI。看来如果太多%s 如果存在,这将抛出您看到的错误。文档中的这一行可能提供了线索:

    如果修改名称不存在,那么将传递$默认值sprintf() PHP函数,模板目录URI为第一个字符串,样式表目录URI为第二个字符串。

    老实说,我完全不知道这到底是为了什么,也找不到任何关于这种行为的提及或讨论。

    相关推荐

    Show content from database

    这是我在Wordpress StackExchange上的第一篇帖子,所以请温柔一点。我在WordPress工作了一段时间,但更多的是作为前端开发人员,而不是太多的后端开发人员。我有在Joomla工作的背景(不要对我不利……)我正在从事一个当前的项目,其中一个API正在将数据注入数据库,WordPress网站有权访问的内容(尚未决定是WordPress数据库还是外部数据库。数据基于艺术品,因此各种数据与每件艺术品相关,还需要搜索/筛选选项来查看数据库中的各种数据。我的问题是,我如何获取数据以显示在网站前端