Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I created the following function that I am using to load single post views:

// Post
function basey_single_post() {

    global $post;
    ob_start();

    echo apply_filters('basey_page_title_news', __('<h1>News</h1>','basey')); ?>
    <?php basey_post_before(); ?>
    <article <?php post_class() ?> id="post-<?php the_ID(); ?>">
        <?php basey_post_inside_before(); ?>
            <header>
                <?php echo apply_filters('basey_post_title', '<h2>'.get_the_title().'</h2>'); ?>
                <?php basey_entry_meta($post->ID); ?>
                <div class="taxonomy">
                    <?php echo __('Posted in ','basey'); the_category(', '); ?>
                </div>
                <?php $tag = get_the_tags(); if (!$tag) { } else { ?><div class="tags"><?php the_tags(); ?></div><?php } ?>
                <div class="commentLinks"><?php comments_popup_link( __( ' 0 Comments', 'blank' ), __( ' 1 Comment', 'blank' ), __( ' % Comments', 'blank' ), 'comments-link', __('Comments closed', 'blank')); ?> <?php if ( comments_open() ) : ?>| <a href="<?php the_permalink(); ?>#respond" title="<?php echo __('Add a Comment','basey'); ?>"><?php echo __('Add a Comment','basey'); ?></a><?php endif; ?>
                </div>
            </header>
            <div class="entry-content">
                <?php the_content(); ?>
            </div>
            <footer>
                <?php wp_link_pages(array('before' => '<nav class="pagination"><p>' . __('Pages:', 'basey'), 'after' => '</p></nav>' )); ?>
            </footer>
        <?php basey_post_inside_after(); ?>
        <?php comments_template(); ?>
    </article>
    <?php basey_post_after();

    $display = apply_filters('basey_single_post_view',ob_get_clean());
    return $display;
}

and am then overriding it when needed like so:

// Post
function basey_single_post_override() {

    global $post;
    ob_start();

    echo 'TEST ADDITION';

    echo apply_filters('basey_page_title_news', __('<h1>News</h1>','basey')); ?>
    <?php basey_post_before(); ?>
    <article <?php post_class() ?> id="post-<?php the_ID(); ?>">
        <?php basey_post_inside_before(); ?>
            <header>
                <?php echo apply_filters('basey_post_title', '<h2>'.get_the_title().'</h2>'); ?>
                <?php basey_entry_meta($post->ID); ?>
                <div class="taxonomy">
                    <?php echo __('Posted in ','basey'); the_category(', '); ?>
                </div>
                <?php $tag = get_the_tags(); if (!$tag) { } else { ?><div class="tags"><?php the_tags(); ?></div><?php } ?>
                <div class="commentLinks"><?php comments_popup_link( __( ' 0 Comments', 'blank' ), __( ' 1 Comment', 'blank' ), __( ' % Comments', 'blank' ), 'comments-link', __('Comments closed', 'blank')); ?> <?php if ( comments_open() ) : ?>| <a href="<?php the_permalink(); ?>#respond" title="<?php echo __('Add a Comment','basey'); ?>"><?php echo __('Add a Comment','basey'); ?></a><?php endif; ?>
                </div>
            </header>
            <div class="entry-content">
                <?php the_content(); ?>
            </div>
            <footer>
                <?php wp_link_pages(array('before' => '<nav class="pagination"><p>' . __('Pages:', 'basey'), 'after' => '</p></nav>' )); ?>
            </footer>
        <?php basey_post_inside_after(); ?>
        <?php comments_template(); ?>
    </article>
    <?php basey_post_after();

    $display = ob_get_clean();
    return $display;
}
add_filter('basey_single_post_view','basey_single_post_override');

Getting this error though: Fatal error: Cannot redeclare basey_comment() (previously declared in /home/usr/public_html/dev/wp-content/themes/basey/comments.php:1) in /home/usr/public_html/dev/wp-content/themes/basey/comments.php on line 26 which looks like:

<?php function basey_comment($comment, $args, $depth) {
    $GLOBALS['comment'] = $comment; ?>
    <li <?php comment_class(); ?>>
        <article id="comment-<?php comment_ID(); ?>">
            <header class="comment-author vcard">
                <?php echo get_avatar($comment,$size='32'); ?>
        <?php printf(__('<cite class="fn">%s</cite>', 'basey'), get_comment_author_link()); ?>
        <time datetime="<?php echo comment_date('c'); ?>"><a href="<?php echo htmlspecialchars(get_comment_link($comment->comment_ID)); ?>"><?php printf(__('%1$s', 'basey'), get_comment_date(),  get_comment_time()); ?></a></time>
        <?php edit_comment_link(__('(Edit)', 'basey'), '', ''); ?>
            </header>

      <?php if ($comment->comment_approved == '0') { ?>
        <div class="alert alert-block fade in">
          <a class="close" data-dismiss="alert">&times;</a>
          <p><?php _e('Your comment is awaiting moderation.', 'basey'); ?></p>
        </div>
      <?php } ?>

            <section class="comment">
                <?php comment_text() ?>
            </section>

      <?php comment_reply_link(array_merge($args, array('depth' => $depth, 'max_depth' => $args['max_depth']))); ?>

        </article>
<?php } ?>

