Отобразить список комментариев пользователя + заголовок поста + дата

Вопрос или проблема

Я пытаюсь отобразить все комментарии текущего пользователя на конкретной странице и использую этот код (использует шорткод): https://blog.ashfame.com/2011/01/show-recent-comments-particular-user-wordpress/

И изменил его:

<?php
/*
Название плагина: Показать недавние комментарии определенного пользователя
URI плагина: http://blog.ashfame.com/?p=876
Описание: Предоставляет шорткод, который вы можете использовать для отображения недавних комментариев определенного пользователя
Автор: Ashfame
URI автора: http://blog.ashfame.com/
Лицензия: GPL
Использование: 
*/

add_shortcode ( 'show_recent_comments', 'show_recent_comments_handler' );

function show_recent_comments_handler( $atts, $content = null )
{
    extract( shortcode_atts( array( 
        "count" => 10,
        "pretty_permalink" => 0
        ), $atts ));

    $output=""; // здесь хранится вывод
    
    if ( is_user_logged_in() )
    {
        global $current_user;
        get_currentuserinfo();

        $args = array(
            'user_id' => $current_user->ID,
            'number' => $count, // сколько комментариев извлечь
            'status' => 'approve'
            );

        $comments = get_comments( $args );
        if ( $comments )
        {
            $output.= "<ul>\n";
            foreach ( $comments as $c )
            {
            $output.= '<li>';
            if ( $pretty_permalink ) // использует намного больше запросов (не рекомендуется)
                $output.= '<a href="'.get_comment_link( $c->comment_ID ).'">';
            else
                $output.= '<a href="'.get_settings('siteurl').'/?p='.$c->comment_post_ID.'#comment-'.$c->comment_ID.'">';           
            $output.= $c->comment_content;
            $output.= ', Название поста: '.get_the_title($c->comment_post_ID);
            $output.= '</a>, Опубликовано: '. mysql2date('m/d/Y', $c->comment_date, $translate);
            $output.= "</li>\n";
            }
            $output.= '</ul>';
        }
    }
    else
    {
        $output.= "<h2>Вы должны быть залогинены, чтобы увидеть свои комментарии. Имеет смысл?</h2>";
        $output.= '<h2><a href="'.get_settings('siteurl').'/wp-login.php?redirect_to='.get_permalink().'">Войдите сейчас &rarr;</a></h2>';
    }
    return $output;
}
?>

Можно отобразить комментарии так:

  • Название поста (название поста, где пользователь оставил комментарий)

    • фрагмент комментария (Это комментарий, который я оставил на……)
    • дата комментария
  • Название поста (название поста, где пользователь оставил комментарий)

    • фрагмент комментария (Это комментарий, который я оставил на……)
    • дата комментария
  • Название поста (название поста, где пользователь оставил комментарий)

    • фрагмент комментария (Это комментарий, который я оставил на……)
    • дата комментария

Потому что это выглядит не очень хорошо при использовании моего текущего кода, смотрите скриншот здесь: https://prnt.sc/xd8qmc

Также возможно ли разбить комментарии на страницы?

добавьте этот фрагмент кода в соответствии с вашими нуждами:

add_shortcode ( 'show_recent_comments', 'show_recent_comments_handler' );

function show_recent_comments_handler( $atts, $content = null )
{
    extract( shortcode_atts( array( 
        "count" => 10,
        "pretty_permalink" => 0
        ), $atts ));

    $output=""; // здесь хранится вывод
    
    if ( is_user_logged_in() )
    {
        global $current_user;
        get_currentuserinfo();

        $args = array(
            'user_id' => $current_user->ID,
            'number' => $count, // сколько комментариев извлечь
            'status' => 'approve'
            );

        $comments = get_comments( $args );
        if ( $comments )
        {
            $output.= "<ul>\n";
            foreach ( $comments as $c )
            {
            $output.= '<li>';

            $output.= 'Название поста: '.get_the_title($c->comment_post_ID);
            $output.= "<ul>";

            if ( $pretty_permalink ) // использует намного больше запросов (не рекомендуется)
                $output.= '<a href="'.get_comment_link( $c->comment_ID ).'">';
            else
                $output.= '<a href="'.get_settings('siteurl').'/?p='.$c->comment_post_ID.'#comment-'.$c->comment_ID.'">';        
            $output.='<li>'. $c->comment_content .'</li>';
            $output.= '</a><li> Опубликовано: '. mysql2date('m/d/Y', $c->comment_date, $translate).'</li>';
            $output.= '</ul>';
            $output.= "</li>\n";
            }
            $output.= '</ul>';
        }
    }
    else
    {
        $output.= "<h2>Вы должны быть залогинены, чтобы увидеть свои комментарии. Имеет смысл?</h2>";
        $output.= '<h2><a href="'.get_settings('siteurl').'/wp-login.php?redirect_to='.get_permalink().'">Войдите сейчас &rarr;</a></h2>';
    }
    return $output;
}

