We’re doing some SEO tweaking to a site, and our SEO guru informs us that we need to remove the <h3>
tags from the #reply-title
element, output from line 1554 of comments-template.php
. It’s the header text for the comments form.
as seen here :
<?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() ) : ?>
We’re aware of the numerous filters and hooks associated with the comment_form();
, but that <h3>
is hard-coded.
for this, we’ve been unable to come up w/ a sustainable solution to replacing the <h3 id="reply-title"></h3>
with just <div id="reply-title"></div>
.
it’s starting to look like the quickest / easiest option may be to just unhook the call to comment_form()
; and hook in a copy of our own function, which would be just a copy, with a simple change to that one line.
But in the meantime, it never hurts to poll the community. Any ideas on how to modify that markup in a sustainable ( non-core hackable ) way?
It should be noted that this can’t be solved w/ some CSS or JS. The actual, crawlable DOM has to be dealt with.
thanks again stack.
Today there is a native option to do this without hacking the core, or doing tricky filters with output buffer. You just need to use the filter
'comment_form_defaults'
and edit the values from'title_reply_before'
and'title_reply_after'
key:In this exemple, i have wrapped the title with a span tag that have no impact on SEO with a class named
.h4
, with a same style that the original h4 tag has:This way, you can keep the styling from a header without messing up with your SEO. (:
If you are using Bootstrap, this class already exists and are styled the same way i mentioned above to all headers. From H1 to H6 and the respective classes.
Had a similar problem, short blog entries found by google etc. showed the comment reply title instead of the blog entry content.
This solution buffers the comment form html and replaces the
<h3 id="reply-title"..>
with another tag before printing it:Note: In older WordPress versions the html was
<h3 id="reply-title">
, since 3.6 or so it is<h3 id="reply-title" class="comment-reply-title">
, both cases are covered in above code.There isn’t a way to change that particular
<h3>
element without hacking core (and you already know not to do that), but you still have the option of creating your own comments form or using a comment plugin that has the markup you want.If you absolutely, positively don’t want to use another method, you could capture the form’s HTML output into a ridiculously long string, do a
preg_replace
on it to change the offending<h3>
, then echo that stringified HTML form to the DOM.Not exactly sure which text you are referring to but one of these may help or at least give you some idea:
Source