我们在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;
}
如果您在CodePen或普通HTML页面中运行该代码,它将完全按照您的期望工作。但是,当由Wordpress的编辑器-Guttenberg或可视作曲家生成时,它不起作用。如果您要回答(我真的很感谢),我建议您在任何Wordpress环境中进行测试,然后回复“它可以在此CodePen或Stack代码段中使用”。
这似乎唯一使连字符成为跨度的唯一内容。如果您将范围扩展到包括整个标题,则将正确应用字体(包括连字符)。换句话说,这可行(尽管它并没有为我们提供所需的解决方案):
<h2><span class="angleHyphen">Test-Heading</span></h2>
如果我们应用CSS旋转属性(带有浏览器前缀),该样式将应用于带有单个连字符的跨度,这使我们更加困惑。换句话说,font-family属性不起作用,但是我们可以使用其他CSS属性在某种程度上模拟外观。对于我们来说不幸的是,基于Goudy的字体是客户品牌形象的重要组成部分,并且这种解决方法未被接受。
我已经在wptest.4sdesignstudio.com上创建了该问题的现场演示,其中还包括一些其他注释和示例,如果您感到好奇或想花时间对此进行深入研究。
您将看到没有控制台错误。如果您检查元素,则会看到该字体表明它已被应用。我们已经包含了上面列出的示例,其中将整个标题都包含在跨度中-表明该字体已通过Google字体正确加载。
我们最初遇到的问题是Salient的子主题,该主题主要是使用Visual Composer和经典编辑器插件构建的。为了排除那里的冲突,此后,我们使用基本的二十一岁主题和本地的古腾堡编辑器(您将在上面的链接中看到的版本)将其重新加载到新安装中。
我没有要测试的想法。任何建议都受到欢迎和赞赏!在此先感谢Stack社区!
答案 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