WordPress плагин «Список авторов WordPress»

Наконец-то выкладываю рабочую версию плагина для WordPress «Список авторов WordPress». Начало разработки было описано в статье Делаем список авторов для WordPress.

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

Установка плагина.

Здесь ничего нового:

  1. Скачиваем
  2. Выкладываем папку с файлами в wp-content/plugins
  3. Активируем в админке

Настраивать в данной версии ничего не нужно, вероятно появится позже какой-то дополнительный функционал.

При активации плагина будет создано две талицы wp_authors и wp_authors_stats (вместо wp_ будет ваш префикс, установленный в wp-config.php).

Использование плагина
Нам понадобится создать еще дополнительный шаблон в теме, который далее будет использоваться для вывода списка авторов.
Для этого скачайте мой пример шаблона authors.php и отредактируйте его под свой шаблон. (Новый вордпресс не дружит с вставками кода, поэтому при обновлении текста статьи все слетело)

Для оформления таблицы понадобится добавление классов в style.css

1
2
3
4
5
6
7
8
.cell-head{font-weight:bold;background:white;vertical-align:middle;padding:5px 10px;}
.cell-head-sort{font-weight:bold;background:white;vertical-align:middle;padding:5px 10px;}
.cell1{background:white;vertical-align:middle;padding:5px 10px;}
.cell2{background:white;vertical-align:middle;padding:5px 10px;}
.cellint{text-align:right;}
.author-table{background:#eeeeee;border: 1px solid #e3e3e3;}
.author-table td{border: 1px solid #e3e3e3;}
._votes{float:left;margin:0 10px 10px 0;}

Цвета отрегулируйте под свой шаблон.

Последним шагом осталось создать страницу и выбрать только что созданный шаблон Authors. Для того что бы работали страницы авторов у вас должен быть создан файл шаблона author.php, если такого нет, обратитесь к документации WordPress. Если у вас возникают трудности с созданием шаблонов, обращайтесь, постараюсь помочь. В следующих версиях планирую создание shortcode, т.е. будет возможность написания в любом посте/странице [authors-list] и он будет заменен таблицей с авторами. Подпишитесь на обновления, что бы не пропустить.

Скачать плагин WordPress Masterit Authors List | Страница плагина на WP


UPD. 19.01.2012. Плагин выложен в репозитарий плагинов WordPress. Страница плагина.
Внимание! Кто качал и использовал плагин с нашего сайта, не удивляйтесь, что на WordPress.Org директория именуется по-другому: masterit-authors-list (там автоматом делается), а все содержимое полностью совпадает. Поэтому у нас сайте теперь тоже лежит переименованная версия. Для полного обновления можно заменить (удалить masterit-authors2 и установить новый). Хотя вполне можно обновлять только файлы плагина. Извиняюсь за неудобства.

UPD. 24.04.2012: Исправлена ошибка удаления комментариев. Спасибо, Роберт

UPD. 12.01.2012: Исправлена ошибка пересчета комментариев авторов. Спасибо, Дима

UPD. 8.08.2011: Исправлена ошибка вызова несуществующей функции. Спасибо, Xeon.

UPD. 8.08.2011: Пример шаблона страницы списка авторов — может некорректно работать в вашем шаблоне.

Об авторе AlexeyBalin

AlexeyBalin
Разрабатываю систему Социального поиска FASQu. Поддерживаю большое количество сайтов, работающих на выделенных серверах и виртуальных хостинг-аккаунтах.


Запись опубликована в рубрике Программирование, Скрипты с метками , , , . Добавьте в закладки постоянную ссылку.


Поделиться с друзьями




102 комментария: WordPress плагин «Список авторов WordPress»

  1. Xeon говорит:

    После активации выплюнул вот такую бяку в шапку админки, которая успешно там поселилась:
    Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, ‘masterit_authors_list::create_adminmenu’ was given in /home/wm1175/domains/phplol.ru/public_html/writers/wp-includes/plugin.php on line 405
    =======
    Плагин тем не менее работает, разве что не работает сортировка, кнопки комментарии и дата это ссылки на несуществующие страницы например: http://writers.phplol.ru/authors/?order=comment_count

  2. Xeon говорит:

    Строка 405 это вот это:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // Sort
        if ( !isset( $merged_filters[ $tag ] ) ) {
            ksort($wp_filter[$tag]);
            $merged_filters[ $tag ] = true;
        }

        reset( $wp_filter[ $tag ] );

        do {
            foreach ( (array) current($wp_filter[$tag]) as $the_ )
                if ( !is_null($the_['function']) )
                    call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args']));

        } while ( next($wp_filter[$tag]) !== false );

        array_pop($wp_current_filter);
    }
  3. Xeon говорит:

    Буду признателен, очень обрадовался когда нашёл у вас именно то что мне было нужно. Буду ждать обновления.

    • AlexeyBalin AlexeyBalin говорит:

      Обновил архив с плагином и выложил файл шаблона, а код пришлось убрать из статьи, почему-то новый WordPress убирает половину кода в процессе публикации….

  4. Xeon говорит:

    Спасибо, плагин активировался без проблемм, но почему может не работать сортировка по комментариям, и статьям?

  5. Xeon говорит:

    Так, всё, извиняюсь, можно удалить предыдущее коменты, там просто div один наезжал на таблицу и ссылки были не кликабельны поэтому.
    Но выяснилось следующее, значение БД в таблице wp_authors, столбец comment_count почему то не обновляются, при установке плагина считываются правильно, а потом не изменяются.
    p.s И ещё вылезло вот это, правда не могу точно сказать из-за вашего ли плагина, почему то после добавления нового поста для проверки появилось:

    1
    Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'masterit_authors_list::add_dashboard_widgets' was given in /home/wm1175/domains/phplol.ru/public_html/writers/wp-includes/plugin.php on line 405
  6. Xeon говорит:

    >< Поторопился сюда писать, похоже проблеммы в моём шаблоне, потому что посты пользователей засчитываются, это только у админа так.
    Актуальна только ошибка в 405 линии.
    Наспамил я тут)

  7. Xeon говорит:

    UPD: При удаление коментариев:

    1
    Fatal error: Call to undefined method masterit_authors_list::set_advertiser_account() in /home/wm1175/domains/phplol.ru/public_html/writers/wp-content/plugins/masterit-authors2/mital.class.php on line 280
    • AlexeyBalin AlexeyBalin говорит:

      Обновил еще раз архив с плагином, с пересчетом количества комментариев потестирую еще у себя. Спасибо

  8. Xeon говорит:

    Хм, нет почему-то кол-во комментириев не обновляется. Зато исчезла фатал еррор при их удаление. Если нужно могу дать все права у себя в блоге, так как он ещё не рабочий и на этапе введения в эксплуатацию.

  9. Xeon говорит:

    Хм, может ли это быть связанно с тем, что у меня не получается отключить предмодерацию комментариев на сайте? Ес-но в настройках всё выключенно это…
    Вот comments.php: http://rghost.ru/17219531
    А вот wp-comments-post.php: http://rghost.ru/17219661

    • AlexeyBalin AlexeyBalin говорит:

      не должно быть. счетчики обновляются при всех манипуляциях с комментариями, включая отправку в спам, удаление и т.п. При этом считаются только опубликованные комментарии.

  10. Xeon говорит:

    Что интересно: Если отклонить комментарий человека и удалить его, кол-во его комментариев таки обновится на верное.
    Не знаю как у вас там устроено, но похожа та функция которая обновляет статистику при удаление коммента — работает. А вот при добавление — нет.

    • AlexeyBalin AlexeyBalin говорит:

      Еще раз спасибо за активное тестирование. Выложил новую версию. Счетчики обновляются. Иногда обновляются не сразу, потому что используется встроенный wp_cron, т.е. в течении 5-10 минут, после посещении любой страницы, счетчик обновится.

      • Xeon говорит:

        Да, спасибо, всё работает.
        А не могли вы помочь мне. Почему может не отключатся предмодерация комментариев?
        Я уже хотел насильно добавлять при отправке коментов в БД значение comment_approved = «1» Но не представляю как и где это лучше тут сделать. Свои файлы коментариев я прикладывал…
        Надо бы изучить классы wp = (

        • AlexeyBalin AlexeyBalin говорит:

          Настроек в WP должно быть достаточно
          Вот пример настроек без премодерации.
          http://www.masterit.ru/wp-content/uploads/2011/08/options-1024×349.png

          Единственное, что у меня установлено при наличии 2х или более ссылок в тексте комментария, все равно попадает на модерацию. Ваши файлы скачал, посмотрю. Они отличаются от оригиналов? Какая версия WP?

          • Xeon говорит:

            По настройкам всё верно, вот тут галочки нету, а всё равно требует подтверждения ><
            "Перед появлением комментария
            Администратор должен проверить комментарий"
            wp-comments-post.php — не отличается я думаю.
            А вот comments.php помойму свой в каждом шаблоне.
            Версия 3.2.1

          • Xeon говорит:

            Оу, всё. Разобрался!
            Это плагин Akismet блокировал всё несмотря на настройки блога.

        • AlexeyBalin AlexeyBalin говорит:

          Ну и хорошо, я как раз смотрел, и понял, что из-за спама может быть…

  11. Xeon говорит:

    Что важно: похоже надо удалить и из корзины тоже, иначе будет просто «-1 к текущим»
    Или лыжи не едут или я… >_<

  12. Xeon говорит:

    Ещё не большой вопросик и я от вас отстану)))))
    Как можно использовать информацию из вашего плагина в других частях блога? В частности требуется выводить кол-во комментариев юзера в сайдбаре.

    • Xeon говорит:

      Если ещё подробнее в functions.php у меня есть функция которая потом выводит в сайдбаре, так называемый краткий профиль, вообщем вот:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <div id="cont-side">
      <?php global $current_user;  get_currentuserinfo(); echo get_avatar( $current_user->user_email, '60' ); ?>
      <p><span class="name"><?php global $user_login; get_currentuserinfo(); echo $user_login; ?></span>  <br />
      <a href="<?php bloginfo('url'); ?>/author/<?php echo $current_user->user_login; ?>">Профиль</a>  | <a href="<?php bloginfo('url') ?>/wp-admin/profile.php" title="изменить">Изменить</a><br />
      <a href="<?php echo wp_logout_url( $redirect ); ?>" title="Выйти">Выйти</a> </p>
      <p>Ваш рейтинг:<?php if(function_exists('cp_displayPoints')){cp_displayPoints($curauth->ID);}?>
      <p>Кол-во сообщений: <b><? Вот тут нужно вывести ?> </b>
      <? if ( $num_unread > 0) {?>
      <? echo "<a href='http://writers.phplol.ru/wp-admin/options-general.php?page=rwpm_inbox'><p>Новых личных сообщений: $num_unread</a>"; }?>
      </div>
      • AlexeyBalin AlexeyBalin говорит:

        В плагине пока не реализованы отдельные функции для этого, но можно взять код:

        1
        2
        3
        4
        5
        6
        <?php
        //Получаем инфу об авторе:
        $author = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."authors` WHERE user_id = $current_user->user_ID");
        ?>
        <p>Кол-во сообщений: <b><? echo $author->post_count; ?> </b></p>
        <p>Кол-во комментариев: <b><? echo $author->comment_count; ?> </b></p>
        • Xeon говорит:

          Да, вот что то такое и было нужно.
          Вроде всё логично и не работать не чему.. Но ни чего не выводит… Может потому что через функцию… Хотя global $wpdb обьявлен…

          • AlexeyBalin AlexeyBalin говорит:

            Да, поторапился… get_row вместо get_results и ->ID вместо ->user_ID

            1
            $author = $wpdb->get_row("SELECT * FROM `".$wpdb->prefix."authors` WHERE user_id = $current_user->ID");
  13. Xeon говорит:

    Всё отлично! Примного благодарен. = )

  14. Константин Федоров говорит:

    Скажи пожалуйста

    Я хочу, чтобы ниже имени была страна и город. Как это сделать?

    http://chicherone.com/autors/

    • AlexeyBalin AlexeyBalin говорит:

      Извиняюсь за задержку с ответом. Если у Вас уже есть эти данные о пользователях, то, вероятно они хранятся в wp_user_meta
      Т.е можно использовать функцию get_user_meta

      Для каждого пользователя вызывать эту функцию и выводить нужную информацию.

      1
      2
      3
      4
      5
      6
      <?php
      $user_country = get_user_meta($author['user_id'], 'user_country');
      $user_city = get_user_meta($author['user_id'], 'user_city');
      ?>
      <td><?php echo $user_country ?></td>
      <td><?php echo $user_city ?></td>
      • Константин Федоров говорит:

        у меня плагин Add User Profile

        И еще вопрос. Не хочу, чтобы с авы переходили на сайт пользователя. Где поменять на урл профиля.

        • AlexeyBalin AlexeyBalin говорит:

          Как я понял Add User Profile не позволяет добавлять страну и город или ошибаюсь?

          В комментариях можно использовать возможности функции wp_list_comments, (на странице есть раздел Comments «Only With A Custom Comment Display»), Т.е. можно создать свой функцию и поместить в functions.php своей темы и можно настроить любой внешний вид.

          Для статей это показывается в файлах темы, например в index.php использую код:

          1
          Автор статьи: <a href="/author/<?php the_author_meta('user_login');?>/"><?php the_author() ?></a>
          • <td class="»>
            0 ){ ?>
            <td width="100" class="»><a href="/author//»>
            <td width="50%" class="»><a href="/author//»>

            <td width="100" class="»>
            <td width="50%" class="»>

            <td class=" cellint»>
            <td class=" cellint»>
            <td class="»> 0 ? date(«d.m.Y», strtotime($author[‘last_login’])) : «-«);?>

            куда именно

          • 1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            <tr>
            <!-- порядковый номер --> <td class="<?php echo $class?>"><?php echo (intval($_REQUEST['offset'])+$i+1)?></td>
            <?php /* если статей у автора больше 0, то ставим ссылку на его страницу */ if( $author['post_count'] > 0 ){ ?>
            <!-- аватар --> <td width="100" class="<?php echo $class?>"><a href="/author/<?=$author['user_nicename']?>/"><?=get_avatar($author['user_id'], 100);?></a></td>
            <!-- имя автора --> <td width="50%" class="<?php echo $class?>"><a href="/author/<?php echo $author['user_nicename']?>/"><?php echo $author['display_name']?></a></td>
            <?php }else{ ?>
            <!-- аватар --> <td width="100" class="<?php echo $class?>"><?php echo get_avatar($author['user_id'], 100);?></td>
            <!-- имя автора --> <td width="50%" class="<?php echo $class?>"><?php echo $author['display_name']?></td>
            <?php }?>
            <!-- количество постов --> <td class="<?php echo $class?> cellint"><?php echo $author['post_count']?></a></td>
            <!-- количество комментов --> <td class="<?php echo $class?> cellint"><?php echo $author['comment_count']?></a></td>
            <!-- дата последнего входа --> <td class="<?php echo $class?>"><?php echo ( strtotime($author['last_login']) > 0 ?  date("d.m.Y", strtotime($author['last_login'])) : "-");?></a></td>
            </tr>
        • AlexeyBalin AlexeyBalin говорит:

          В исходниках функции get_avatar (wp-includes/pluggable.php:1655) нет добавления ссылки на домашнюю страницы, т.е. она у Вас добавляется каким-то плагином или может настройки… добавление может быть в apply_filters (wp-includes/pluggable.php:1739)

          Можно скопировать всю эту функцию и убрать apply_filters…

          • где-то тут?

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            59
            60
            61
            62
            63
            64
            65
            66
            67
            68
            69
            70
            71
            72
            73
            74
            75
            76
            77
            78
            79
            80
            81
            82
            83
            84
            85
            86
            87
            function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {
                if ( ! get_option('show_avatars') )
                    return false;

                if ( false === $alt)
                    $safe_alt = '';
                else
                    $safe_alt = esc_attr( $alt );

                if ( !is_numeric($size) )
                    $size = '96';

                $email = '';
                if ( is_numeric($id_or_email) ) {
                    $id = (int) $id_or_email;
                    $user = get_userdata($id);
                    if ( $user )
                        $email = $user->user_email;
                } elseif ( is_object($id_or_email) ) {
                    // No avatar for pingbacks or trackbacks
                    $allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
                    if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) )
                        return false;

                    if ( !empty($id_or_email->user_id) ) {
                        $id = (int) $id_or_email->user_id;
                        $user = get_userdata($id);
                        if ( $user)
                            $email = $user->user_email;
                    } elseif ( !empty($id_or_email->comment_author_email) ) {
                        $email = $id_or_email->comment_author_email;
                    }
                } else {
                    $email = $id_or_email;
                }

                if ( empty($default) ) {
                    $avatar_default = get_option('avatar_default');
                    if ( empty($avatar_default) )
                        $default = 'mystery';
                    else
                        $default = $avatar_default;
                }

                if ( !empty($email) )
                    $email_hash = md5( strtolower( $email ) );

                if ( is_ssl() ) {
                    $host = 'https://secure.gravatar.com';
                } else {
                    if ( !empty($email) )
                        $host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) );
                    else
                        $host = 'http://0.gravatar.com';
                }

                if ( 'mystery' == $default )
                    $default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')
                elseif ( 'blank' == $default )
                    $default = includes_url('images/blank.gif');
                elseif ( !empty($email) && 'gravatar_default' == $default )
                    $default = '';
                elseif ( 'gravatar_default' == $default )
                    $default = "$host/avatar/s={$size}";
                elseif ( empty($email) )
                    $default = "$host/avatar/?d=$default&amp;s={$size}";
                elseif ( strpos($default, 'http://') === 0 )
                    $default = add_query_arg( 's', $size, $default );

                if ( !empty($email) ) {
                    $out = "$host/avatar/";
                    $out .= $email_hash;
                    $out .= '?s='.$size;
                    $out .= '&amp;d=' . urlencode( $default );

                    $rating = get_option('avatar_rating');
                    if ( !empty( $rating ) )
                        $out .= "&amp;r={$rating}";

                    $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
                } else {
                    $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
                }

                return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
            }
            endif;
        • AlexeyBalin AlexeyBalin говорит:

          где-то тут?

          предпоследнюю строку

          1
          return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);

          попробуйте заменить на

          1
          return $avatar;
        • AlexeyBalin AlexeyBalin говорит:

          Попробуйте поискать в плагинах и в теме строку

          1
          add_filter('get_avatar' ...
  15. Xeon говорит:

    Здравствуйте, это сново я, может вы сможете мне помочь, добавил в топ пользователей ещё один столбец с рейтингом юзеров: http://writers.phplol.ru/login/author-tops/
    Рейтинг забираю из плагина CubePoints, вот так вывожу:

    1
    <!-- Рейтинг --> <td class="<?php echo $class?> cellint"><?php echo cp_displayPoints($author['user_id']);?></a></td>

    А как можно реализовать сортировку по этому рейтингу? Или хотя бы просто вывод по умолчанию с рейтингом по убыванию.

    • Xeon говорит:

      Хм, всё больше думаю что просто отсортировать нельзя, так как массивы ни как не связанны. Может тогда подскажите где у вас в плагине идёт запись в базу? Теоретически можно записывать рейтинги пользователей в таблицу плагина и потом уже поступать как и с остальными данными типа кол-ва комментов и постов.

      • AlexeyBalin AlexeyBalin говорит:

        Да, Вы правы. Можно сортировать с объединением таблиц, но сильно уж тяжелый запрос будет. Таким образом, можно добавить полей rating в таблицу wp_authors
        Сможете обойтись без редактировании плагина. Просто при обновлении рейтинга в своем плагине, делаете еще что типа:

        1
        $wpdb->query("UPDATE LOW_PRIORITY `".$wpdb->prefix."authors` SET rating=".$rating." WHERE user_id = ".$user_id );
  16. Юрий говорит:

    Привет, Спасибо за плагин. Мне кстати надо было сделать в выводе сортировку по рейтингу. Вот код (правда еще бы сделать постраничный вывод)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    <?php
    masterit_top_authors();
        $request = parse_str($_REQUEST['q']);
        //Ïîëó÷àåì àäðåñ ñòðàíèöû àâòîðîâ, åñëè îïðåäåëÿåòñÿ íåïðàâèëüíî, çàìåíèòå íà ñâîé.
        //Åñëè â âàøåé íàñòðéîêå WordPress óðë èìååþò âèä /%postname%/,  òî æòà êîíñòðóêöèÿ äîëæíà àâòîìàòîì îïðåäåëèòü URL ñòðàíèöû, èíà÷å ïðîïèøèòå ðóêàìè.
        $authors_uri = str_replace("?".$_SERVER['QUERY_STRING'], "",$_SERVER['REQUEST_URI']);

    ?&gt;








    &lt;div  id="post-"&gt;




       
            Àâòîð

            &lt;?php
                            //Îôîðìëåíèå ñòîëáöîâ â çàâèñèìîñòè îò ñîðòèðîâêè
                            //Ñîðòèðîâêà ïî êîëè÷åñòâó ïîñòîâ
                if( $_REQUEST[&#039;order&#039;] == &#039;post_count&#039; )
                    echo &#039;Ñòàòåé</a>&nbsp;v';
                else
                    echo '<a href="'.$authors_uri.'?order=post_count" rel="nofollow">Ñòàòåé</a>&nbsp;';

                            //Ñîðòèðîâêà ïî êîëè÷åñòâó ̳ñò
                if( $_REQUEST['order'] == 'comment_count' )
                    echo '̳ñòî&nbsp;v';
                else
                    echo '<a href="'.$authors_uri.'?order=comment_count" rel="nofollow">̳ñòî&nbsp;</a>';

                                    //Ñîðòèðîâêà ïî âèä ä³ÿëüíîñò³
                                    if( $_REQUEST['order'] == 'dt_login' )
                                              echo 'Âèä ä³ÿëüíîñò³&nbsp;v';
                                    else
                                             echo '<a href="'.$authors_uri.'?order=dijalnist" rel="nofollow">Âèä ä³ÿëüíîñò³&nbsp;</a>';

                                    //Ñîðòèðîâêà ïî ðåéòèíãó
                                    if(!isset($_REQUEST['order']) || $_REQUEST['order'] == 'cpoints' )
                                              echo 'Ðåéòèíã&nbsp;v';
                                    else
                                             echo '<a href="'.$authors_uri.'?order=cpoints" rel="nofollow">Ðåéòèíã&nbsp;</a>';

    ?&gt;




    <!-- ïîðÿäêîâûé íîìåð --> &lt;td class=&quot;"&gt;
    ID) &gt; 10 ){ ?&gt;
    <!-- àâàòàð --> &lt;td width=&quot;70&quot; class=&quot;"&gt;&lt;a href=&quot;/author/user_nicename?&gt;/"&gt;</a>
    <!-- èìÿ àâòîðà --> &lt;td width=&quot;30%&quot; class=&quot;"&gt;&lt;a href=&quot;/author/user_nicename?&gt;/"&gt;display_name?&gt;</a>

    <!-- àâàòàð --> &lt;td width=&quot;70&quot; class=&quot;"&gt;
    <!-- èìÿ àâòîðà --> &lt;td width=&quot;30%&quot; class=&quot;"&gt;display_name?&gt;

    <!-- Ñòàòòåé --> &lt;td class=&quot;"&gt;ID)?&gt;
    <!-- ì³ñòî --> &lt;td class=&quot;"&gt;misto?&gt;
    <!-- ijÿëüí³ñòü --> &lt;td width=&quot;35%&quot; class=&quot;"&gt;dijalnist?&gt;
    <!-- Ðåéòèíã --> &lt;td class=&quot;"&gt;</a>












    authors_count &gt; 20 ){
    ?&gt; 0 ) {
                ?&gt;&lt;a href=&quot;?order= 20 ? '&amp;offset=' .($_REQUEST['offset'] - 20 ) : '')?&gt;"&gt;&#171; Ïðåäûäóùàÿ ñòðàíèöà</a>&nbsp;&lt;?php
        if( $_REQUEST[&#039;offset&#039;] authors_count ) {
        ?&gt;&lt;a href=&quot;?order=&amp;offset="&gt;Ñëåäóþùàÿ ñòðàíèöà &#187;</a>

    ?>
    • Юрий говорит:

      Упс((( а как сюда его вставить?

    • AlexeyBalin AlexeyBalin говорит:

      Код малость изковеркался, можно вставить в [code][?php … ?][/code]

      только скобки угловые, а не квадратные.

      Если скролинг по страницам » предыдущая | следующая » не устраивает, можно взять любую функцию для скролинга по страницам, который используют в самом блоге (например http://wp-kama.ru/id_8/alternativa-wp-pagenavi-bez-lishnix-zaprosov-k-bd-ili-keshu.html ). Просто вместо количества постов использовать количество авторов (authors_count), и поменять урлы. Или проще найти совсем простые функции сроллинга, которые принимают в качестве параметров общее количество, сколько на страницу и т.д.

  17. Ivan говорит:

    Здравствуйте! Немогу разобраться в установке. Сделал как написано, загрузил в папку plugins , активировал в админке, css добавил. Что делать с файлом authors.php ? я его загрузил в корневую директорию и запускаю, выводится ошибка «Fatal error: Call to a member function masterit_top_authors() on a non-object in /home/ka125/public_html/authors.php on line 8»

    • AlexeyBalin AlexeyBalin говорит:

      Проверил еще раз пошагово, все работает.
      Какая у Вас версия WP?
      в 3.3 с темой twentyeleven
      раньше проверял в 2.9 и 3.1.2 тоже без проблем.

      еще раз шаги:
      1) Залить в wp-content/plugins
      2) Активировать
      3) Скачать файлик http://www.masterit.ru/wp-content/uploads/2011/07/authors.php_1.txt и перименовать в authors.php
      4) положить в папку темы (wp-content/themes/twentyeleven)
      5) В консоли Добавить страницу «Список авторов» и справа в Атрибутах страницы выбрать Шаблон «Authors»
      6) Настроить стили

  18. Ivan говорит:

    Благодарю! Я добавлял файл ауторс.пхп в публик_хтмл . Но теперь меня волнует другой вопрос. Вот таблица высветилась. А при нажатии на автора открывается несуществующая страница http://сайт.рф/author/тут_имя_автора/ Это так и должно быть? Можно ли как нибудь сделать что бы при нажатии на автора открывался список статей его?

    Вот с этим очень хорошо организовано в ЛайфТип, но там много непонятного для авторов статей при публикации. А в вордпресс всё хорошо, но это не продумано 🙁

    • AlexeyBalin AlexeyBalin говорит:

      для отображения страницы автора со статьями должен быть создан файл шаблона author.php
      в стандартной теме twentyeleven он есть, если в Вашей теме нет, можно создать его самому http://codex.wordpress.org/Author_Templates

      • Ivan говорит:

        Этот файл есть, но тогда вопрос возникает как его применить, что бы при нажатии в таблице со списком авторов по имени автору открывался архив со статьями этого автора?

        Вот когда читаешь статью, и с низу под статьёй жмёшь наимя автора, то этот архив открывается.

        • AlexeyBalin AlexeyBalin говорит:

          Список записей автора показывается обычным loop

          Вот там же http://codex.wordpress.org/Author_Templates внизу есть Sample Template File
          и все что начиная от Posts by …
          и заканчивая /ul и есть список статей автора.

          • Ivan говорит:

            Обычный loop обычный для тех кто в теме, для меня всё что выше html уже не обычно. Немогли бы Вы подсказать куда вставить эту строчку

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            <h2>Posts by <?php echo $curauth->nickname; ?>:</h2>

                <ul>
            <!-- The Loop -->

                <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
                    <li>
                        <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: <?php the_title(); ?>">
                        <?php the_title(); ?></a>,
                        <?php the_time('d M Y'); ?> in <?php the_category('&');?>
                    </li>

                <?php endwhile; else: ?>
                    <p><?php _e('No posts by this author.'); ?></p>

                <?php endif; ?>

            <!-- End Loop -->

                </ul>

            Вставил в authors.php ничего не произошло. Да и в Вашем коде в файле авторс.пхп прокомментированн код, который должен выводить ссылки на страницы авторов, если у них статей больше чем 0. Почему этот код не выводит?

          • AlexeyBalin AlexeyBalin говорит:

            Обратите внимание:
            Для списка авторов создаем файл authors.php
            Для страницы автора author.php

            Т.е. приведенный код вам нужно вставить в author.php из своей темы

  19. Ivan говорит:

    О, благодарю! На самом деле всё уже было сделано Вами в файле ауторс.пхп, просто у меня пути не совпадали, так как у меня скрипт расположен не в начальной директории а во вложенной папке, то всего-то надо было дописать в путях в строках 51 и 52 имя папки, в которой скрипт стоит.

  20. Дима говорит:

    такой вопрос,всё установилось хорошо и работает!спасибо,но хотелось бы выводить в таком порядке — в самом верху всегда что бы выводился администратор сайта потом авторы статей а уж потом простые участники сайта(а не у кого статей больше,в принципе авторов можно выводить и у кого статей больше будет стимул для них,а вот администратора сайта в самом верху нужно!) и ещё такой вопрос как реализовать на странице автора вывод его последних комментариев(пока выводится только его последние статьи) спасибо жду с нетерьпеньем ответ.Дмитрий

    • admin говорит:

      Вопрос интересный. Реализовать можно, хотя и кривовато. Сейчас есть поле user_role в wp_authors, если сортировать прямо по этому полю, то так и отсортируются: administrator, author, user …

      Поэтому в строку

      1
      $authors = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."authors` WHERE 1 ORDER BY ".$order." LIMIT $offset,20");

      можно добавить в сортировку при выводе. Будет:

      1
      $authors = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."authors` WHERE 1 ORDER BY `user_role` ASC, ".$order." LIMIT $offset,20");

      Перед этим добавить индекс в таблицу: ALTER TABLE `st_authors` ADD INDEX ( `user_role` );

      Конечно, это временное решение. Нужно учесть редактирование профиля пользователя (например пользователь стал автором). А часто есть редактор в блоге и это уже будет неправильная сортировка. Надо менять на цифры (1 — administrator, 2 — editor, 3 — author …)

      По поводу комментариев: http://codex.wordpress.org/Function_Reference/get_comments

      Внизу страницы примеры.

      только $args будет примерно таким:

      1
      $author_ID = get_the_author_meta('ID'); $args = array('ID' => $author_ID);
      • Дима говорит:

        почему то выводит все комментарии сайта,а не одного пользователя!

        • admin говорит:

          Тогда можно попробовать так:

          1
          2
          3
          4
          5
          6
          7
          8
          $curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));
          $args = array( 'ID' => $curauth->ID  );
          $comments = get_comments();
          ?><ul><?php
          foreach($comments as $comment) :
              echo '<li>'.  $comment->comment_content . '</li>';
          endforeach;
          ?></ul><?php
          • Дима говорит:

            всё равно выводит все комментарии всего сайта и ещё хотелось бы что бы выводимые комменты были кликабельны.

        • AlexeyBalin AlexeyBalin говорит:

          С Новым Годом)) Извиняюсь за молчание. Вероятно неверно ID пользователя определяется, надо смотреть шаблон. Если еще не разобрались, вышлите файл author.php на E-mail alex@balin.su

        • AlexeyBalin AlexeyBalin говорит:

          Вставил код в шаблон, проверил на своем тестовом блоге, работает.
          Результат отправил

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
             <h2>Последние комментарии:</h2>
            <ul>
          <?php
          $comments = get_comments(array('user_id' => $curauth->ID, 'status' => 'approve' ));
          foreach( $comments as $comment ){
              $post = get_post($comment->comment_post_ID);   
              ?><li><?php echo $comment->comment_content ?> к статье <a href="<?php echo $post->guid?>"><?php echo $post->post_title ?></a></li><?php
          }
          ?>
              </ul>
  21. Дима говорит:

    AlexeyBalin — спасибо большое вы настоящий мастер!!!респект -всё заработало хорошо!вот только смайлики поставленные в комментариях не выводятся в author.php!!выводятся почему то просто что то типа то кого 😥

    • AlexeyBalin AlexeyBalin говорит:

      Тогда можно заменить

      1
      <?php echo $comment->comment_content ?>

      на

      1
      <?php comment_text() ?>

      или посмотреть файлик comments.php в шаблоне и взять оттуда то, что внутри «foreach( $comments as $comment): » убрать лишнее и вставить в author.php в этот же foreach

  22. Дима говорит:

    ну здесь то вывелся смайлик в конце!а там типа :_cry_: только без подчёркивания!

  23. Дима говорит:

    и почему то в файле вашем authors.php комментарии пользователей всегда 0,а у администратора меняется всё как нужно!как это можно исправить?

  24. Дима говорит:

    получилось теперь смайлики выводятся нормально!а такой вопрос сколько последних комментариев будет выводится и если все то как сделать например что бы только последние 10!

  25. Дима говорит:

    вот такой вопрос как сделать что бы в файле author.php — то есть на странице автора встроить комментарии как на обычной странице?то есть зайдя на страницу автора можно было ему лично написать комментарий(ну типа послание)и именно на его страничке?думаю задумка прикольная!помогите если есть такая возможность!

    • Юрий говорит:

      Меня тоже это интересует!

    • AlexeyBalin AlexeyBalin говорит:

      Да идея интересная, но реализовать ее стандартными средствами не получится (по-крайней мере я не знаю). Дело в том, что комментарии в WP привязываются к странице или записи из таблицы wp_posts, а страница пользователя не зарегистрирована в этой таблице. Можно добавлять страницы пользователей в базу, но это надо писать специальный плагин (может правда стоит подумать над этим?).

      Можно реализовать с помощью сторонних сервисов, а-ля disqus.com — там просто добавляется JS код на страницу и к ней выводятся комментарии. Есть и другие подобные сервисы.

  26. Дима говорит:

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

    • AlexeyBalin AlexeyBalin говорит:

      Тогда, действительно, надо написать плагин для этого (хотя сперва поищу готовый). Подумаю на эту тему. Сперва выложу обновление для этого плагина, а затем возьмусь за следующий)))

  27. Дима говорит:

    после установки новой версии вся админка wordpress стала не читаема,одни иероглифы типа слитает кодировка!!!пока старую версию оставил!жду ответа!

    • AlexeyBalin AlexeyBalin говорит:

      Ранее пробовал на нескольких установленных WP, все сработало, сейчас установил на вновь установленный WP нет проблем.

      Какая у Вас версия WP и какие еще плагины стоят?

    • AlexeyBalin AlexeyBalin говорит:

      Огого)) понял буду тестить где конфликт или что там вылазит

    • AlexeyBalin AlexeyBalin говорит:

      Не нашел никаких проблем с кодировкой. Возможно ли, что какой-то файл обновился не полностью? Скажем связь с FTP оборвалась.

      • Дима говорит:

        как обновить правильно?нужно старый удалить польностью и базу данных или как?

        • AlexeyBalin AlexeyBalin говорит:

          Нет базу удалять не нужно, только обновить файлы *.php

          • dima говорит:

            странно обновился автоматически из обновления плагинов в wordpress,после активации плагина вся админка становится не читаема,одни карякули ,кодировка сбивается,после возращения старых файлов первой версии все становится нормально,не могу понять в чём дело(((

          • dima говорит:

            не помогло,вернул старую версию всё стало в админке нормально!!!

  28. dima говорит:

    не помогло вернул старые файлы в админке стало всё нормально!

  29. Дима говорит:

    при обновлении плагина пишет — Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, ‘masterit_authors_list::add_dashboard_widgets’ was given in /home/*/***/public_html/wp-includes/plugin.php on line 405

  30. Костя говорит:

    Можно ли с помощью вашего плагина выводить Имя и Фамилию?
    Примерно так как-то:

    И чем может обернуться вставка кода непосредственно в страницу категории, в таком виде:

    masterit_top_authors();
    $request = parse_str($_REQUEST[‘q’]);
    $authors_uri = str_replace(«?».$_SERVER[‘QUERY_STRING’], «»,$_SERVER[‘REQUEST_URI’]);
    $i=0;
    foreach( $authors as $author ) {
    if( $i % 2)
    $class = «cell2»;
    else $class = «cell1″;
    if( $author[‘post_count’] > 0 ){ ?>
    <a href="/author//»>
    <a href="/author//»>

    И есть ли возможность отображать количество постов только в определенной категории. Допустим на сайте есть категория «Новости» и «Блоги».
    Вот на странице с блогами, есть сверху область с авторами, которые постят в категорию «Блоги». Как отобразить количество постов у каждого автора, не примешивая туда количество постов из других категорий.

    Спасибо)

    • AlexeyBalin AlexeyBalin говорит:

      В моем плагине нет такой информации.
      По первому пункту посмотрите функцию get_userdata() — возвращает все данные о пользователе из базы WP, например

      1
      2
      3
      $user = get_userdata($author['user_id']);
      echo $user->user_firstname;
      echo $user->user_lastname;

      Подробнее:
      http://codex.wordpress.org/Function_Reference/get_userdata

      Если поменяете строки с инфой о пользователе, код должен заработать.

      А вот насчет количества статей в категории по пользователю это тема несколько сложнее. Я сперва начал писать, думал простой код будет, но нет.

      по каждому пользователю получается несколько запросов. Надо подумать и поэкспериментировать. Выберу время для этого. Выход вижу — либо отдельный плагин писать или специальное обновление к этому. Постараюсь ответить в ближайшие дни

  31. Роберт говорит:

    Здравствуйте.

    После установки плагина, и попытке удалить любой комментарий написанный зарегистрированным (только зарегистрированным) пользователем выдается ошибка следующего содержания
    Fatal error: Call to undefined method masterit_authors_list::set_advertiser_account() in …/wp-content/plugins/masterit-authors-list/mital.class.php on line 276

    Вот строка 276:
    $this->set_advertiser_account(-10, «user_login» );

    Подскажите как быть, очень нужно иногда и удалять комменты )

  32. nick говорит:

    Здравствуйте, здоровский плагин, давно нужно было что-то подобное, только вот нужно немного модифицировать его под свои нужды. Не подскажете, есть ли в нем возможность вывода пользователей с фильтром?
    То есть, я имею в виду что скажем на сайте есть 2 типа пользователей, авторы и подписчики. Мне нужно выводить и тех и других, но так чтобы можно было выводить только одну группу или только другую.

  33. nick говорит:

    здравствуйте, отличный плагин, только возник вопрос, а есть ли возможность выводить с фильтраций пользователей разных типов? Т.е. например сделать 2 кнопки — авторы и подписчики. При нажатии на одну выводить только список авторов, а на вторую соответственно подписчиков?

    • AlexeyBalin AlexeyBalin говорит:

      Здравствуйте,
      Придется модифицировать файл mital.class.php
      закомментировать строку

      1
      $authors = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."authors` WHERE 1 ORDER BY ".$order." LIMIT $offset,20");

      И добавить 2 строки:

      1
      2
      $role =  isset($_REQUEST['role'])  ? $_REQUEST['role'] : 'author';
      $authors = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."authors` WHERE user_role='".$role."' ORDER BY ".$order." LIMIT $offset,20");

      в шаблоне добавить кнопки, которые будут добавлять параметры к url.

      1
      <a href="/authors/?role=author">Авторы</a> | <a href="/authors/?role=subscriber">Подписчик</a>

      Для того что бы в сортировке и постраничной навигации был параметр, вначале шаблона (перед таблицей) стоит добавить строку:

      1
      $role =  isset($_REQUEST['role'])  ? $_REQUEST['role'] : 'author';

      А в a href к $authors_uri добавить параметр user_role=’.$role.’

  34. Владимир говорит:

    Здравствуйте! Я как раз ищу как сделать вывод авторов на сайте. Подскажите, как прикрутить вывод дополнительных данных, тех что выводятся через author.php пример http://cleverrussia.com/author/id5/ ?

    Вот код который у меня в author.php пробовал заменить Вашу таблицу на свою, что то не пошло. В php пока не силен, будут признателен за совет.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php global $wp_query;$curauth = $wp_query->get_queried_object();?>
        <table border="0" style="width: 100%">
        <tbody>
            <tr>
              <td valign="top" style="width: 155px">
        <?php  echo get_avatar( $curauth->user_email, '140' ); ?>
        </td>
              <td valign="top">
        <h2 class="name-real"><?php echo $curauth->first_name; ?> <?php echo $curauth->last_name; ?></h2>
        <? if ( $curauth->user_strana ): ?><p class="user-format"></br><strong>Страна: </strong><span class="color-user"><?php echo $curauth->user_strana; ?></span></p><? endif?>
        <? if ( $curauth->user_city ): ?><div class="user-format"></br><strong>Город: </strong><span class="color-user"><?php echo $curauth->user_city; ?></span></div><? endif?>
        <? if ( $curauth->user_style ): ?><div class="user-format"></br><strong>Жанр: </strong><span class="color-user"><?php echo $curauth->user_style; ?></span></div><? endif?>
        <? if ( $curauth->user_education ): ?><div class="user-format"></br><strong>Образование: </strong><span class="color-user"><?php echo $curauth->user_education; ?></span></div><? endif?>
        <? if ( $curauth->user_description ): ?><div class="user-format"></br><strong>Обо мне: </strong><span class="color-user"><?php echo $curauth->user_description; ?></span></div><? endif?>
        <p></br><strong>Рейтинг автора: </strong><span><?php if(function_exists('cp_displayPoints')){cp_displayPoints($curauth->ID);}?>&nbsp;|&nbsp; <strong>Всего публикаций: </strong><span class="rate-and-post"><?php $author_posts_link = get_author_posts_url($curauth->ID, $curauth->user_nicename ); $postlink = get_the_author_posts(); echo $postlink; ?></span></p>
        </tr>
          </tbody>
        </table>
  35. RomanZmeu говорит:

    Спасибо. пригодилось для моего блога

  36. lakispy говорит:

    Спасибо за плагин, но в чем смысл называть плагин «лист авторов», если он выводит всех пользователей и для вывода только авторов (тех кто публикует статьи) его еще пилить надо. В любом случае спасибо, благо все расписано и допил не вызвал трудностей 🙂

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *