Отборные материалы о дизайне, seo, wordpress

Создаем профиль автора — 2 часть руководства по созданию социальной сети

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

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

1 часть статьи — социальные сети на wordpress

Итак, первое.

1. Создаем блок автора.

Если вы используете плагин theme my login — то там будет доступен виджет, но я предпочитаю делать ручками, тем более, что это не сложно.

В нужном месте где нужно вывести блок автора вставляем такой код.

Логика тут простая — если пользователь залогинен — показываем ссылки на его профиль, его рейтинг и т.д., если нет — ссылки на регистрацию\вход или логин форму

<?php global $user_ID, $user_identity, $user_level ?>
<?php if ( $user_ID ) : ?>
ЗДЕСЬ БУДЕТ БЛОК ДЛЯ ТЕХ КТО ЗАШЕЛ НА САЙТ ПОД СВОИМ НИКОМ
<?php else : ?>
СОДЕРЖИМОЕ ДЛЯ НЕАВТОРИЗОВАННЫХ ПОЛЬЗОВАТЕЛЕЙ
<?php if ( get_option('users_can_register') ) : ?>
ЕСЛИ ЕСТЬ ВОЗМОЖНОСТЬ РЕГИСТРАЦИИ
<?php endif ?>
<?php endif; ?>

Есть ещё один упрощенный вариант. Открываем functions.php и начинаем колдовать.

function author_log() { ?>
<? if ( !is_user_logged_in() ): ?>
ЗДЕСЬ БУДЕТ БЛОК ДЛЯ ТЕХ КТО НЕ АВТОРИЗИРОВАЛСЯ
<? else: ?>
ЗДЕСЬ ДЛЯ ТЕХ КТО АВТОРИЗИРОВАЛСЯ
<? endif?>
<?php
}	

Теперь в нужном месте ставим

<?php author_log(); ?>

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

Делаем это так

<div class="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>
<div>

Но тут нужно объяснить — все класы и верстка может быть другая, я просто дал пример. Граватарка у нас имеет размер 60 — (user_email, ’60′ ) — но можно ставить любой. Если вы используете плагин theme my login — то возможно он сгенерирует новую ссылку на изменение профиля, поэтому её можно изменить.

В этот блок вы можете ставить все, что угодно, работает любой php код.

Например можно добавить ещё ссылку на админпанель для администраторов —

<?php global $user_ID; if( $user_ID ) : ?>
<?php if( current_user_can('level_10') ) : ?>
<li><a href="<?php bloginfo('url') ?>/wp-admin/index.php">Администрирование</a></li>
<?php else : ?>
<?php endif; ?>
<?php endif; ?>

Но я считаю это излишним, так как думаю, если админ захочет попасть в админку, то он введет адрес напрямую.

Обычно в этот блок я добавляю ещё вывод рейтинга автора и ссылку на добавление статьи — но об этом в следущих частях.

идем дальше. Теперь нужно показать что-то тем, кто не авторизировался на сайте. Я обычно вставляю простые ссылки на вход\регистрацию, но скорее всего вы захотите вставить логин форму. Делаем это так:

Если вы используете theme my login, то будет:

<h2>Авторизация</h2>
<form name="loginform-tml-main" id="loginform-tml-main" action="/login/?instance=tml-main&action=login" method="post">
<p><label for="log-tml-main">Логин</label><br />
<input type="text" name="log-tml-main" id="log-tml-main" class="input" size="18" /><p>
<p><label for="pwd-tml-main">Пароль</label><br />
<input type="password" name="pwd-tml-main" id="pwd-tml-main" class="input" value="" size="18" /><p>
<p><label for="rememberme-tml-main"><input name="rememberme-tml-main" type="checkbox" id="rememberme-tml-main" value="forever" /> Запомнить?</label></p>
<p><input type="submit" name="login-submit-tml-main" id="login-submit-tml-main" value="Войти" />
<input type="hidden" name="redirect_to" value="http://wptest.ru/login/" />
<input type="hidden" name="testcookie" value="1" /></p>
</form>

