• Resolved Don Spark

    (@don-spark)


    Hi,

    Simple question:

    How do I make comments “turned off” by default?

    I am shaping up a WP CMS for non-technical users. They shouldnt have to worry about erroneous check boxes.

    Thanks!

    Don Spark

Viewing 9 replies - 16 through 24 (of 24 total)
  • Ryan

    (@daobydesign)

    Was looking for a solution for this, but didn’t want to go the “all or nothing” approach outlined above. My solution is this:

    Step 1
    Create a new custom field called “allow_comments” and on any pages I want comments give that custom field a value (1, true, allow, whatever).

    Step 2
    Open up your theme’s page.php and find the following line:
    <?php comments_template(); ?>
    Replace with:

    <?php $allow_comments = NULL; $allow_comments = get_post_meta($post->ID,'allow_comments', false); ?>
    <?php if ($allow_comments[0]) { comments_template(); } ?>

    This checks to see if the page has a value for the allow_comments custom field. If it does, it displays the comments.

    With this in place in the page.php file (and not in the single.php file), by default it will not display comments for pages. But by adding the allow_comments custom field with (any) value, the comments mechanism can be quickly enabled for any page.

    Hope that helps someone else.

    Thanks for all info. Unfortunately, my page is acting strangely. It seems my theme (lightword) already has provisions for adding comments on pages, BUT, when I add one comment it removes the “leave a comment box”. I tried everything. I did a var_dump on the $post array and before I add a comment on a page, it contains all the data, has comment_status = open, etc.

    As soon as I add one comment on a page, the array is empty except some integer value i.e. int(19).

    the page.php code is

    <?php if (comments_open() && $lw_disable_comments == "false"):comments_template();endif;?>

    this executes fine, but $post array doesn’t contain a comment_status value and thereby doesn’t execute the condition in the comments.php to display comments form:

    here’s the comments.php code:

    <?php
    if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
    die ('Please do not load this page directly. Thanks!');
    if ( post_password_required() ) {
    echo '<p class="nocomments">';
    echo _e('This post is password protected. Enter the password to view comments.','lightword');
    echo '</p>';
    return;
    }
    $comments_nr = fb_get_comment_type_count('comment');
    $trackbacks_nr = fb_get_comment_type_count('pings');
    $oddcomment = 'alt ';
    ?>
    <div id="tabsContainer">
    <a href="#" class="tabs selected"><span><?php _e('Comments','lightword'); ?> (<?php echo $comments_nr; ?>)</span></a>
    <a href="#" class="tabs"><span><?php _e('Trackbacks','lightword'); ?> (<?php echo $trackbacks_nr; ?>)</span></a>
    <span class="subscribe_comments"><?php post_comments_feed_link(__('( subscribe to comments on this post )','lightword')); ?></span>
    <div class="clear_tab"></div>
    <div class="tab-content selected">
    <a name="comments"></a>
    
    <?php if ( $comments ) : ?>
    comments<br />
    <div id="comentarii">
    <ol class="commentlist">
    <?php wp_list_comments('type=comment&callback=nested_comments'); ?>
    </ol>
    
    <?php if ((int) get_option('page_comments') === 1 && get_comment_pages_count() > 1): ?>
    comments<br />
    <div class="next_previous_links_comments">
    <span class="alignleft"><?php previous_comments_link(__('&laquo; Older Comments','lightword')); ?></span>
    <span class="alignright"><?php next_comments_link(__('Newer Comments &raquo;','lightword')); ?></span>
    <div class="clear"></div>
    </div>
    
    <?php endif; ?>
    </div>
    
    <?php else : ?>
    <?php if ('open' == $post->comment_status) : ?>
    <p class="no"><?php _e('No comments yet.','lightword'); ?></p>
    <?php else : // comments are closed ?>
    <p class="no"><?php _e('Sorry, the comment form is closed at this time.','lightword'); ?></p>
    <?php endif; ?>
    <?php endif; ?>
    
    <?php if ('open' == $post->comment_status) : ?>
    comments<br />
    <br /><div id="respond">
    <h2 style="background:transparent;"><?php comment_form_title( __('Leave a comment', 'lightword'), 'Reply' ); ?></h2>
    comments<br />
    <?php if ( get_option('comment_registration') && !$user_ID ) : ?>
    <p><?php printf(__('You must be <a href="%s">logged in</a> to post a comment.','lightword'), get_option('siteurl')."/wp-login.php?redirect_to=".urlencode(get_permalink()));?></p>
    <?php else : ?>
    
    <form action="<?php bloginfo('wpurl'); ?>/wp-comments-post.php" method="post" id="commentform">
    <?php if ( $user_ID ) : ?>
    <p><?php printf(__('Logged in as %s.','lightword'), '<a href="'.get_option('siteurl').'/wp-admin/profile.php">'.$user_identity.'</a>'); ?> <a href="<?php echo wp_logout_url(get_permalink()); ?>" title="<?php _e('Log out of this account','lightword') ?>"><?php _e('Log out &raquo;','lightword'); ?></a></p>
    
    <p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="1"></textarea></p>
    
    <?php else : ?>
    
    <p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="1"></textarea></p>
    <p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
    <label for="author"><small><?php _e('Name','lightword'); ?> <?php if ($req) _e('(required)','lightword'); ?></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><?php _e('Mail (will not be published)','lightword');?> <?php if ($req) _e('(required)','lightword'); ?></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><?php _e('Website','lightword'); ?></small></label></p>
    
    <?php endif; ?>
    
    <p><input name="submit" type="submit" id="submit" tabindex="4" accesskey="s" value="<?php echo attribute_escape(__('Submit','lightword')); ?>" /><?php cancel_comment_reply_link(__('( Cancel )', 'lightword')); ?><br class="clear"/></p>
    <?php comment_id_fields(); ?>
    <?php do_action('comment_form', $post->ID); ?>
    </form>
    <?php endif; ?>
    </div>
    <?php endif; ?>
    </div>
    
    <div class="tab-content">
    <?php if($trackbacks_nr == "0" && pings_open()) { echo "<p class=\"no\">"; ?><?php _e('No trackbacks yet.','lightword'); ?><?php echo "</p>"; } ?>
    <?php if(!pings_open()) { echo "<p class=\"no\">"; ?><?php _e('Trackbacks are disabled.','lightword'); ?><?php echo "</p>"; } ?>
    <?php foreach ($comments as $comment) : ?>
    <?php $comment_type = get_comment_type(); ?>
    <?php if($comment_type != 'comment') { ?>
    <div class="trackbacks"><?php comment_author_link() ?></div>
    <?php } ?>
    <?php endforeach; ?>
    </div>
    </div>

    I’m pulling my hair out trying to figure this out!!

    Any ideas?

    Thanks.

    Hey joefletcher, did you ever get a solution to your question about unchecking allow comments for pages in the admin while allowing them for posts? I too tried commenting out the comments code for pages, but somehow, even with that code NOT being there, spammers are still able to post comments if pages don’t have “allow comments” deselected. I realize the “easy” answer is to either make the default not to allow comments and select for posts, OR deselect the allow for each page, but either way that’s kind of a pain in the tuckus. Short of WP allowing separate comment settings for pages & posts, I’d think someone would’ve come up with a plugin or function to address this…? Bueller, Bueller…??

    this is a missing feature in wordpress.
    i think under GENERAL SETTINGS >> COMMENTS
    there should be a default configuration option for pages only, not for pages and posts altogether.

    i am pretty sure withe a few line plugin, you will be able to change this.

    Thanks for understanding the need for this feature, wjm. I’m past my misspent days of hacking the WP core, so any changes to be made I’d prefer to do using a plugin or in my theme’s functions.php file. Any ideas on how to achieve that?

    i dont have the time right now.. but what could be done is

    1. a quick and dirty script
    when creating a page in the admin section, replace on the fly these wp_options: default_ping_status and default_comment_status to FALSE

    2. the configurable version
    add to /wp-admin/options-discussion.php the options, (under the default settings)
    * Allow trackbacks for pages
    * Allow comments for pages
    and when creating a page.. reading this values, and updating the chekboxes for alowing trackbacks and comments.

    [removed by user]

    news is this feature is already included in WP 3.0.

    @wjm – didn’t see where this feature is included in WordPress 3.0 to to turn off comments for pages and turn on comments for posts by default. Help?

    (many of the solutions in this thread involved editing the PHP code and I am looking for a friendlier dashboard checkbox solution or plugin)

Viewing 9 replies - 16 through 24 (of 24 total)
  • The topic ‘turn off comments on pages by default’ is closed to new replies.