Как сделать социальную сеть на базе wordpress - создаем профиль автора и страничку пользователя
Отборные материалы о дизайне, 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 часть руководства по созданию социальной сети”


9643e5d7

  1. пишет:

    я создаю страницу профиля. она у меня не открывается. ошибкуа 404

  2. пишет:

    А как сделать на странице автора (точнее на странице редактирования профиля) возможность подписки на определенные рубрики из плагина subscribe 2?

  3. пишет:

    Вы меня простите, но я ни чего не поняла!!! Что за оборот – В нужном месте где нужно вывести блок автора вставляем такой код.!!!!!!!!!!!!! Что значимт В НУЖНОМ МЕСТЕ??? Где это нужное место? На Луне???
    “”"Теперь в нужном месте ставим”"”" Вот и все, но теперь нужно ведь заменить текст на то, что нам нужно. Для авторизированных пользователей мы вставим аватарку, ник, ссылку на профиль, ссылку на страницу изменения профиля, ссылку на выход.

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

    Я понимаю, что вы наверное САМИ СЕБЯ понимаете, но я вас нет!!! Поэтому можно как-то по русски, а не по догадкам!!!!

    • ETNO пишет:

      в нужном месте – это предполагается любое место, где вы хотите видеть этот блок. Можете хоть и на луне.
      Далее, если вставите тот код, то на сайте увидите просто сообщение – ЗДЕСЬ БУДЕТ БЛОК ДЛЯ ТЕХ КТО НЕ АВТОРИЗИРОВАЛСЯ, этот текст и нужно заменить “на то, что нам нужно” – это может быть тоже, что вам захочется. Хоть форма логина, хоть просто сообщение. Некоторые примеры “того, что нужно” я и привел. И да, эта статья для тех, кто хоть что-то понимает в файлах wordpress, если не понимаете, то сначала изучите основы хотя бы, для того, чтобы ковыряться в нем. Не хотите изучать, есть плагин theme my login – я его упоминал в статье не раз.

  4. пишет:

    Это не ученик недогадлив, а преподаватель не правильно объясняющий!!! Потому что еже ли вы что-то пишете, то можно же как-то понятнее объяснять!! Я понимаю, что вы “собаку на этом съели”, но всё же хотелось бы более понятнее!!! заранее, спасибо.

    • ETNO пишет:

      если взглянуть на текст глазами новичка, то конечно мало что понятно, поэтому я писал ещё в начале цикла, что рассчитано на то, что уже есть базовый уровень понимания wordpress и его структуры тем. И к стати, я на этом “собаку не съел”, я вообще дизайнер по специальности, а в wordpress ковырялся потому что хотелось сделать сайты для себя с нуля. Т.е. все сайты, что есть у меня – они сделаны полностью мной, в том числе и верстка и программирование. Но знания php у меня даже ниже, чем начальные

    • ETNO пишет:

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

  5. никто пишет:

    Спасибо большое за статью!
    Вы не могли бы чуть-чуть помочь.
    У меня вот такая проблемка. Сайд-бар почему то в низ падает.
    А еще вопрос если можно.
    Как удалить графу (в настройках профиля) “Личные настройки” и биографию?
    А еще может есть способ сделать чтобы путь на страницу автора был таким: (www.Домен-сайта.ru/А-здесь-сразу-имя-без-надписи”author”) ?
    Еще раз большое спасибо за статью!

    • ETNO пишет:

      с биографией сложнее, обычными методами не удалить. Я встречал только метод скрытия поля через скрипт
      $(‘textarea#description’).parent().parent().hide();

      Или можно вырезать с файла самого движка.
      Вот вам ещё в помощь

    • ETNO пишет:

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

  6. пишет:

    Есть такой вопрос по форме входа:
    вот я зашел отображаются ссылки на “корректировку профиля”, “выход” а как добавить вывод “Ника” пользователя который бы вел на его страницу автора?

    • ETNO пишет:

      как выводить ник и ссылку на профиль описано в статье. Посмотрите 4 код по счету, там есть код который выводит то, что вам нужно

  7. Alex пишет:

    Привет!

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

    Просто я хочу регистрацию поместить на одну страницу с формой входа.

    Смотрел в поисковиках че то не нашел(

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

    Помоги пожалуйста!
    Заранее спасибо!

    • ETNO пишет:

      посмотрите внимательно, я же в статье дал код как и для theme my login, так и стандартной формы.

  8. Alex пишет:

    Или можно ли виджет Theme My Login вставлять просто кодом, а не через админку раздел виджеты?

  9. zeromanser пишет:

    Добрый день.
    “Теперь разберемся как добавить несколько новых полей.” далее огромный кусок кода. Его тоже в functionы.php вставлять? Если да, то после такой операции перестает грузится сайт.
    Еще вопрос – вместо аватарки у меня “user_email, ‘60′ ); ?>”, из-за чего может быть?
    и последнее – файл author.php уже существует, его заменять созданным собственноручно?
    Спасибо заранее. если что, сайт – miris-miris.ru

    • ETNO пишет:

      отпишите мне на почту с указанием кода, комментарии режут код просто

      • пишет:

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

        У меня тот же вопрос, что и у “предыдущего оратора”.

        Сделала все по вашей 1 и 2 статье (кроме functions.php), выходит user_email, ‘60′ ); ?> вместо аватары.

        Может быть, просто перешлете мне ваш ответ для zeromanser?

        Буду вам очень-очень благодарна!

        • ETNO пишет:

          тут смотреть нужно отдельно для каждого сайта. Можете скинуть мне тему на почту – гляну, если будет свободное время

  10. пишет:

    Здравствуйте. У меня вопрос не по теме.
    А как Вы выводите в сайдбаре блок “Лучшие статьи”? Т.е., чтобы выводились тумбы, заголовок и немного текста? Если Вы выводите вручную, то каким плагином, виджетом или кодом можно воспользоваться?

    • ETNO пишет:

      Это все вручную написано. Сами посты выводятся через query_post из определенной рубрики. Миниатюры – подтягиваются автоматом первые картинки с поста, пост обрезается через специальный хак. Все это можно найти в инете, ну или меня попросит, я может статью сделаю. Плагинов я подобных не видел, но есть плагины, которые умеют выводить самые просматриваемые посты.

  11. Павел пишет:

    Зачем заучивать языки програмирования?!
    Легче почти с минимальными знаниями всё написать с минимумом знаний html на uCoz.
    Можно подучить, сделать каркас, таблицу CSS и вписывать js.
    Вывод: im-online.ucoz.net

    • ETNO пишет:

      может тогда на народе делать? нафига та динамичность нужна? И какая разница, что сайт не ваш будет и в любое время его могут забанить.

    • пишет:

      И платить еще каждый месяц чтобы убрали свою раздрожающую рекламу, платить чтобы сделали авторизацию и регистрацию вам индивидуальную(так как зарегился на Unet и заходи на любой сайт), и в итого перейти на другой хостинг, так как сайты на юкоз грузятся 3 часа =)

  12. пишет:

    Было бы хорошо, если бы Вы статью написали.

  13. пишет:

    Привет.
    Для начала, спасибо за статью. Поучительно.
    Но у меня возникла проблема с удалением в профиле полей:

    Admin Color Scheme (Цветовая схема)
    Keyboard Shortcuts (Горячие клавиши)
    Show Admin Bar (Показывать верхнюю панель)

    Как это сделать?

  14. пишет:

    Привет, спасибо за статью. Супер, давно искал такую информацию!
    Возникла проблемма: когда добавляю дополнительные поля к профилю (в functions.php добавляю код) – в посте буквы отображаются нормально, но когда захожу в профиль они отображаются криво (���� ��������). Подскажите, плиз, как можно исправить это недоразумение ?

  15. Андрей пишет:

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

  16. пишет:

    Спасибо! Наконец-то страница автора вывелась при отсутствии записей у пользователя!!!

  17. Еще_один пишет:

    Добрый день. Во-первых огромное спасибо за предоставленный урок. Возможно единственное место в сети где все подробно расписано на русском языке.

    Но почему то у меня проблема с профилями пользователей. Выдает ошибку 404. Подсказали, что проблема может быть из-за ЧПУ. мол Htacces настроен никак следует. Вроде бы исправил. Не помогло.
    Тоже самое что и автора первого поста, который остался не откомментированным.
    Подскажите,в чем может быть проблема. Решил основательно все сделать на WP. вот завис на этой мелочи. =(

    • ETNO пишет:

      помню там глюк был такой с ВП, что нужно не htaccess обновить, а просто зайти в админке на страницу где прописываются ЧПУ и тупо обновить эту страницу – попробуйте

      • Еще_один пишет:

        Не помогло тупо обновить. ну ясень, проблема с хостом моим злоплохим.. на другом поставил – все открывается и без махинаций.

        можно вашу асю узнать?

  18. Askim пишет:

    а как добавить выпадающий список выбора даты рождения?

  19. Zorex пишет:

    Здравствуйте. Проблема с “3. Создаем страничку пользователей.” Вставил все функции что вы дали и сделал шаблон author.php . Но когда захожу в профиль то отображаются только граватар, “Рейтинг автора:”,”Всего добавлено статей: “,”Cтатьи автора:” . А вот город, школа, контакты вообще не отображаются. Как это исправить, в чем может быть проблема?