Display custom comments field for first level only

The Reply links

I assume your Reply links look like this:

<a class="comment-reply-link" href="http://wordpress.stackexchange.com/2013/12/29/hello-world/?replytocom=32#respond" 
 onclick="return addComment.moveForm('comment-32', '32', 'respond', '1')">Reply</a>

and the Cancel Reply link:

<a rel="nofollow" id="cancel-comment-reply-link" 
href="http://wordpress.stackexchange.com/2013/12/29/hello-world/#respond" style="">Cancel reply</a>

The Javascript method addComment.moveForm is defined in /wp-includes/js/comment-reply.min.js.

Demo plugin:

To hide the extra Subject field for comments replies, you can try to check for the replytocom GET parameter for the non-Javascript case and hook into the click event for the Javascript case.

Here is a demo Comment Subject plugin: /wp-content/plugins/comment-subject/comment-subject.php:

<?php
/**
 * Plugin Name: Comment Subject
 */

/**
 * Add extra Subject comment field when there is no replytocom in the url 
 */
function additional_fields () {

    $url_query = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_QUERY );

    if( FALSE === stripos( $url_query, 'replytocom' ) )
    { 
        echo '<p class="comment-form-subject">'.
        '<label for="subject">' . __( 'Your subject' ) . '</label>'.
        '<input id="subject" name="subject" type="text" size="30"  tabindex="5" /></p>';
    }
}

add_action( 'comment_form_logged_in_before', 'additional_fields' );
add_action( 'comment_form_before_fields', 'additional_fields' ); 

/**
 * Add jQuery and load the custom "script.js"
 */    
function custom_scripts() 
{
    wp_enqueue_script( 'jquery' );

    wp_enqueue_script(  'my-comment-subject', 
                            plugins_url( 'js/script.js' , __FILE__ ), 
                            array( 'jquery' ), 
                            '1.0.0', 
                            TRUE 
                     );

}

add_action( 'wp_enqueue_scripts', 'custom_scripts' );

where you add the file /wp-content/plugins/comment-subject/js/script.js containing:

jQuery(document).on( 'click', 'a.comment-reply-link', function( event ) {
    jQuery('p.comment-form-subject').hide();
});

jQuery(document).on( 'click', 'a#cancel-comment-reply-link', function( event ) {
    jQuery('p.comment-form-subject').show();
});

Leave a Comment