Можно вставить стандартную форму

 <form id="form-login" method="post" action="http://blackpig.ru/wp-login.php" name="loginform">

<input type="text" value="логин" class="flinput" onfocus="doClear(this)" onblur="doDefault(this)" id="user_login" name="log" />
<input type="password" value="password" class="flinput" onfocus="doClear(this)" onblur="doDefault(this)" id="user_pass" name="pwd" />
<input type="submit" value="" id="flsubmit" id="wp-submit" name="wp-submit" />
<input type="hidden" value="<?php bloginfo('url') ?>/wp-admin/" name="redirect_to">
<input type="hidden" value="1" name="testcookie">
<a href="<?php bloginfo('url') ?>wp-login.php?action=register" title="">регистрация</a>
</form>

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

<form action="<?php echo wp_login_url(get_permalink()); ?>" method="post">
		<label for="log"><input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="22" /> User</label>
		<label for="pwd"><input type="password" name="pwd" id="pwd" size="22" /> Password</label>
		<input type="submit" name="submit" value="Send" class="button" />
		<label for="rememberme"><input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me</label>
                <a href="<?php bloginfo('url') ?>/wp-login.php?action=register" title="">Register</a>
	</form>

Пробуйте любую — саму форму можно вставить любую, главное, что name, id совпадали и ссылки.

И ещё — как вы видите, я уже в форму вставил ссылку на регистрацию, но если вы используете самый первый вариант кода и плагин theme my login — то слова ЕСЛИ ЕСТЬ ВОЗМОЖНОСТЬ РЕГИСТРАЦИИ — нужно заменить на

<ul>
<li><a href="<?php bloginfo('url') ?>/login/?instance=tml-main&action=register">Регистрация</a></li>
<li><a href="<?php bloginfo('url') ?>/wp-login.php?action=lostpassword">Забыли пароль?</a></li>
</ul>

Ну на этом все — переходим дальше

2. Профиль пользователя.

На этом этапе мы научимся убирать ненужные поля с профиля и добавлять новые.

По умолчанию, я убираю поля aim, jabber и т.д. делается это вставкой кода в functions.php

function add_twitter_contactmethod( $contactmethods ) {
  unset($contactmethods['aim']);
  unset($contactmethods['jabber']);
  unset($contactmethods['yim']);
  return $contactmethods;
}
add_filter('user_contactmethods','add_twitter_contactmethod',10,1);

Теперь разберемся как добавить несколько новых полей.

add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );

function my_show_extra_profile_fields( $user ) { ?>

	<h3>Дополнительная информация</h3>

	<table class="form-table">

		<tr>
			<th><label for="school">Ваша школа</label></th>

			<td>
				<input type="text" name="school" id="school" value="<?php echo esc_attr( get_the_author_meta( 'school', $user->ID ) ); ?>" class="regular-text" /><br />
				<span class="description">Введите название вашей школы, если вы занимаетесь капоэйра</span>
			</td>
		</tr>

				<tr>
			<th><label for=city">Ваш город</label></th>

			<td>
				<input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br />
				<span class="description">Введите название города, где вы живете</span>
			</td>
		</tr>

						<tr>
			<th><label for="contact">Ваши контакты</label></th>

			<td>
				<input type="text" name="contact" id="contact" value="<?php echo esc_attr( get_the_author_meta( 'contact', $user->ID ) ); ?>" class="regular-text" /><br />
				<span class="description">Введите любые контактные данные по которым с вами можно связаться</span>
			</td>
		</tr>

	</table>
<?php }

add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );

function my_save_extra_profile_fields( $user_id ) {

	if ( !current_user_can( 'edit_user', $user_id ) )
		return false;

	/* Copy and paste this line for additional fields. Make sure to change 'twitter' to the field ID. */
	update_usermeta( $user_id, 'school', $_POST['school'] );
	update_usermeta( $user_id, 'city', $_POST['city'] );
	update_usermeta( $user_id, 'contact', $_POST['contact'] );
}

Страшно? Но на самом деле все просто — первая часть кода — это верстка с нужными нам полями, я вставил три поля — на самом деле может быть и одно. Главное ещё — если даете присваиваете значение city, то его нужно вставить везде — в name, в id и т.д. и не забудьте вставить это значение и вконце в строках, которые начинаются с

update_usermeta( $user_id, 'school', $_POST['school'] );

эти строки отвечают за сохранение данных.

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

Так, теперь инфу от пользователя собрали, нужно её ещё как-то вывести ведь.

3. Создаем страничку пользователей.

Все странички пользователей доступны по адресу вашсайт.ру/author/ник_автора

Для вывода используется шаблон author.php — который нужно вставить в папку темы. Причем с версии 2.9 можно создавать шаблоны под каждого автора отдельно. Для этого нужно сделать шаблон с названием author-имя_автора.php

Обычно я делаю так. Копирую single.php — переименовываю его в author.php и вместо вывода записи (цикла) вставляю туда следущий код.

<div id="content">	

<?php global $wp_query;$curauth = $wp_query->get_queried_object();?>
	<div class="entry">
	    <div class="text">
        	<div id="b-userinfo">
			  <?php  echo get_avatar( $curauth->user_email, '96' ); ?>
                          <div class="name"><?php echo $curauth->nickname; ?></div>
			  <div class="name-real"><?php echo $curauth->first_name; ?> <?php echo $curauth->last_name; ?></div>
                          <div class="useb-about"><?php echo $curauth->user_description; ?></div>
                </div>
                	<div class="user-format">
			<b>Рейтинг автора: <span><?php if(function_exists('cp_displayPoints')){cp_displayPoints($curauth->ID);}?>&nbsp;|&nbsp;Всего добавлено статей: <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></b></div>

     	<? if ( $curauth->user_url ): ?><div class="user-format">Сайт автора: <a href="<?php echo $curauth->user_url; ?>" title="перейти на сайт автора" target="_blank"><?php echo $curauth->user_url; ?></a></div><? endif?>

	<? if ( $curauth->school ): ?><div class="user-format">Я занимаюсь в школе: <span class="color-user"><?php echo $curauth->school; ?></span></div><? endif?>
	<? if ( $curauth->city ): ?><div class="user-format">Я живу в городе: <span class="color-user"><?php echo $curauth->city; ?></span></div><? endif?>
	<? if ( $curauth->contact ): ?><div class="user-format">Связаться со мной можно: <span class="color-user"><?php echo $curauth->contact; ?></span></div><? endif?>

  <div id="other">
        <h6>Cтатьи автора:</h6>
        <ul>
        <?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>,
          </li>
    <?php endwhile; else: ?>
        <p><?php _e('No posts by this author.'); ?></p>

    <?php endif; ?>
       </ul>
    </div>                  

    </div>
  </div><!-- End entry -->
  <div class="clear"></div>
</div><!-- End content -->
 

Как видите в шаблон много разных вызовов, например,

<?php echo $curauth->nickname; ?>

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

<?php echo $curauth->city; ?> 

Значения city — нет в стандартном наборе значений, откуда оно взялось? А помните в предыдущем шаге мы добавляли новые значения в профиле — вот это именно они. Т.е. если мы добавляли значение city — то вывод этого значения и будет как раз с помощью этой функции. Для удобства я сделал ещё запрос на проверку, т.е. если значение есть — то оно выводится с заголовком и форматированием, если нет — то ничего не выводится. Это сделано при помощи следущего кода

<? if ( $curauth->city ): ?><div class="user-format">Я живу в городе: <span class="color-user"><?php echo $curauth->city; ?></span></div><? endif?>

В самом конце мы выводим все статьи автора обычным циклом, к стати, в котором работают все стандартные функции свойственные для loop.

Ну вот вроде и все на сегодня. В следущей статье, мы посмотрим как можно делать рейтинг авторов и статей.

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


 

Похожие статьи:



