Ask your WordPress questions! Pay money and get answers fast! (more info)

Comment Form Additional Field and Output for Logged in Users WordPress

  • SOLVED

Hello,

I am looking to use wordpress's standard Posts to display information about an event and then users can submit their confirmation to attend by ticking a radio button within the comment submissions.

Once submitted it will display as a normal comment along with their chosen acknowledgement (yes or no).

For logged in users only. I am using the following comments.php template:


<?php // Do not delete these lines
if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
die ('Please do not load this page directly. Thanks!');

if (!empty($post->post_password)) { // if there's a password
if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie
?>

<p class="nocomments">This post is password protected. Enter the password to view comments.<p>

<?php return;
}
}

/* This variable is for alternating comment background */
$oddcomment = 'alt';
?>

<!-- You can start editing here. -->


<?php if ($comments) : ?>

<h3 id="comments"><?php comments_number('No Volunteers', 'One Volunteer', '% Volunteers' );?>
responded to &#8220;<?php the_title(); ?>&#8221; (
<?php // Echo the number of volunteers required
echo get_option("limit_comments_{$post->ID}"); ?>
Required)</h3>

<ol class="commentlist">
<?php foreach ($comments as $comment) : ?>

<li class="<?php echo $oddcomment; ?>" id="comment-<?php comment_ID() ?>">
<?php
if ( function_exists( 'get_avatar' ) ) {
echo get_avatar( $comment, 50);
} else {
//alternate gravatar code for < 2.5
$grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=
" . md5($email) . "&default=" . urlencode($default) . "&size=" . $size;
echo "<img src='$grav_url' height='50px' width='50px' />";
}
?><?php comment_author_link() ?> Says:

<?php if ($comment->comment_approved == '0') : ?>
<em>Your comment is awaiting moderation.</em>
<?php endif; ?>
<br />

<?php comment_text() ?>

<small class="commentmetadata">
<a href="#comment-<?php comment_ID() ?>" title="">
<?php comment_date('F jS, Y') ?> at <?php comment_time() ?></a>
<?php edit_comment_link('e','',''); ?></small>

</li>

<!-- Allows your comments to have odd and even classes -->
<?php if ('alt' == $oddcomment) $oddcomment = '';
else $oddcomment = 'alt';
?>

<?php endforeach; /* end for each comment */ ?>

</ol>

<?php else : // this is displayed if there are no comments so far ?>

<?php if ('open' == $post->comment_status) : ?>

<!-- If comments are open, but there are no comments. -->
<?php else : // comments are closed ?>
<!-- If comments are closed. -->
<p class="nocomments">Comments are closed.</p>
<?php endif; ?>

<?php endif; ?>


<?php if ('open' == $post->comment_status) : ?>



<?php if ( get_option('comment_registration') && !$user_ID ) : ?>
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=
<?php the_permalink(); ?>">logged in</a> to post a comment.</p>
<?php else :

// Limit Users to only post one comment per post/event
global $current_user,$post;
$args = array('user_id' => $current_user->ID,'post_id' => $post->ID);
$usercomment = get_comments($args);
if(count($usercomment) >= 1){
echo '<p>Sorry you may only volunteer once per event</p>';
} else {

// Comment Form: ?>

<h3 id="respond">Volunteer for this event (
<?php // Echo the number of volunteers required
echo get_option("limit_comments_{$post->ID}"); ?>
Required)</h3>

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">

<?php if ( $user_ID ) : ?>

<p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php">
<?php echo $user_identity; ?></a>.
<a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout"
title="Log out of this account">Logout &raquo;</a></p>

<?php else : ?>

<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
<label for="author"><small>Name <?php if ($req) echo "(required)"; ?></small></label></p>

<p><input type="text" name="email" id="email"
value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
<label for="email"><small>Mail (will not be published) <?php if ($req) echo "(required)"; ?>
</small></label></p>

<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url"><small>Website</small></label></p>

<?php endif; ?>

<!--<p><small><strong>XHTML:</strong> You can use these tags: <?php echo allowed_tags(); ?></small></p>-->

<p><textarea name="comment" id="comment" cols="50" rows="10" tabindex="4"></textarea></p>

<p><input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<?php do_action('comment_form', $post->ID); ?>

</form>

<?php } // End of Script to limit one comment per user per post

endif; ?>
<?php endif; ?>

<!-- END OF COMMENTS -->

Answers (2)

2013-06-20

Arnav Joy answers:

add following to functions.php file

function add_comment_fields($fields) {

$fields['confirmation '] = '<p class="comment-form-confirmation "><label for="confirmation ">' . __( 'confirmation' ) . '</label>' .
'<input name="confirmation[]" type="radio" size="30" value="yes" />Yes
<input name="confirmation[]" type="radio" size="30" value="no" />No
</p>';
return $fields;

}
add_filter('comment_form_default_fields','add_comment_fields');



