• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

Помощь Создать отдельную страницу комментариев для каждого пользователя

Teceract

Постоялец
Регистрация
15 Фев 2009
Сообщения
205
Реакции
117
Привет всем!

Ну вроде как простецкая проблема, но оказалось, что не смог ее решить. Думаю многим тоже будет полезно узнать, как можно реализовать данный вывод.
Проблема следующая:
Нужно сделать вывод комментариев каждого отдельного пользователя на отдельной странице. Стандартный профиль пользователя выводится по такому адресу:
сайт.ру/author/usertakoito
а нужно сделать дополнительную страницу, но уже комментариев:
сайт.ру/comments/usertakoito
Конечно можно было ограничиться сделать вкладки: Профиль / Комментарии / Записи
Но голова ищет проблем.

Что я сделал:
1. Сделал рабочий вывод комментариев (тестировал в файле профиля: author.php)
2. Создал страницу со slug comments
3. Сделал для этой страницы парсер "параметра":

PHP:
function add_my_var($public_query_vars) {
$public_query_vars[] = 'author';
return $public_query_vars;
}
 
add_filter('query_vars', 'add_my_var');
 
function do_rewrite() {
add_rewrite_rule('comments/([^/]+)/?$', 'index.php?pagename=comments&author=$matches[1]','top');
}
 
add_action('init', 'do_rewrite');

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

Помогите разобраться с данной проблемой.

Заранее всем спасибо! =)
 
Чтобы понять проблему нужно увидеть шаблон страницы комментариев целиком, где видно как вы обрабатываете переменную с ником автора и выводите комментарии.
 
Чтобы понять проблему нужно увидеть шаблон страницы комментариев целиком, где видно как вы обрабатываете переменную с ником автора и выводите комментарии.

вчера проверял, при запросе в адресной строке /comments выводятся все комментарии
а при постановке пользователя, выходит 404


PHP:
<?php
/* Template Name: Author Comments */
get_header();
?>
<section id="primary" class="site-content">
<div id="content" role="main">
 
 
 
<?php    // размещаем в файле function.php
/*
function add_my_var($public_query_vars) {
    $public_query_vars[] = 'author';
    return $public_query_vars;
}
 
add_filter('query_vars', 'add_my_var');
 
function do_rewrite() {
    add_rewrite_rule('comments/([^/]+)/?$', 'index.php?pagename=comments&author=$matches[1]','top');
}
 
add_action('init', 'do_rewrite');
*/
?>
 
 
 
 
<?php
$wpdb->get_var("SELECT FROM ".$wpdb->prefix ."comments WHERE comment_author = '$author'");
?>
 
 
 
 
<?php // Функция вывода комментариев
function author_comments(){
global $wpdb;
$curauth = (get_query_var('author_name')) ? get_user_by('slug', get_query_var('author_name')) : get_userdata(get_query_var('author'));
$com_author = $curauth->ID;
$inpage = 5;                // сколько комментариев выводить
 
    if($_GET['page']) $page = $_GET['page'];
        else $page=1;
 
    $start = ($page-1)*$inpage;
 
    $count_comments = $wpdb->get_var("SELECT COUNT(comment_ID) FROM ".$wpdb->prefix ."comments WHERE user_id = '$com_author'");
    $comments_user = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix ."comments WHERE comment_approved = '1' AND user_id = '$com_author' ORDER BY comment_date DESC LIMIT $start,$inpage");
    // comment_approved = '1' AND        выводим только одобренные комментарии
 
    $num_page = ceil($count_comments/$inpage);
 
    if($comments_user){
        $commentlist = '<div id="commentlist">';
        $commentlist .= '<h3>Комментарии пользователя '.$curauth->nickname.':</h3>';
        foreach($comments_user as $comment){
            $commentlist .= '<h2><a href="'.get_permalink( $comment->comment_post_ID ).'" title="Перейти к записи">'.get_the_title($comment->comment_post_ID).'&rarr;</a></h2>';
            $commentlist .= '<div id="feed-comment-'.$comment->comment_post_ID.'">';
            $commentlist .= '<div class="feed-content-box">'.$comment->comment_content.'';
            $commentlist .= '<div class="feedcommentmeta"><a target="_blank" href="'.get_permalink( $comment->comment_post_ID ).'#comment-'.$comment->comment_ID.'" title="Перейти к комментарию">'.mysql2date('d.m.Y в G:i', $comment->comment_date).'</a></div></div>';
            $commentlist .= '</div>';
        }
        $commentlist .= '</div>';
        echo $commentlist;
        if($inpage&&$count_comments>$inpage){
            $url = get_author_posts_url($com_author);
            $url = explode('?',$url);
            if($url[1]){
                $redirect_url = get_author_posts_url($com_author).'&';
            } else {
                $redirect_url = get_author_posts_url($com_author).'?';
            }
            $page_navi .= '<div class="user-navi">';
            $next = $page + 3;
            $prev = $page - 4;
            if($prev==1) $page_navi .= '<a href="'.$redirect_url.'page=1">1</a>';
            for($a=1;$a<=$num_page;$a++){
            if($a==1&&$a<=$prev&&$prev!=1) $page_navi .= '<a href="'.$redirect_url.'page=1">1</a> ... ';
                if($prev<$a&&$a<=$next){
                if($page==$a) $page_navi .= '<span>'.$a.'</span>';
                    else $page_navi .= '<a href="'.$redirect_url.'page='.$a.'">'.$a.'</a>';
                }
            }
            if($next<$num_page&&$num_page!=$next+1) $page_navi .= ' ... <a href="'.$redirect_url.'page='.$num_page.'">'.$num_page.'</a>';
            if($num_page==$next+1) $page_navi .= '<a href="'.$redirect_url.'page='.$num_page.'">'.$num_page.'</a>';
            $page_navi .= '</div>';
        }
        echo $page_navi;
} else { // Если у пользователя нет комментариев
    echo 'Пользователь не оставил комментариев.';
}
}
?>
 