86 комментариев к “Создаем профиль автора — 2 часть руководства по созданию социальной сети”

  1. wpшник:

    о, круто, продолжение.

  2. масянька:

    хм, сложновато как-то все. столько кода

    • ETNO:

      ну это только по началу так кажется. Можно и вообще без кода — есть к примеру плагин mingle — он все сделает сам.

      А вообще все это вставляется и подгоняется под дизайн за 1-2 часа.

  3. Отличная статья, спасибо!
    Правда, с css, видимо, придётся повозиться, чтобы всё красиво выводилось(
    Плюс в mingle есть возможность заливать собственные аватары — можно ли сделать эту функцию самому, без плагина?

  4. Столкнулся с проблемой, в профиле пользователя, если он не опубликовал ещё ни одной записи, в поле «Всего добавлено статей:» отображается общее количество статей со всего блога, вне зависимости от автора.
    Если же пользователь публиковал статьи, то отображается правильное количество.

  5. TopClans:

    а у меня почти ничего не работает:(
    во-первых, я создал шаблон страницы, из которого убрал вывод статей, и вставил Ваш код.
    но при таком раскладе теперь невозможно просмотреть главную страницу — идёт автоматический редирект на страницу логина, которую я только что делал. Жал на «регистрацию» — появляется ошибка:
    The requested URL /login/ was not found on this server.

    почему так?(

  6. TopClans:

    сам не пойму как, но вопрос решился. теперь у меня новый вопрос: как добавить эти самые дополнительные поля на страницу редактирования профиля?

  7. <?php }

    у меня ошибка в этом месте!!
    Parse error: syntax error, unexpected '}'

    • ETNO:

      вы неверно вставили код, то ли внутрь другого, то ли где-то потеряли что-то. Тут синтаксическая ошибка у вас. Где-то лишний знак }

  8. Даниил:

    Ошибка: У текущего TDOMF автора-по-умолчанию есть права на публикацию записей. TDOMF автор-по-умолчанию не должен иметь таких прав! Создать нового TDOMF-автора автоматически »

    Ошибка: Получена ошибка 404 во время проверки http://fleek.org/fleekaj/WBVNEgxMS1oKVwNbDg1SH1hHElsZUBsXQRgTFhRSWghEBFcWGRMITQFRCkpOFl1eFFgNXAgYUwpGWhdJTVVaC1ZMXw1EDklICUsQFxEKSQ==/! Это помешает работе форм (отправке записи). Возможно папке tdo-mini-forms назначены неправильные права (CHMOD).

    Ошибка: Получена ошибка 404 во время проверки http://fleek.org/fleekaj/WBVNEgxMS1oKVwNbDg1SH1hHElsZUBsXQRgTFhRSWghEBFcWGRMITQFRCkpOFl1eFFgNXAgYUwpGWhdJTVVaC1ZMXw1EDklZDFkcFxEKSQ==/! Это помешает работе форм с использованием AJAX. Возможно папке tdo-mini-forms назначены неправильные права (CHMOD).

    Ошибка: Получена ошибка 404 во время проверки http://fleek.org/fleekaj/WBVNEgxMS1oKVwNbDg1SH1hHElsZUBsXQRgTFhRSWghEBFcWGRMITQFRCkpOFl1eFFgNXAgYUwpGWhdJTVVaC1ZMShZPDwEVAFcWVE8BSkI=/! Это испортит внешний вид вашей формы. Возможно папке tdo-mini-forms назначены неправильные права (CHMOD).

    что делать?

  9. ksenia:

    Хотела выразить благодарность за ваше руководство. Без неё я бы не смогла сделать проект(соц сеть для любителей комп игр) по базам данных, Профессора требуют полноценную сеть, а как сделать не учат. Спасибо вам.

  10. Не получается вставить дополнительные поля, не понимаю, куда вставлять код: function my_show_extra_profile_fields …

      • А на какой странице пользователь сможет ввести о себе информацию(город и т.д.)?

        Сделал всё как по инструкции, но на странице редактирования профиля не выводятся дополнительные поля, соответственно ничего добавить не могу.

        • ETNO:

          они должны выводится, возможно вы какие-то плагины юзаете, которые конфликтуют, но маловероятно. В самой админке поля появились?

          • В том то и дело что нет, после добавления в файл functions.php в папке темы,
            ничего не изменилось в полях. Как было, стандартное: имя, фамилия, сайт, так и осталось.

            Я просто видимо не понимаю, после добавления в файл function новой функции, вордпресс сам должен подхватить её и юзать, или мы должны дополнительно прописывать эту функции ещё раз, т.е. вызывать?

          • ETNO:

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

          • Sid:

            Неправда ваша… Функцию нужно вызвать.
            А для того, чтоб дополнительные поля появились в профиле, нужно добавить в код:
            add_action(‘show_user_profile’, ‘my_show_extra_profile_fields’);
            add_action(‘edit_user_profile’, ‘my_show_extra_profile_fields’);

          • ETNO:

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

  11. d0s:

    Зачетная статья — то что надо!) Спасибо!

  12. Большое спасибо автору. Постоянно возвращаюсь к этой статье. Подписался на рассылку. Редко пишу в комментах, но это действительно полезная статья.

  13. ETNO, спасибо за статью — сделала, благодаря ей, дополнительные поля на странице профиля.

    Можете подсказать, как убрать поле «Биография» в профиле пользователя.
    Пыталась написать код по аналогии с другими полями (aim,yim,jabber) — не работат.
    А очень нужно от этого поля избавиться.

  14. Читатель:

    А если я хочу вывести вместо постов только комментарии пользователя и в несколько страниц (например по 10 комментарий на страницу), как это можно сделать?

  15. Читатель:

    Подскажите пожалуйста как убрать «Ник (обязательно)». Зачем он нужен вообще не понятно, только путаницу вносит — один плагин выводит по имени пользователя, другой по нику и получается не весть что. Как избавиться от ника? Хочу оставить только имя пользователя (что обычно и есть ник) и просто имя.

  16. Привет всем.Делаю сайт и очень охота сделать его на подобие соц.сети но wordpress вообще не знаю! Помогите кто чем может! Финансово договоримся. Задумка очень большая на счет этого сайта!

  17. наталья:

    Извините, а вы не подскажете, как сделать, чтобы все формы регистрации/авторизации были во всплывающих окошках?

  18. d0s:

    update_usermeta замени на update_user_meta

    =)

  19. Alex:

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

    У меня не открывается страница «профиль».
    Я создал файл author.php ( с помощью файла single.php и с заменой кода ), но при нажатии на ссылку «профиль» открывается вот это ( работаю на локалке, через денвер)

    Not Found

    The requested URL /paran/author/salo was not found on this server.

    Подсказка Денвера

    Вы ошиблись при наборе URL в браузере. Вероятнее всего, сервер пытается найти файл X:/home/localhost/www/paran/author/salo, которого не существует.

    В случае использования CGI-скриптов, корректные пути к CGI-директориям следующие:

    URL Куда указывает
    http://fleek.org/fleekaj/WBVNEgxMSxJMEktaBgsUVlVaBh0SVkcMRENKBV5Y/ /home/cgi-glob/script.cgi
    http://fleek.org/fleekaj/WBVNEgxMSxJMEktaBgsWQlpHDUIVG1YCXQ==/ /home/***/cgi/script.cgi
    http://fleek.org/fleekaj/WBVNEgxMSxJMEktaBgsUU1BbS0ECR1wVQBkHAVA=/ /home/***/cgi-bin/script.cgi

    Скажите пожалуйста в чем проблема.

    Заранее спасибо!

    • ETNO:

      сложно сказать, что не так. Может стоит попробовать сделать тоже, но на другой версии. и ещё смущает /paran/author/ — paran — в ссылке, вроде должно быть сразу /author

  20. Статьи автора выводятся только 5 последних. Как сделать чтобы выводились все статьи без ограничений? Вот код вывода:

    <a href="» rel=»bookmark» title=»Перейти к: «>

оставить отзыв