Задавайте питання щодо курсів WordPress

Розробка особистого кабінету WordPress

Сьогодні я хочу поговорити про те, як все-таки вирішити проблему створення особистого кабінету в WordPress. Цей урок не ідеальний варіант, але для прикладу думаю вам буде достатньо, щоб зрозуміти, як робити правильно і що для цього треба.

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

Для початку необхідно в папці теми /wp-content/themes/{папка теми}/ створити файл шаблону, назвемо її так page-user-profile.php. Для того, щоб шаблон почав працювати, необхідно правильно створити базову структуру. Я пропоную створити наступну структуру в самому верху створеного файлу:

<?php
/**
 * Ім'я шаблону: User Profile
 *
 * Allow users to update their profiles from Frontend.
 *
 */

/* Get user info. */

Нижче коментаря /* Get user info. */ додаємо код виведення даних:

	<стіл>
		<тр>
			<клас td="avatar">
				<?php echo get_avatar( $current_user->ID, 60 ); ?> 
			</тд>
			<клас td="short_user_info">
				<?php
				echo '<h2>'.$current_user->user_firstname.' '.$current_user->user_lastname."</h2>\п";
				луна '<b>Сайт:</b> <a href="'.$current_user->user_url"." ціль="_Порожній">'.$current_user->user_url."</a><Бр />\п";

				луна "<Бр />";
				?>
			</тд>
		</тр>
	</стіл>
	<?php echo "<Бр /><b>Биография:</b> \п<blockquote>".$current_user->user_description."</blockquote>\п"; ?>

Після додавання зберігаємо файл. Заходимо в Панель Адміністратора -> Створюємо нову сторінку – > Вибираємо шаблон для виведення даних.

создаем профиль пользователя wordpress

 

Після виведення вибору шаблону та публікації сторінки натискаємо на кнопку [Переглянути зміни]. У вас на екрані буде картина приблизно такого вигляду:

Перегляд профілю користувача на фротендВідмінно, тепер дані у нас виведені і думаю слід детальніше розглянути, що конкретно було нами зроблено і які при цьому функції використовувалися..

get_avatar( $current_user->ID, 60 ) – Виводить аватар поточного користувача у розмірі 60 на 60 пікселів. Якщо у вас як і у мене аватар просто сплющило, то це можна легко виправити простим перекриттям стилів для даного зображення наступного виду в стилях теми просто додаємо .avatar img{ width: auto !important; }.

Пропорційний аватар на стороні користувача WordPress

Звідки я брав ось такі стоки та інші подібні:

$current_user->user_firstname
$current_user->user_lastname

Щоб стало зрозуміло буде достатньо подивитися на таку картинку зроблену мною проінспектувавши профіль адміністратора в панелі адміністратора.

Вивести поле із профілю користувача WordPress

Так само можна вивести будь-яке поле на сторінці профілю. Найчастіше виникає ще ситуація, коли необхідно додати поля для профілю. І цей момент вирішується дуже просто, звичайним додаванням коду до файлу functions.php, який знаходиться в папці теми.

функція add_social_contactmethod( $Контактні методи ) {
    // Add new ones
    $contactmethods['ВК'] = 'vk.com';
    $Контактні методи['ICQ'] = 'icq';
    $Контактні методи['скайп'] = 'skype';
    $Контактні методи["Твіттер"] = 'Твіттер';
    $Контактні методи["Фейсбук"] = "Фейсбук";

    // remove unwanted
  unset($Контактні методи['Мета']);
  unset($Контактні методи['Джаббер']);
  unset($Контактні методи['yim']);
  повернення $contactmethods;
}
add_filter('user_contactmethods','add_social_contactmethod',10,1);

Відмінно на цьому етапі ми налаштували виведення даних профілю, додали нові поля та прибрали деякі старі.

Редагуємо дані на стороні користувача

Небагато пошукавши в інтернеті, я знайшов цікаву структуру коду, за допомогою якої можна редагувати дані поточного користувача з фронтенду. Створимо новий файл для майбутнього шаблону та назвати його page-edit-user-profile.php.

У файлі створюємо вже знайому нам структуру, яка допоможе CMS побачити наш шаблон:

<?php
/**
 * Ім'я шаблону: Редагувати профіль користувача
 *
 * Allow users to update their profiles from Frontend.
 *
 */

Нижче додаємо код:

