/**
 * Calculate the total number of comment pages.
 *
 * @since 2.7.0
 *
 * @uses Walker_Comment
 *
 * @global WP_Query $wp_query
 *
 * @param array $comments Optional array of WP_Comment objects. Defaults to $wp_query->comments
 * @param int   $per_page Optional comments per page.
 * @param bool  $threaded Optional control over flat or threaded comments.
 * @return int Number of comment pages.
 */
function get_comment_pages_count($comments = null, $per_page = null, $threaded = null)
{
    global $wp_query;
    if (null === $comments && null === $per_page && null === $threaded && !empty($wp_query->max_num_comment_pages)) {
        return $wp_query->max_num_comment_pages;
    }
    if ((!$comments || !is_array($comments)) && !empty($wp_query->comments)) {
        $comments = $wp_query->comments;
    }
    if (empty($comments)) {
        return 0;
    }
    if (!get_option('page_comments')) {
        return 1;
    }
    if (!isset($per_page)) {
        $per_page = (int) get_query_var('comments_per_page');
    }
    if (0 === $per_page) {
        $per_page = (int) get_option('comments_per_page');
    }
    if (0 === $per_page) {
        return 1;
    }
    if (!isset($threaded)) {
        $threaded = get_option('thread_comments');
    }
    if ($threaded) {
        $walker = new Walker_Comment();
        $count = ceil($walker->get_number_of_root_elements($comments) / $per_page);
    } else {
        $count = ceil(count($comments) / $per_page);
    }
    return $count;
}
/**
 * List comments
 *
 * Used in the comments.php template to list comments for a particular post
 *
 * @since 2.7.0
 * @uses Walker_Comment
 *
 * @param string|array $args Formatting options
 * @param array $comments Optional array of comment objects.  Defaults to $wp_query->comments
 */
function wp_list_comments($args = array(), $comments = null)
{
    global $wp_query, $comment_alt, $comment_depth, $comment_thread_alt, $overridden_cpage, $in_comment_loop;
    $in_comment_loop = true;
    $comment_alt = $comment_thread_alt = 0;
    $comment_depth = 1;
    $defaults = array('walker' => null, 'max_depth' => '', 'style' => 'ul', 'callback' => null, 'end-callback' => null, 'type' => 'all', 'page' => '', 'per_page' => '', 'avatar_size' => 32, 'reverse_top_level' => null, 'reverse_children' => '');
    $r = wp_parse_args($args, $defaults);
    // Figure out what comments we'll be looping through ($_comments)
    if (null !== $comments) {
        $comments = (array) $comments;
        if (empty($comments)) {
            return;
        }
        if ('all' != $r['type']) {
            $comments_by_type =& separate_comments($comments);
            if (empty($comments_by_type[$r['type']])) {
                return;
            }
            $_comments = $comments_by_type[$r['type']];
        } else {
            $_comments = $comments;
        }
    } else {
        if (empty($wp_query->comments)) {
            return;
        }
        if ('all' != $r['type']) {
            if (empty($wp_query->comments_by_type)) {
                $wp_query->comments_by_type =& separate_comments($wp_query->comments);
            }
            if (empty($wp_query->comments_by_type[$r['type']])) {
                return;
            }
            $_comments = $wp_query->comments_by_type[$r['type']];
        } else {
            $_comments = $wp_query->comments;
        }
    }
    if ('' === $r['per_page'] && get_option('page_comments')) {
        $r['per_page'] = get_query_var('comments_per_page');
    }
    if (empty($r['per_page'])) {
        $r['per_page'] = 0;
        $r['page'] = 0;
    }
    if ('' === $r['max_depth']) {
        if (get_option('thread_comments')) {
            $r['max_depth'] = get_option('thread_comments_depth');
        } else {
            $r['max_depth'] = -1;
        }
    }
    if ('' === $r['page']) {
        if (empty($overridden_cpage)) {
            $r['page'] = get_query_var('cpage');
        } else {
            $threaded = -1 == $r['max_depth'] ? false : true;
            $r['page'] = 'newest' == get_option('default_comments_page') ? get_comment_pages_count($_comments, $r['per_page'], $threaded) : 1;
            set_query_var('cpage', $r['page']);
        }
    }
    // Validation check
    $r['page'] = intval($r['page']);
    if (0 == $r['page'] && 0 != $r['per_page']) {
        $r['page'] = 1;
    }
    if (null === $r['reverse_top_level']) {
        $r['reverse_top_level'] = 'desc' == get_option('comment_order') ? TRUE : FALSE;
    }
    extract($r, EXTR_SKIP);
    if (empty($walker)) {
        $walker = new Walker_Comment();
    }
    $walker->paged_walk($_comments, $max_depth, $page, $per_page, $r);
    $wp_query->max_num_comment_pages = $walker->max_pages;
    $in_comment_loop = false;
}
Beispiel #3
0
 function display_element($element, &$children_elements, $max_depth, $depth = 0, $args, &$output)
 {
     if (!$element) {
         return;
     }
     $id_field = $this->db_fields['id'];
     $id = $element->{$id_field};
     parent::display_element($element, $children_elements, $max_depth, $depth, $args, $output);
     // If we're at the max depth, and the current element still has children, loop over those and display them at this level
     // This is to prevent them being orphaned to the end of the list.
     if ($max_depth <= $depth + 1 && isset($children_elements[$id])) {
         foreach ($children_elements[$id] as $child) {
             $this->display_element($child, $children_elements, $max_depth, $depth, $args, $output);
         }
         unset($children_elements[$id]);
     }
 }
Beispiel #4
0
 function display_element($element, &$children_elements, $max_depth, $depth = 0, $args, &$output)
 {
     if (!$element) {
         return;
     }
     $id_field = $this->db_fields['id'];
     $id = $element->{$id_field};
     // we add li tags only in 0 depth comments
     if ($depth == 0) {
         ?>
         <li class="media media-comment"><?php 
     }
     parent::display_element($element, $children_elements, $max_depth, $depth, $args, $output);
     // If we're at the max depth, and the current element still has children, loop over those and display them at this level
     // This is to prevent them being orphaned to the end of the list.
     if ($max_depth <= $depth + 1 && isset($children_elements[$id])) {
         foreach ($children_elements[$id] as $child) {
             $this->display_element($child, $children_elements, $max_depth, $depth, $args, $output);
         }
         unset($children_elements[$id]);
     }
     // we add li tags only in 0 depth comments
     if ($depth == 0) {
         ?>
         </li><?php 
     }
 }
Beispiel #5
0
function my_theme_comments()
{
    $id = get_the_ID();
    $avatar = get_avatar();
    $coms = wp_list_comments(array('echo' => false));
    $comments = get_comments(array('post_id' => $id));
    $walker = new Walker_Comment();
    $output = $walker->paged_walk($comments, -1, '', '');
    $in_comment_loop = false;
    echo $output;
}
Beispiel #6
0
 /**
  * Same as Walker_Comment::ping() plus some Bootstrap classes and style locked on `div`.
  *
  * @param WP_Comment $comment The comment object.
  * @param int        $depth   Depth of the current comment.
  * @param array      $args    An array of arguments.
  */
 protected function ping($comment, $depth, $args)
 {
     ob_start();
     parent::ping($comment, $depth, array_merge($args, ['style' => 'div']));
     echo str_replace(['class="comment-body"'], ['class="comment-body well well-sm"'], ob_get_clean());
 }