我有一个包含以下元素的WordPress模板:
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes('xhtml'); ?>>
这将返回:
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US" xml:lang="en-US">
不幸的是,“lang”属性是无效的XHTML 1.1 - 和客户端想这个层次的验证。
WordPress的一般template.php文件中包含以下代码:
if ( get_option('html_type') == 'text/html' || $doctype == 'html' )
$attributes[] = "lang=\"$lang\"";
$doctype
是传递给它的参数(在这种情况下,“XHTML”)。 应该get_option
是返回比“text / html的”以外的值? 如果是这样,我应该是在WordPress的设置来实现这一点 - 如果有什么?
我已经使用了preg_replace取出“lang”属性也试过,但是这似乎并没有能够匹配文本。 如果我手动输入的文本,它匹配! 可能与字符串的编码问题被language_attributes回来了?
我解决了这个。 有一个“language_attributes”过滤器,所以我写了一个插件,挂钩到这一点,做一个简单的preg_replace。 这里执行的时候替换工作,这是处理它一个漂亮整洁的方式。
编辑
按照要求,这里是我使用的代码:
<?php
/*
Plugin Name: Create Valid XHTML 1.1
Plugin URI: http://www.mycompany.com/create_valid_xhtml_1_1
Description: Removes deprecated "lang" attribute from (X)HTML header.
Author: dommer
Version: 1.0.0
Author URI: http://www.mycompany.com
*/
function create_valid_xhtml_1_1($language_attributes)
{
return preg_replace('/ lang=\"[a-z]+\-[A-Z]+\"/', '', $language_attributes);
}
add_filter('language_attributes', 'create_valid_xhtml_1_1');
?>
如果这仅仅是在自己的网站主题,您可以编辑header.php文件,更改
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes('xhtml'); ?>>
线进行硬编码,提高性能太:-)
文章来源: How can I get the WordPress language_attributes function to return valid XHTML 1.1?