function add_comment_meta_values($comment_id) {

if(isset($_POST['confirmation'])) {
$confirmation = wp_filter_nohtml_kses($_POST['confirmation'][0]);
add_comment_meta($comment_id, 'confirmation', $confirmation, false);
}

}
add_action ('comment_post', 'add_comment_meta_values', 1);


and then show it as

<?php echo "Comment authors confirmation: ".get_comment_meta( $comment->comment_ID, 'confirmation', true ); ?>

where ever you want to show it


Arnav Joy comments:

so here is your comments.php with the confirmation "Yes/No" field added

<?php // Do not delete these lines

if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME']))

die ('Please do not load this page directly. Thanks!');



if (!empty($post->post_password)) { // if there's a password

if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie

?>



<p class="nocomments">This post is password protected. Enter the password to view comments.<p>



<?php return;

}

}



/* This variable is for alternating comment background */

$oddcomment = 'alt';

?>



<!-- You can start editing here. -->





<?php if ($comments) : ?>



<h3 id="comments"><?php comments_number('No Volunteers', 'One Volunteer', '% Volunteers' );?>

responded to &#8220;<?php the_title(); ?>&#8221; (

<?php // Echo the number of volunteers required

echo get_option("limit_comments_{$post->ID}"); ?>

Required)</h3>



<ol class="commentlist">

<?php foreach ($comments as $comment) : ?>



<li class="<?php echo $oddcomment; ?>" id="comment-<?php comment_ID() ?>">

<?php

if ( function_exists( 'get_avatar' ) ) {

echo get_avatar( $comment, 50);

} else {

//alternate gravatar code for < 2.5

$grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=

" . md5($email) . "&default=" . urlencode($default) . "&size=" . $size;

echo "<img src='$grav_url' height='50px' width='50px' />";

}

?><?php comment_author_link() ?> Says:



<?php if ($comment->comment_approved == '0') : ?>

Your comment is awaiting moderation.

<?php endif; ?>

<br />



<?php comment_text() ?>



<small class="commentmetadata">

<a href="#comment-<?php comment_ID() ?>" title="">

<?php comment_date('F jS, Y') ?> at <?php comment_time() ?></a>

<?php edit_comment_link('e','',''); ?></small>



</li>



<!-- Allows your comments to have odd and even classes -->

<?php if ('alt' == $oddcomment) $oddcomment = '';

else $oddcomment = 'alt';

?>



<?php endforeach; /* end for each comment */ ?>



</ol>



<?php else : // this is displayed if there are no comments so far ?>



<?php if ('open' == $post->comment_status) : ?>



<!-- If comments are open, but there are no comments. -->

<?php else : // comments are closed ?>

<!-- If comments are closed. -->

<p class="nocomments">Comments are closed.</p>

<?php endif; ?>



<?php endif; ?>





<?php if ('open' == $post->comment_status) : ?>







<?php if ( get_option('comment_registration') && !$user_ID ) : ?>

<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=

<?php the_permalink(); ?>">logged in</a> to post a comment.</p>

<?php else :



// Limit Users to only post one comment per post/event

global $current_user,$post;

$args = array('user_id' => $current_user->ID,'post_id' => $post->ID);

$usercomment = get_comments($args);

if(count($usercomment) >= 1){

echo '<p>Sorry you may only volunteer once per event</p>';

} else {



// Comment Form: ?>



<h3 id="respond">Volunteer for this event (

<?php // Echo the number of volunteers required

echo get_option("limit_comments_{$post->ID}"); ?>

Required)</h3>



<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">



<?php if ( $user_ID ) : ?>



<p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php">

<?php echo $user_identity; ?></a>.

<a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout"

title="Log out of this account">Logout &raquo;</a></p>



<?php else : ?>



<p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />

<label for="author"><small>Name <?php if ($req) echo "(required)"; ?></small></label></p>



<p><input type="text" name="email" id="email"

value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />

<label for="email"><small>Mail (will not be published) <?php if ($req) echo "(required)"; ?>

</small></label></p>



<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />

<label for="url"><small>Website</small></label></p>



<?php endif; ?>



<!--<p><small>XHTML: You can use these tags: <?php echo allowed_tags(); ?></small></p>-->



<p><textarea name="comment" id="comment" cols="50" rows="10" tabindex="4"></textarea></p>



<p><input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" />

<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />

</p>

<p><?php echo "Comment authors confirmation: ".get_comment_meta( $comment->comment_ID, 'confirmation', true ); ?></p>

<?php do_action('comment_form', $post->ID); ?>



</form>



<?php } // End of Script to limit one comment per user per post



endif; ?>

<?php endif; ?>



<!-- END OF COMMENTS -->


leannekera comments:

Hi Arnav,

I've done as you posted but the new fields dont show. Screenshot attached.

Not sure if it will effect but the site is using a child theme and is part of a multisite.