Как сделать социальную сеть на базе 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.

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

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


 

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



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


9643e5d7

  1. mrlona:

    RusToLat стоит. Ну а толку если имя пользователя через пробел, а плагин будет проьел изменять все равно будет 404. Движок 3.1.1. За код спасибо, все работает.

  2. mrlona:

    Может лучше убрать возможность писать пробел при регистрации?

    • ETNO:

      в кодексе вообще вот так пример

      <a href="<?php echo $curauth->user_url; ?>"><?php echo $curauth->user_url; ?></a>

      Или можно вообще заменить всю конструкцию на

      <?php the_author_posts_link(); ?>

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

  3. mrlona:

    Спасибо огромное за плагин. Как то я не решался поискать такой, не думал что такие есть :)

    Не мог бы ты мне к кое чем помочь?

  4. Каролин:

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

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

  5. :

    Здравствуйте! При создании блока автора в functions.php возникла какая то ошибка, и теперь я не могу зайти ни на сайт ни в админку. С чем это может быть связано?
    Ошибка сервера
    На веб-сайте произошла ошибка при получении . Веб-сайт может быть закрыт на обслуживание или настроен неправильно.
    Вот несколько советов и рекомендаций:
    Обновите эту страницу позже.
    Ошибка HTTP 500 (Internal Server Error): При попытке сервера выполнить запрос возникла неожиданная ситуация.

    • ETNO:

      может вы неправильно вставили в файл functions.php? Где-то тег не закрыли, например. Если уж совсем все поломалось, можно через фтп папку с темой удалить (лучше скопировать на комп) и потом движок если не найдет папку с текущей темой, то откатывается на дефолтную

  6. :

    Спасибо за внимание. Уже сделала. Наверно тег где то не закрыла…

  7. Владимир:

    Здравствуйте! Использовал код с этой страницы, что бы вывести количество постов авторов. Все работает, вот только в профиле авторов, у которых нет постов выводится общее количество статей на сайте () Подскажите, как исправить это

    • ETNO:

      Попробуйте вместо

      <?php $author_posts_link = get_author_posts_url($curauth->ID, $curauth->user_nicename ); $postlink = get_the_author_posts(); echo $postlink; ?>

      использовать

      <?php count_user_posts( $curauth->ID ); ?> 

      Отпишите что выйдет

      • Владимир:

        попробовал, выходит просто пустой белый экран(

        • ETNO:

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

          • Владимир:

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

  8. :

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

  9. :

    Доброго времени суток!
    Спасибо за статьи, очень грамотно и доступно написаны. Есть один вопрос по формам входа… Размещаю на сайте форму из Вашей статьи, и она работает, причем перенаправляет на туже страницу откуда залогинился пользователь, но вот если введен неправильный пароль или логин, то перенаправляется на стандартную страницу вордпресса…
    Как можно сделать так, чтобы при неправильно введенных данных или перезагружалась страница с которой логинится юзер или выскакивало сообщение о том, что какие то данные некорректны?

    • ETNO:

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

  10. Alex:

    О, как хорошо. Надо будет сайт обновить. Когда-то сделал по Вашей методике и боюсь трогать — теперь wppost попробую применить

  11. Иван:

    Подскажите пожалуйста как вывести статьи определенной категории в профиле?