WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

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

Добрый день!

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

У зарегистрированных пользователей на странице их профилей есть форма "Написать пользователю на почту".

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

* вопрос отредактирован

Заметки к вопросу:
Kama 3.3 года назад

Что именно вас интересует? Написал все с нуля, начиная с регистрации, заканчивая страницей профиля и рейтингом... Там много чего нужно доделать, все руки не доходят...

Наталия 3.3 года назад

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

Kama 3.3 года назад

Не знаком с этой контактной формой.

Что касается переписки, наверное лучше поставить плагин, в репозитории такие имеются, я сталкивался со "front and pm" - так себе, но пользоваться можно...

Наталия 3.3 года назад

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

Kama 3.3 года назад

Так, я не понял, вам переписка внутри сайта нужна, или нужно просто возможность отправлять письмо пользователю с сайта?

Если второе, то там все просто очень: берете email пользователя см. comment_author_email() и отправляете на него письмо с помощью wp_mail()

Наталия 3.3 года назад

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

1
Наталия
3.3 года назад 25
  • 0
    Kama7297

    Вот функция, которую я написал для этой формы. Она самодостаточно, вызовите её передав ей данные пользователя, которые можно получить через get_userdata()

    // вызов
    echo user_feedback_form( get_userdata(5) );
    
    ## форма обратной связи
    function user_feedback_form( $userdata ){
    	global $current_user;
    
    	$feedback_email = is_email($_POST['feedback_email']) ? $_POST['feedback_email'] : false;
    
    	ob_start();
    
    	$errors = array();
    
    	$out = '';
    
    	// обработвка запроса
    	if( isset($_POST['user_feedback_form']) ){
    		// проверяем поля
    		foreach( $_POST as $key => $val ){
    			if( ! $val )
    				$errors[ $key ] = 'error';
    		}
    		if( ! $feedback_email )
    			$errors['feedback_email'] = 'error';
    
    		// если нет ошибок отправляем письмо
    		if( ! $errors ){
    			$message  = $_POST['feedback_massage'] . "\n\n\n" .
    			"---\n" .
    			"П.С. Письмо отправленно с этой страницы: http://". $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    			// удалим фильтры, которые могут изменить заголовок $headers
    			//remove_all_filters( 'wp_mail_from' );
    			//remove_all_filters( 'wp_mail_from_name' );
    
    			$headers = "From: {$_POST['feedback_name']} [{$_SERVER['HTTP_HOST']}] <{$feedback_email}>\r\n";
    
    			$mail = wp_mail( $userdata->user_email, $_POST['feedback_title'], $message, $headers );
    
    			if( $mail ){
    				$out .= '<p class="c_box_green">Письмо отправленно!</p>';
    				unset( $_POST );
    			}
    			else
    				$out .= '<p class="c_box_red">По неизвестной причине, письмо не было отправлено! Попробуйте отправить его позже.</p>';
    		}
    		else
    			$out .= '<p class="c_box_red">Письмо не отправленно. Заполните отмеченные поля!</p>';
    	}
    
    	// форма
    	$out .= '<form method="POST" action="">';
    		if( $current_user->user_email && $current_user->display_name ){
    			$out .= '
    			<input type="hidden" name="feedback_email" value="'. esc_attr( $current_user->user_email ) .'">
    			<input type="hidden" name="feedback_name" value="'. esc_attr( $current_user->display_name ) .'">
    			';
    		}
    		else {
    			$out .= '
    			<p><label for="feedback_email">Ваша почта:</label>
    			<input type="text" id="feedback_email" class="'. $errors['feedback_email'] .'" name="feedback_email" value="'. esc_attr( $_POST['feedback_email'] ) .'"></p>
    
    			<p><label for="feedback_name">Ваше имя:</label>
    			<input type="text" id="feedback_name" class="'. $errors['feedback_name'] .'" name="feedback_name" value="'. esc_attr( $_POST['feedback_name'] ) .'"></p>
    			';
    		}
    
    		$out .= '
    			<p><label for="feedback_title">Заголовок письма:</label>
    			<input style="width:100%;" type="text" class="'. $errors['feedback_title'] .'" name="feedback_title" id="feedback_title" value="'.  esc_attr( $_POST['feedback_title'] ) .'"></p>
    
    			<p><label for="feedback_massage">Текст письма:</label><br>
    			<textarea style="width:100%; height:200px;" id="feedback_massage" class="'. $errors['feedback_massage'] .'" name="feedback_massage">'. esc_textarea($_POST['feedback_massage']) .'</textarea></p>
    
    			<input type="submit" name="user_feedback_form" class="button-primary" value="Отправить письмо">
    		';
    	$out .= '</form>';
    
    	return $out;
    }
    Наталия 3.3 года назад

    Большущее спасибо. Попытаюсь осуществить затею. Если что - вернусь с вопросами, буду пользоваться Вашей добротой. smile

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация