将字体系列应用于单个连字符在Wordpress中不起作用

时间:2019-02-18 20:03:56

标签: html css wordpress

高级问题:CSS字体样式不适用于跨度内的单个连字符

我们在Wordpress中遇到了一种奇怪的情况,当试图将这种样式应用于以span和class为目标的单个连字符时,非常基本的CSS字体样式无法工作。

HTML非常简单:

<h2>Test<span class="angleHyphen">-</span>Heading</h2>

CSS也是非常简单的:

 @import url('https://fonts.googleapis.com/css?family=Sorts+Mill+Goudy');

    span.angleHyphen {
      font-family:'Sorts Mill Goudy', serif;
    }

问题是Wordpress特有的

如果您在CodePen或普通HTML页面中运行该代码,它将完全按照您的期望工作。但是,当由Wordpress的编辑器-Guttenberg或可视作曲家生成时,它不起作用。如果您要回答(我真的很感谢),我建议您在任何Wordpress环境中进行测试,然后回复“它可以在此CodePen或Stack代码段中使用”。

应用于单个连字符时只有一个问题

这似乎唯一使连字符成为跨度的唯一内容。如果您将范围扩展到包括整个标题,则将正确应用字体(包括连字符)。换句话说,这可行(尽管它并没有为我们提供所需的解决方案):

<h2><span class="angleHyphen">Test-Heading</span></h2>

我们尝试测试的另一种方法:

如果我们应用CSS旋转属性(带有浏览器前缀),该样式将应用于带有单个连字符的跨度,这使我们更加困惑。换句话说,font-family属性不起作用,但是我们可以使用其他CSS属性在某种程度上模拟外观。对于我们来说不幸的是,基于Goudy的字体是客户品牌形象的重要组成部分,并且这种解决方法未被接受。

我已经在wptest.4sdesignstudio.com上创建了该问题的现场演示,其中还包括一些其他注释和示例,如果您感到好奇或想花时间对此进行深入研究。

您将看到没有控制台错误。如果您检查元素,则会看到该字体表明它已被应用。我们已经包含了上面列出的示例,其中将整个标题都包含在跨度中-表明该字体已通过Google字体正确加载。

根据昨天来自Stack的反馈(以及基本的调试),我们尝试了一些其他操作:

  • 使用unicode,十六进制,html代码和html实体添加连字符
  • 在CSS中使用!important
  • 在@import中添加字体粗细,并在CSS中将其作为.angleHyphen的属性添加(该特定字体仅具有单个字体粗细,因此没有必要,但是我们用光了选项)。
  • 将独立的样式以及!important的内联样式添加到100%,以确保没有其他无赖样式覆盖。
  • 将类名称更改为angle-hyphen,以确保数据库中没有区分大小写的问题。
  • 使用CSS添加连字符(例如,内容:“ \ 2010”)

我们最初遇到的问题是Salient的子主题,该主题主要是使用Visual Composer和经典编辑器插件构建的。为了排除那里的冲突,此后,我们使用基本的二十一岁主题和本地的古腾堡编辑器(您将在上面的链接中看到的版本)将其重新加载到新安装中。

我没有要测试的想法。任何建议都受到欢迎和赞赏!在此先感谢Stack社区!

2 个答案:

答案 0 :(得分:2)

Wordpress将破折号变成破折号,将两个或三个破折号变为破折号。通常,从印刷和符号上来说这是正确的做法。保存帖子时会发生这种情况。替换在文件/wp-includes/formatting.php中完成。这是WordPress的核心文件,因此对它的更改很有可能在WordPress更新时被替换,因此请记住,如果进行此更改,则可能必须定期重做。但是,您要更改的变量是$static_characters,并且在$static_replacements中将其替换。

答案 1 :(得分:1)

与@Turnip和@J一样。上面提到的A. Streich,问题在于默认情况下,Wordpress会用破折号替换“连字符”。显然,这样做的目的是使用户更容易在编辑器中通过键入“-”和“ ---”之类的内容在文字内容中添加破折号和破折号。

解决方案是删除functions.php中的wptexturize过滤器函数。看起来像这样:

remove_filter( 'the_content', 'wptexturize' );

但是,正如@ J.A.Streich指出的那样,将其简单地添加到functions.php中很有可能在以后的更新中被覆盖。

如果您正在使用子主题来减轻这些类型的覆盖,则不能仅在子主题的function.php中使用remove_filter选项。 Wordpress首先加载子主题的function.php,然后加载父主题的functions.php,这意味着当您运行子主题的功能时,过滤器尚未加载-没有要删除的内容。

解决方案是在加载父主题的functions.php之后进行回退。您可以像这样在子主题的functions.php中做到这一点:

function remove_parent_filters(){
    remove_filter( 'the_content', 'wptexturize' );
}
add_action( 'after_setup_theme', 'remove_parent_filters' );

我希望以后能对某人有所帮助,因为我讨厌在此上浪费的时间是徒劳的=)。

更新:

尽管上述解决方案对于站点内容中出现的所有连字符实例均适用,但不适用于大型菜单中的实例。由于菜单是在“ the_content”之外生成的,因此没有被提取。

此后,我在子主题的functions.php文件中全局禁用了wptexturize。我们将随着时间的推移查看它是否会随着Wordpress的核心更新而停滞,但这是目前的合理解决方案。

看起来像这样:

add_filter( 'run_wptexturize', '__return_false', 9999 );

该解决方案以及一些有见地的评论摘自以下Stack文章:https://wordpress.stackexchange.com/questions/241454/how-can-i-reliably-and-globally-disable-wptexturize/241468