Вопрос или проблема
Я пытаюсь отобразить все комментарии текущего пользователя на конкретной странице и использую этот код (использует шорткод): 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().'">Войдите сейчас →</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().'">Войдите сейчас →</a></h2>';
}
return $output;
}
Ответ или решение
Для того чтобы отобразить все комментарии текущего пользователя на определённой странице WordPress, вместе с заголовком поста и датой, предлагается модифицированный код шорткода. Этот шорткод позволит организовать вывод комментариев в более удобочитаемом виде, соответствуя требуемому формату.
Шаги по реализации кода
-
Добавление шорткода: Вы создадите шорткод
[show_recent_comments]
, который можно будет использовать в любом месте вашего сайта. -
Аутентификация пользователя: Проверка, вошёл ли пользователь в систему. Если пользователь не авторизован, будет отображено сообщение с предложением войти.
-
Получение комментариев: Код будет загружать комментарии текущего пользователя с указанным количеством (по умолчанию 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()) . '">Войти сейчас →</a></h2>';
}
return $output;
}
?>
Объяснение кода
-
Структура списка: Каждый комментарий будет отображаться в виде вложенного списка, что сделает его более читаемым. Название поста, в который был оставлен комментарий, будет выделено в отдельной строке, а сам текст комментария будет размещён под ним.
-
Дата комментария: Дата будет преобразована в формат
m/d/Y
, что соответствует стандартному виду. Это поможет пользователям легче воспринимать информацию.
Пагинация комментариев
Для реализации пагинации вам необходимо будет изменить запрос получения комментариев и добавить функционал для разделения на страницы. Например, вы можете использовать функцию paginate_comments_links
или подобные для управления навигацией по страницам комментариев.
Заключение
Данный подход обеспечивает удобный способ отображения комментариев пользователя с повышенной читабельностью и хорошей структурой. Рекомендуется протестировать шорткод на разных страницах вашего сайта, чтобы убедиться в его работоспособности и совместимости с другими плагинами.