как в WordPress вывести через php комментарии определённой записи (страницы)? в карточке продукта (можно в любом месте)

Для начала,
если у вас выводятся комментарии только на записях, а на страницах нет – то см. вот эту инструкцию:
Нет формы и не работают комментарии на страницах WordPress

На другой странице (в картчоке товара) я хочу через PHP вывести комментарии к другой записи (post)

<?php
// Укажите ID записи, комментарии к которой нужно вывести
$target_post_id = 250; // ← замените на нужный ID

// Получаем утверждённые комментарии к этой записи
$comments = get_comments( array(
    'post_id' => $target_post_id,
    'status'  => 'approve', // только одобренные
    'order'   => 'ASC'      // или 'DESC', как вам удобно
) );

if ( $comments ) :
    echo '<div class="comments-from-other-post">';
    echo '<h4>Комментарии к обзору:</h4>';
    echo '<ul class="comment-list">';
    foreach ( $comments as $comment ) :
        ?>
        <li class="comment-item">
            <div class="comment-author">
                <strong><?php echo esc_html( get_comment_author( $comment ) ); ?></strong>
                <?php echo '<span class="comment-date">' . get_comment_date( 'd.m.Y', $comment ) . '</span>'; ?>
            </div>
            <div class="comment-content">
                <?php echo wp_kses_post( $comment->comment_content ); ?>
            </div>
        </li>
        <?php
    endforeach;
    echo '</ul>';
    echo '</div>';
else :
    echo '<p>Нет комментариев к этой записи.</p>';
endif;
?>

Этот код:

  • добавляет возле заголовка еще и количество комментариев к этой записи
  • разрешает нужные теги (<p>, <br>, <strong>, <b>, <em>, <i>, <a>);
  • автоматически добавляет <p>, если их нет (через wpautop);
  • не экранирует HTML, а корректно его обрабатывает;
  • сохраняет вашу логику со склонением и структурой.
  • автоматически превращать URL в ссылки (rel=”noopener noreferrer nofollow” и target=”_blank”)
  • выводит комментарии в случайном порядке, но при этом есть возможность легко отключить рандом
  • добавляет нумерацию (она привязывается к очередности комменатриев (как их добавляли) а не к рандому 1,2,3…
<?php
$target_post_id = 51197;
$enable_random_order = true; // true = рандом вывод, false = хронологический

// Получаем комментарии в порядке хронологии (старые → новые) — для правильной нумерации
$comments_original = get_comments( array(
    'post_id' => $target_post_id,
    'status'  => 'approve',
    'order'   => 'ASC',      // старые сначала → №1, №2, ...
    'orderby' => 'comment_date'
) );

// Создаём маппинг: comment_ID => порядковый номер
$comment_number_map = array();
foreach ( $comments_original as $index => $comment ) {
    $comment_number_map[ $comment->comment_ID ] = $index + 1; // №1, №2, ...
}

// Теперь решаем, в каком порядке ВЫВОДИТЬ
if ( $enable_random_order ) {
    shuffle( $comments_original ); // перемешиваем массив для рандомного вывода
}
$comments_to_display = $comments_original;

$comments_count = count( $comments_to_display );

// Склонение
if ( $comments_count == 0 ) {
    $word = 'отзывов';
} elseif ( $comments_count == 1 ) {
    $word = 'отзыв';
} elseif ( $comments_count >= 2 && $comments_count <= 4 ) {
    $word = 'отзыва';
} else {
    $word = 'отзывов';
}

// Функция обработки текста комментария (с ссылками и атрибутами)
function safe_comment_html_with_links( $text ) {
    $text = make_clickable( $text );
    $allowed = array(
        'p'      => array(),
        'br'     => array(),
        'strong' => array(),
        'b'      => array(),
        'em'     => array(),
        'i'      => array(),
        'u'      => array(),
        'del'    => array(),
        'a'      => array( 'href' => true ),
    );
    $text = wp_kses( $text, $allowed );
    $text = preg_replace(
        '/<a\s([^>]*)href=["\']([^"\'>]+)["\']([^>]*)>/i',
        '<a $1href="$2" $3 target="_blank" rel="noopener noreferrer nofollow">',
        $text
    );
    $text = preg_replace('/rel="[^"]*"/', 'rel="noopener noreferrer nofollow"', $text);
    return $text;
}
?>

<?php if ( $comments_to_display ) : ?>
    <div class="comments-from-other-post">
        <h4>Подтвержденные отзывы (<?php echo $comments_count . ' ' . $word; ?>):</h4>
        <ul class="comment-list">
            <?php foreach ( $comments_to_display as $comment ) : 
                $number = $comment_number_map[ $comment->comment_ID ];
            ?>
                <li class="comment-item ot" data-comment-id="<?php echo $comment->comment_ID; ?>">
                    <span class="comment-number">#<?php echo $number; ?></span>
                    <div class="comment-content">
                        <?php echo wpautop( safe_comment_html_with_links( $comment->comment_content ) ); ?>
                    </div>
                </li>
            <?php endforeach; ?>
        </ul>
    </div>
<?php else : ?>
    <div class="comments-from-other-post">
        <h4>Отзывов (0 шт):</h4>
        <p>Пока никто не оставил отзывы.</p>
    </div>
<?php endif; ?>

guest
Другие сообщения форума
Закрыть меню
ZAPLATA.RU | Магазин готовых блогов Wordpress с автонаполнением
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.