<?php if (post_password_required()) { ?>
    <section id="comments">
    <div class="alert alert-block fade in">
      <a class="close" data-dismiss="alert">&times;</a>
    <p><?php _e('This post is password protected. Enter the password to view comments.', 'basey'); ?></p>
    </div>
  </section><!-- /#comments -->
    <?php
        return;
} ?>

<?php if (have_comments()) { ?>
    <section id="comments">
    <h3><?php printf(_n('One Response to &ldquo;%2$s&rdquo;', '%1$s Responses to &ldquo;%2$s&rdquo;', get_comments_number(), 'basey'), number_format_i18n(get_comments_number()), get_the_title()); ?></h3>

        <ol class="commentlist">
      <?php wp_list_comments(array('callback' => 'basey_comment')); ?>
        </ol>

    <?php if (get_comment_pages_count() > 1 && get_option('page_comments')) { // are there comments to navigate through ?>
      <nav id="comments-nav" class="pager">
        <div class="previous"><?php previous_comments_link(__('&larr; Older comments', 'basey')); ?></div>
        <div class="next"><?php next_comments_link(__('Newer comments &rarr;', 'basey')); ?></div>
            </nav>

    <?php } // check for comment navigation ?>

    <?php if (!comments_open() && !is_page() && post_type_supports(get_post_type(), 'comments')) { ?>
      <p><?php _e('Comments are closed.', 'basey'); ?></p>
    <?php } ?>
  </section><!-- /#comments -->
<?php } ?>

<?php if (!have_comments() && !comments_open() && !is_page() && post_type_supports(get_post_type(), 'comments')) { ?>
    <section id="comments">
    <p><?php _e('Comments are closed.', 'basey'); ?></p>
  </section><!-- /#comments -->
<?php } ?>

<?php if (comments_open()) { ?>
<section id="respond">
  <h3><?php comment_form_title( __('Leave a Reply', 'basey'), __('Leave a Reply to %s', 'basey') ); ?></h3>
    <p class="cancel-comment-reply"><?php cancel_comment_reply_link(); ?></p>
    <?php if (get_option('comment_registration') && !is_user_logged_in()) { ?>
  <p><?php printf( __('You must be <a href="%s">logged in</a> to post a comment.', 'basey'), wp_login_url( get_permalink() ) ); ?></p>
    <?php } else { ?>
    <form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
        <?php if (is_user_logged_in()) { ?>
    <p><?php printf(__('Logged in as <a href="%s/wp-admin/profile.php">%s</a>.', 'basey'), get_option('siteurl'), $user_identity); ?> <a href="<?php echo wp_logout_url(get_permalink()); ?>" title="<?php __('Log out of this account', 'basey'); ?>"><?php _e('Log out &raquo;', 'basey'); ?></a></p>
        <?php } else { ?>
      <label for="author"><?php _e('Name', 'basey'); if ($req) _e(' (required)', 'basey'); ?></label>
            <input type="text" class="text" name="author" id="author" value="<?php echo esc_attr($comment_author); ?>" size="22" tabindex="1" <?php if ($req) echo "aria-required='true'"; ?>>
      <label for="email"><?php _e('Email (will not be published)', 'basey'); if ($req) _e(' (required)', 'basey'); ?></label>
            <input type="email" class="text" name="email" id="email" value="<?php echo esc_attr($comment_author_email); ?>" size="22" tabindex="2" <?php if ($req) echo "aria-required='true'"; ?>>
      <label for="url"><?php _e('Website', 'basey'); ?></label>
            <input type="url" class="text" name="url" id="url" value="<?php echo esc_attr($comment_author_url); ?>" size="22" tabindex="3">
        <?php } ?>
      <label for="comment"><?php _e('Comment', 'basey'); ?></label>
        <textarea name="comment" id="comment" class="input-xlarge" tabindex="4"></textarea>
        <input name="submit" class="btn btn-primary" type="submit" id="submit" tabindex="5" value="<?php _e('Submit Comment', 'basey'); ?>">
        <?php comment_id_fields(); ?>
        <?php do_action('comment_form', $post->ID); ?>
    </form>
    <?php } // if registration required and not logged in ?>
  </section><!-- /#respond -->
<?php }

Any help would be GREATLY appreciated on this - at my whits end here. Thanks!

EDIT: This may be more of a question about correctly using the output buffer and/or WP filters effectively. Thanks!

share|improve this question

1 Answer 1

up vote 1 down vote accepted
+50

Most likely, that comments.php file is being included or required more than once. You can make sure that any call to that file is done with include_once or require_once to prevent that issue.

Otherwise, a safe workaround would be to wrap the file contents with:

if ( ! function_exists( 'basey_comment' ) ) :
   # code goes here
endif;

which will then only "process" the file if the function hasn't yet been declared.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.