Ответ или решение

Для того чтобы отобразить все комментарии текущего пользователя на определённой странице WordPress, вместе с заголовком поста и датой, предлагается модифицированный код шорткода. Этот шорткод позволит организовать вывод комментариев в более удобочитаемом виде, соответствуя требуемому формату.

Шаги по реализации кода

  1. Добавление шорткода: Вы создадите шорткод [show_recent_comments], который можно будет использовать в любом месте вашего сайта.

  2. Аутентификация пользователя: Проверка, вошёл ли пользователь в систему. Если пользователь не авторизован, будет отображено сообщение с предложением войти.

  3. Получение комментариев: Код будет загружать комментарии текущего пользователя с указанным количеством (по умолчанию 10) и отображать их вместе с названием поста и датой комментария.

Пример модифицированного кода

<?php
/*
Plugin Name: Show Recent Comments by a particular user
Plugin URI: http://blog.ashfame.com/?p=876
Description: Provides a shortcode which you can use to show recent comments by a particular user
Author: Ashfame
Author URI: http://blog.ashfame.com/
License: GPL
Usage: 
*/

add_shortcode('show_recent_comments', 'show_recent_comments_handler');

function show_recent_comments_handler($atts, $content = null)
{
    extract(shortcode_atts(array(
        "count" => 10,
        "pretty_permalink" => 0
    ), $atts));

    $output = ""; // это будет выводимый контент

    if (is_user_logged_in()) {
        global $current_user;
        wp_get_current_user();

        $args = array(
            'user_id' => $current_user->ID,
            'number' => $count, // количество комментариев для загрузки
            'status' => 'approve'
        );

        $comments = get_comments($args);
        if ($comments) {
            $output .= "<ul>\n";
            foreach ($comments as $c) {
                $output .= '<li>';
                $output .= 'Post Name: ' . get_the_title($c->comment_post_ID);
                $output .= "<ul>";

                if ($pretty_permalink) // это использует больше запросов (не рекомендуется)
                    $output .= '<a href="' . get_comment_link($c->comment_ID) . '">';
                else
                    $output .= '<a href="' . get_permalink($c->comment_post_ID) . '#comment-' . $c->comment_ID . '">';

                $output .= '<li>' . esc_html($c->comment_content) . '</li>';
                $output .= '</a><li> Posted on: ' . mysql2date('m/d/Y', $c->comment_date) . '</li>';
                $output .= "</ul>";
                $output .= "</li>\n";
            }
            $output .= '</ul>';
        }
    } else {
        $output .= "<h2>Вы должны войти в систему, чтобы увидеть свои комментарии. Это имеет смысл?</h2>";
        $output .= '<h2><a href="' . wp_login_url(get_permalink()) . '">Войти сейчас &rarr;</a></h2>';
    }
    return $output;
}
?>

Объяснение кода

  • Структура списка: Каждый комментарий будет отображаться в виде вложенного списка, что сделает его более читаемым. Название поста, в который был оставлен комментарий, будет выделено в отдельной строке, а сам текст комментария будет размещён под ним.

  • Дата комментария: Дата будет преобразована в формат m/d/Y, что соответствует стандартному виду. Это поможет пользователям легче воспринимать информацию.

Пагинация комментариев

Для реализации пагинации вам необходимо будет изменить запрос получения комментариев и добавить функционал для разделения на страницы. Например, вы можете использовать функцию paginate_comments_links или подобные для управления навигацией по страницам комментариев.

Заключение

Данный подход обеспечивает удобный способ отображения комментариев пользователя с повышенной читабельностью и хорошей структурой. Рекомендуется протестировать шорткод на разных страницах вашего сайта, чтобы убедиться в его работоспособности и совместимости с другими плагинами.

Оцените материал
Добавить комментарий

Капча загружается...