<?php echo author_comments(); ?>
 
 
 
<?php
echo get_query_var('author');
?>
 
</div>
</section>
 
<style>
#commentlist {padding: 15px 0px 0px 0px;}
#commentlist h3 {border-bottom: 1px solid #dddddd; font-family: georgia; font-size: 16px; margin: 0px 0px 10px 0px; padding: 0px 0px 10px 0px;}
.feed-content-box {border-bottom: 1px solid #dddddd; line-height: 16px; margin: 10px 0px 10px 0px; padding: 10px 10px 0px 5px;}
.feedcommentmeta a {color: #ADADAD; font-size: 10px;}
.user-navi a {color: #0657a5; display: inline; font-size: 11px; padding: 5px 9px 5px 9px; margin: 0px 2px 0px 2px;}
</style>
 
<?php get_sidebar(); ?>
<?php get_footer(); ?>
 
Непонятно зачем вам такой велосипед для комментариев, если есть функция get_comments:
PHP:
<?php get_comments( $defaults = array(
'author_email' => 'cool@boy.ru',
'number' => '10',
'order' => 'DESC',
'post_status' => 'approve',
'post_type' => 'post'
) ); ?>
А ваша задача сводится к получению ID пользователя, его профиля и поиску комментариев по email, для чего все таки стоит отказаться от query_var = author, которое уже используется WP для передачи ID пользователя. Да еще и используете get_userdata, где нужно использовать его id, а не slug:
PHP:
<?php $user_info = get_userdata(1);
echo 'Username: ' . $user_info->user_login . "\n";
echo 'User level: ' . $user_info->user_level . "\n";
echo 'User ID: ' . $user_info->ID . "\n";
?>
В общем вам нужно привести в порядок ваш код:

Если все равно будет 404 ошибка, то проверьте попадает ли ваше правило в глобальный wp_rewrite.
 
Да, действительно вышла ошибка 404, но теперь более понятно, в какую сторону копать. Скрипт делал на чистый вордпресс, скорей всего ошибка выходит на самом деле из-за неправильно указанного правила в глобальном wp_rewrite. Спасибо большое за помощь!
Если получится разобраться до конца, опубликую готовый код.
 
Чтобы быть уверенным в том, что правило попало в глобальный wp_rewrite, я бы рекомендовал использовать код такого вида:
В функции myFlushRules мы проверяем наличие нашего правило в глобальном wp_rewrite и, если оно отсутствует, вызываем обновление списка правил. Таким образом, после добавления очередного правила, код условия проверки можно менять.
 
В общем с помощью Вас я добился результата. Теперь действительно отображаются комментарии для каждого пользователя отдельно, но появилась снова другая проблема. Теперь не выходит ошибка 404, если ввести несуществующего пользователя.
Можно ли как то сделать проверку?
 
Всё правильно, ведь мы открываем страницу comments, а она у нас существует в любом случае, в то время как id пользователя всего лишь параметр данной страницы. Чтобы выдать ошибку 404 нам нужно обратиться к глобальному wp_query, обязательно в шаблоне header.php:
Не стоит забывать, что данный код нужно поместить в условие, когда указанный автор не найден.
 
Не стоит забывать, что данный код нужно поместить в условие, когда указанный автор не найден.
много статей прочитал, но не видел такое перенаправление, да что там, даж не подумал.
Как много способов всего достичь))))
Немного помучался с header.php, но все же получилось.
В принципе квест завершен)))) Спасибо что помогли мне и надеюсь, что другим тоже будет полезно =)
 
Назад
Сверху