有几种方法可以解决这个问题:
对所有当前帖子执行一次操作在显示帖子之前在运行时执行(通过筛选the_content
, 或使用jQuery)使用important!
在您的CSS中,正如您所提到的,每种方法都是解决这一问题的合法方法,并且每种方法都有利弊。
我通常选择选项3,因为这是确保从其他地方复制的帖子内容始终与主题的预期一致的最简单方法。我将CSS的范围仅限于帖子内容所在的容器,并且我只覆盖那些导致最大问题的属性-通常是font-size
, text-align
, font-family
等等-值为inherit !important
因此,它只是按照主题的意图工作。
在你的情况下,你已经说过这不会解决问题。我认为这是因为您处理的CSS规则范围很广,而列出人类已知的每个CSS属性实在是太麻烦了。
在这种情况下,上述其他两个选项将取决于您的目标:您是否只想调整当前的帖子,而不影响将来可能插入网站的任何帖子,或者您是否不想实际接触帖子本身,而只是改变它们的显示方式,这意味着将来的任何帖子也将是“固定的”?
Doing it once for all current posts 可以通过对数据库的直接SQL查询来完成。解析HTML并对其进行自动决策可能很危险,因此我认为最安全的方法是在wp_posts
实际只需替换的表style="
具有data-style="
. 这仍然是有效的HTML5;它不会被读取为样式属性;而且,你几乎不可能把你不想做的事情搞砸(当然,除非你的帖子中有代码示例?)。
有很多方法可以在DB上进行搜索替换;我建议使用wp-cli\'ssearch-replace
命令:
wp search-replace \' style="\' \' data-style="\' wp_posts --include-columns=post_content
您需要安装wp cli才能执行此操作,安装说明如下
here (顺便说一句,如果您在Windows上,在遵循说明时遇到问题,请在评论中告诉我,也许我可以就此进行问答)。
Doing it at runtime before displaying posts 可以使用the_content
filter, 我可能会采取与上述类似的策略,只是出于同样的原因,你不想意外地更换你确实需要的东西。类似这样:
add_filter( \'the_content\', function( $content ){
return str_replace( \' style="\', \' data-style="\', $content);
});
最后,如果您确实有包含代码示例的帖子,或者您只是想绝对肯定您只是在替换您真正想要的内容,我可能会求助于在页面上使用jQuery。如果您可以在服务器端处理内容,这从来不是处理内容的最佳方式,但为了完整起见,我提到了这一点:
jQuery( \'.your_post_content_wrapper *\' ).attr( \'style\', \'\');