WordPress как на ладони
wordpress jino

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

Добрый день!

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

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

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

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

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

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

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

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

Kama 2 года назад

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

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

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

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

Kama 2 года назад

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

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

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

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

1
Наталия26 2 года назад
  • 0
    Kama4697

    Вот функция, которую я написал для этой формы. Она самодостаточно, вызовите её передав ей данные пользователя, которые можно получить через 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;
    }
    Наталия 2 года назад

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

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