/* Get user info. */
глобальний $current_користувач, $wp_roles;
get_currentuserinfo();

/* Завантажте реєстраційний файл. */
require_once( ABSPATH . WPINC . '/реєстрація.php' );
$помилка = масив();    
/* Якщо профіль було збережено, оновити профіль. */
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_ПОСТ['Дія'] ) && $_ПОСТ['Дія'] == "користувач-оновлення" ) {

    /* Оновлення пароля користувача. */
    if ( !empty($_ПОСТ['pass1'] ) && !empty( $_ПОСТ['pass2'] ) ) {
        if ( $_ПОСТ['pass1'] == $_POST['pass2'] )
            wp_update_user( array( 'ID' => $current_user->ID, 'user_pass' => esc_attr( $_ПОСТ['pass1'] ) ) );
        else
            $error[] = __("Введені паролі не збігаються.  Ваш пароль не оновлено"., 'Профіль');
    }

    /* Оновлення інформації про користувача. */
    if ( !empty( $_ПОСТ['url'] ) )
        update_user_meta( $current_user->ID, 'user_url', esc_url( $_ПОСТ['url'] ) );
    if ( !empty( $_ПОСТ["електронна пошта"] ) ){
        if (!is_email(esc_attr( $_ПОСТ["електронна пошта"] )))
            $помилка[] = __("Електронна пошта, яку ви ввели, недійсна.  будь ласка, спробуйте ще раз"., 'Профіль');
        інакшеякщо(email_exists(esc_attr( $_ПОСТ["електронна пошта"] )) != $current_користувач->id )
            $помилка[] = __("Цей електронний лист вже використовується іншим користувачем.  спробуйте інший"., 'Профіль');
        ще{
            wp_update_user( array ('ID' => $current_user->ID, 'user_email' => esc_attr( $_ПОСТ["електронна пошта"] )));
        }
    }

    if ( !empty( $_ПОСТ['ім'я'] ) )
        update_user_meta( $current_user->ID, 'first_name', esc_attr( $_ПОСТ['ім'я'] ) );
    if ( !empty( $_ПОСТ['Прізвище'] ) )
        update_user_meta($current_user->ID, 'last_name', esc_attr( $_ПОСТ['Прізвище'] ) );
    if ( !empty( $_ПОСТ['опис'] ) )
        update_user_meta( $current_user->ID, 'опис', esc_attr( $_ПОСТ['опис'] ) );

    /* Redirect so the page will show updated info.*/
  /*I am not Author of this Code- Я не знаю чому, але це спрацювало для мене після зміни нижче лінії на if ( рахувати($помилка) == 0 ){ */
    if ( рахувати($помилка) == 0 ) {
        //action hook for plugins and extra fields saving
        do_action('edit_user_profile_update', $current_user->ID);
        wp_redirect( get_permalink() );
        вийти;
    }
}
?>

<?php if ( have_posts() ) : Хоча ( have_posts() ) : the_post(); ?>
    <ділення id="пост-<?php the_ID(); ?>">
        <клас div="запис вмісту">
            <?php the_content(); ?>
            <?php if ( !is_user_logged_in() ) : ?>
                    <клас р="Попередження">
                        <?php _e("Ви повинні увійти, щоб відредагувати свій профіль"., 'Профіль'); ?>
                    </стор><!-- .Попередження-->
            <?php інше : ?>
                <?php if ( рахувати($помилка) > 0 ) луна '<клас р="помилка">' . імплоду("<Бр />", $помилка) . '</стор>'; ?>
                <метод форми="пост" id="Додавач" дія="<?php the_permalink(); ?>">
                    <клас р="форма-ім'я користувача">
                        <мітка для="Ім'я"><?php _e('Ім'я', 'Профіль'); ?></label>
                        <вхідний клас="введення тексту" ім'я="Ім'я" type="text" id="Ім'я" value="<?php the_author_meta( 'first_name', $current_user->ID ); ?>" />
                    </стор><!-- .форма-ім'я користувача -->
                    <клас р="форма-ім'я користувача">
                        <мітка для="Прізвище"><?php _e('Прізвище', 'Профіль'); ?></label>
                        <вхідний клас="введення тексту" ім'я="Прізвище" type="text" id="Прізвище" value="<?php the_author_meta( 'last_name', $current_user->ID ); ?>" />
                    </стор><!-- .форма-ім'я користувача -->
                    <клас р="форма-електронна пошта">
                        <мітка для="електронною поштою"><?php _e("Електронна пошта *", 'Профіль'); ?></label>
                        <вхідний клас="введення тексту" ім'я="електронною поштою" type="text" id="електронною поштою" value="<?php the_author_meta( 'user_email', $current_user->ID ); ?>" />
                    </стор><!-- .форма-електронна пошта -->
                    <клас р="форма-url">
                        <мітка для="url"><?php _e('Веб-сайт', 'Профіль'); ?></label>
                        <вхідний клас="введення тексту" ім'я="url" type="text" id="url" value="<?php the_author_meta( 'user_url', $current_user->ID ); ?>" />
                    </стор><!-- .форма-url -->
                    <клас р="форма-пароль">
                        <мітка для="прохідний1"><?php _e('Пароль *', 'Профіль'); ?> </label>
                        <вхідний клас="введення тексту" ім'я="прохідний1" type="пароль" id="прохідний1" />
                    </стор><!-- .форма-пароль -->
                    <клас р="форма-пароль">
                        <мітка для="прохідний2"><?php _e('Повторити пароль *', 'Профіль'); ?></label>
                        <вхідний клас="введення тексту" ім'я="прохідний2" type="пароль" id="прохідний2" />
                    </стор><!-- .форма-пароль -->
                    <клас р="form-textarea">
                        <мітка для="опис"><?php _e('Біографічні відомості', 'Профіль') ?></label>
                        <ім'я текстової області="опис" id="опис" рядки="3" cols="50"><?php the_author_meta( 'опис', $current_user->ID ); ?></textarea>
                    </стор><!-- .форма-текстарея -->

                    <?php 
                        //action hook for plugin and extra fields
                        do_action('edit_user_profile',$current_user); 
                    ?>
                    <клас р="Форма-Надіслати">
                        <?php echo $referer; ?>
                        <ім'я введення="updateuser" type="submit" id="updateuser" клас="Кнопка "Надіслати" value="<?php _e('Оновлення', 'Профіль'); ?>" />
                        <?php wp_nonce_field( 'update-user' ) ?>
                        <ім'я введення="дія" type="hidden" id="дія" value="оновлення-користувача" />
                    </стор><!-- .форма-подача -->
                </форма><!-- #Аддузер -->
            <?php endif; ?>
        </див.><!-- .вступ-зміст -->
    </див.><!-- .hentry .post -->
    <?php endwhile; ?>
<?php інше: ?>
    <клас р="без даних">
        <?php _e("Вибачте, жодна сторінка не відповідала вашим критеріям"., 'Профіль'); ?>
    </стор><!-- .без даних -->
<?php endif; ?>

Після вставки коду необхідно, як і раніше, створити нову сторінку та привласнити їй шаблон Редагувати профіль користувача. Зберігаємо створену сторінку та натискаємо кнопку [Переглянути зміни]:

Редагуємо профіль користувача WordPress

 

Якщо все зроблено правильно ви побачите таку форму редагування, вона має працювати. Виведення інших полів з панелі адміністратора реалізується схожим способом. Заходимо в панель та беремо ім'я поля, яке необхідно вивести.

Беремо ім'я поля для редагування WordPress

За аналогією з поданим кодом виводимо метадані автора:
<?php the_author_meta( ‘first_name’, $current_user->ID ); ?>

Залишилося одне завдання, це можливість редагувати аватар для автора, але на жаль WordPress блокує спроби редагування аватара з частини користувача з радістю прослухаю ваші пропозиції та ідеї по роботі з аватаром, хотілося б при цьому робити все правильно і працювати саме з API WordPress.

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


Купити хостинг WordPress
Репетитор по wordpress
Послуги репетитора онлайн. Список курсів, які я веду
  • Базовий курс з веб-дизайну;
  • Верстка сайтів;
  • Загальний курс CMS WordPress та продовження курсу з розробки шаблонів;
  • Розробка сайтів на PHP.
Докладніше читайте на сторінці репетитор по WordPress
*/

Ніколаєнко Максим

Директор веб-студии ProGrafika. Займаюсь розробкою, дизайном та просуванням веб-сайтів. Завжди радий новим читачам блогу та добрим клієнтам.


Вам також може сподобатися...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються дані ваших коментарів.

Шаблони для WordPress
Найкращий хостинг в Україні
Стабільний хостинг для Drupal