Самый быстрый способ получить общее количество комментариев и пинг для поста

wordpress.stackexchange https://wordpress.stackexchange.com/questions/4606

Вопрос

Я делаю свой собственный шаблон комментариев (как это) и мне нужно знать, как я могу получить комментарий и количество пинга для текущего поста, возможно, используя быстрый запрос базы данных или что -то в этом роде?

Обратите внимание, что я не могу использовать count($comments) Или что -нибудь подобное, потому что я не запускаю по умолчанию comments_template() Функция, которая получает все комментарии из базы данных. Вместо этого я тяну только самые новые 10 комментариев, используя get_comments().

$post->comment_count (по -видимому, инициализируется get_post) близок к тому, что я ищу, но в нем считаются комментарии и пинги :(

Это было полезно?

Решение

Вы можете использовать эту пользовательскую функцию в functions.php темы:

/**
 * count for trackback, pingback, comment, pings
 *
 * embed like this:
 * fb_comment_type_count('pings');
 * fb_comment_type_count('comment');
 */
if ( !function_exists('fb_comment_type_count') ) {
        function fb_get_comment_type_count( $type='all', $zero = false, $one = false, $more = false, $post_id = 0) {
                global $cjd_comment_count_cache, $id, $post;

                if ( !$post_id )
                        $post_id = $post->ID;
                if ( !$post_id )
                        return;

                if ( !isset($cjd_comment_count_cache[$post_id]) ) {
                        $p = get_post($post_id);
                        $p = array($p);
                        fb_update_comment_type_cache($p);
                }
                ;
                if ( $type == 'pingback' || $type == 'trackback' || $type == 'comment' )
                        $count = $cjd_comment_count_cache[$post_id][$type];
                elseif ( $type == 'pings' )
                        $count = $cjd_comment_count_cache[$post_id]['pingback'] + $cjd_comment_count_cache[$post_id]['trackback'];
                else
                        $count = array_sum((array) $cjd_comment_count_cache[$post_id]);

                return apply_filters('fb_get_comment_type_count', $count);
        }

        // comment, trackback, pingback, pings, all
        function fb_comment_type_count( $type='all', $zero = false, $one = false, $more = false, $post_id = 0 ) {

                $number = fb_get_comment_type_count( $type, $zero, $one, $more, $post_id );
                if ($type == 'all') {
                        $type_string_single = __('Kommentar', FB_BASIS_TEXTDOMAIN);
                        $type_string_plural = __('Kommentare', FB_BASIS_TEXTDOMAIN);
                } elseif ($type == 'pings') {
                        $type_string_single = __('Ping und Trackback', FB_BASIS_TEXTDOMAIN);
                        $type_string_plural = __('Pings und Trackbacks', FB_BASIS_TEXTDOMAIN);
                } elseif ($type == 'pingback') {
                        $type_string_single = __('Pingback', FB_BASIS_TEXTDOMAIN);
                        $type_string_plural = __('Pingbacks', FB_BASIS_TEXTDOMAIN);
                } elseif ($type == 'trackback') {
                        $type_string_single = __('Trackback', FB_BASIS_TEXTDOMAIN);
                        $type_string_plural = __('Trackbacks', FB_BASIS_TEXTDOMAIN);
                } elseif ($type == 'comment') {
                        $type_string_single = __('Kommentar', FB_BASIS_TEXTDOMAIN);
                        $type_string_plural = __('Kommentare', FB_BASIS_TEXTDOMAIN);
                }

                if ( $number > 1 )
                        $output = str_replace('%', number_format_i18n($number), ( false === $more ) ? __('%', FB_BASIS_TEXTDOMAIN) . ' ' . $type_string_plural : $more);
                elseif ( $number == 0 )
                        $output = ( false === $zero ) ? __('Keine', FB_BASIS_TEXTDOMAIN) . ' ' . $type_string_plural : $zero;
                else // must be one
                        $output = ( false === $one ) ? __('Ein', FB_BASIS_TEXTDOMAIN) . ' ' . $type_string_single : $one;

                echo apply_filters('fb_comment_type_count', $output, $number);
        }
}

Эта функция дает вам количество Pingback, Trackback, Comments или All, пример:

<h2 class="comments"><?php fb_comment_type_count( 'comment' ); ?></h2>

Вы можете использовать параметр FELLE для возврата счетчика: комментарий, трекбек, пингбек, пинг или все

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top