WordPress RSS / Atom Feed验证,“标签不匹配”错误

时间:2016-02-15 14:41:54

标签: php xml wordpress validation feed

我们无法在Feed ValidatorW3C Feed Validation Service上验证我们的Feed。

当我输入任何常见的URI时:

  • [SITEURL] /进料
  • [SITEURL] /原料/原子
  • [SITEURL] /原料/ RSS2

我收到与不匹配标记相关的各种错误,通常是文档末尾的</channel>结束标记或帖子末尾的</entry>标记。

我们正在使用自定义主题,但我不知道是否存在干扰。我是否需要逃避内部HTML或关闭其他内容?

Cross-posted.

1 个答案:

答案 0 :(得分:0)

仔细检查输出后,所有没有明确结束标记的元素都缺少自闭合符号,即<content ... />;

由于某种原因,functions.php文件具有以下功能:#34;清理&#34; HTML5的输出:

/**********************************************
REMOVE SELF-CLOSING TAGS && USER-HARDCODED TAGS
***********************************************/

if ( !is_admin() && ( ! defined('DOING_AJAX') || ( defined('DOING_AJAX') && ! DOING_AJAX ) ) ) {
    ob_start( 'html5_slash_fixer' );
    add_action( 'shutdown', 'html5_slash_fixer_flush' );
}

function html5_slash_fixer( $buffer ) {
    $buffer = str_replace( '<p id="top" />', null, $buffer );
    $buffer = str_replace( ' />', '>', $buffer );
    return $buffer;
}

function html5_slash_fixer_flush() {
    ob_end_flush();
}

因此,我在html5_slash_fixer_flush方法中添加了一项检查,以确定当前查询是否适用于Feed:is_feed (WordPress Codex)

function html5_slash_fixer( $buffer ) {
    $buffer = str_replace( '<p id="top" />', null, $buffer );
    if( !is_feed() ){
        $buffer = str_replace( ' />', '>', $buffer );
    }
    return $buffer;
}

使用此修复程序,输出仅在警告时进行验证。