如何删除回复标题ID的H3标记

时间:2013-07-31 作者:AhSo

我们正在对一个站点进行一些SEO调整,我们的SEO专家告诉我们需要删除<h3> 标签来自#reply-title 元件,从第1554行输出comments-template.php. 这是评论表单的标题文本。

如图所示:

<?php if ( comments_open( $post_id ) ) : ?>
        <?php do_action( \'comment_form_before\' ); ?>
        <div id="respond">
            <h3 id="reply-title"><?php comment_form_title( $args[\'title_reply\'], $args[\'title_reply_to\'] ); ?> <small><?php cancel_comment_reply_link( $args[\'cancel_reply_link\'] ); ?></small></h3>
            <?php if ( get_option( \'comment_registration\' ) && !is_user_logged_in() ) : ?>
我们知道与comment_form();, 但那<h3> 是硬编码的。

为此,我们无法找到一个可持续的解决方案来取代<h3 id="reply-title"></h3> 仅使用<div id="reply-title"></div>.

现在看来,最快/最简单的选择可能是将呼叫从comment_form(); 然后挂接一个我们自己函数的副本,这只是一个副本,只需对这一行进行简单的更改。

但与此同时,对社区进行民意调查从来没有坏处。关于如何以可持续(非核心可黑客)的方式修改该标记,有什么想法吗?

需要注意的是,使用一些CSS或JS无法解决这一问题。必须处理实际的可爬行DOM。

再次感谢stack。

4 个回复
SO网友:Felipe Rodrigues

今天,有一个本机选项可以做到这一点,而无需对内核进行黑客攻击,也无需对输出缓冲区进行复杂的过滤。你只需要使用过滤器\'comment_form_defaults\' 并编辑\'title_reply_before\'\'title_reply_after\' 密钥:

add_filter( \'comment_form_defaults\', \'custom_reply_title\' );
function custom_reply_title( $defaults ){
  $defaults[\'title_reply_before\'] = \'<span id="reply-title" class="h4 comment-reply-title">\';
  $defaults[\'title_reply_after\'] = \'</span>\';
  return $defaults;
}
在这个例子中,我用一个span标签包装了这个标题,这个标签对名为.h4, 具有与原始h4标记相同的样式:

h4, .h4 {
/* styles */
}
这样,您就可以从标题中保留样式,而不会影响您的SEO。(:

如果您使用的是Bootstrap,那么这个类已经存在,并且对所有标头的样式都与我上面提到的相同。从H1到H6以及相应的等级。

SO网友:Ov3rfly

有一个类似的问题,谷歌等发现的短博客条目显示的是评论回复标题,而不是博客条目内容。

此解决方案缓冲注释表单html并替换<h3 id="reply-title"..> 打印前使用另一个标记:

function my_comment_form_before() {
    ob_start();
}
add_action( \'comment_form_before\', \'my_comment_form_before\' );

function my_comment_form_after() {
    $html = ob_get_clean();
    $html = preg_replace(
        \'/<h3 id="reply-title"(.*)>(.*)<\\/h3>/\',
        \'<p id="reply-title"\\1>\\2</p>\',
        $html
    );
    echo $html;
}
add_action( \'comment_form_after\', \'my_comment_form_after\' );
注意:在旧的WordPress版本中,html是<h3 id="reply-title">, 从3.6左右开始<h3 id="reply-title" class="comment-reply-title">, 上述代码涵盖了这两种情况。

SO网友:Morgan Estes

没有办法改变这一点<h3> 元素,但您仍然可以选择创建自己的注释表单或使用具有所需标记的注释插件。

如果绝对不想使用其他方法,可以将表单的HTML输出捕获到一个长得离谱的字符串中preg_replace 改变冒犯行为<h3>, 然后将字符串化的HTML表单回显到DOM。

SO网友:Brad Dalton

不太清楚你指的是哪一篇文章,但其中一篇可能会有帮助,或者至少会给你一些想法:

add_filter( \'comment_author_says_text\', \'sp_comment_author_says_text\' );
function sp_comment_author_says_text() {
    return \'author says\';
}


add_filter( \'comment_form_defaults\', \'sp_comment_form_defaults\' );
function sp_comment_form_defaults( $defaults ) {

    $defaults[\'title_reply\'] = __( \'Leave a Comment\' );
    return $defaults;

}

Source

结束

相关推荐

如何将POST中的oEmbeded URL替换为实际的嵌入的HTML

我想要的是将推特oEmbed系统的输出输入到我的实际帖子中。IMHO嵌入输出本身是高质量的语义HTML,我宁愿将其放在帖子中,也不要放在嵌入元数据中,以防js停止工作(在这种情况下,推特将显示为合理的blockquote)。因此,我需要的是劫持oEmbed系统,并在处理后,将帖子中的嵌入URL替换为来自Twitter的HTML。显然,该解决方案还应该能够处理其他类型的嵌入。更新:我只是想澄清一下,我知道oEmbed在默认情况下是如何工作的(即,当对帖子内容运行“the\\u content”过滤器时,UR