#php #wordpress #forms
#php #wordpress #формы
Вопрос:
Я ищу еще несколько советов о том, как справиться с этим.
У меня есть одна страница со ссылками на каждого участника-администратора, которая при нажатии принимает их отображаемое имя. На второй странице, которая является формой, она принимает отображаемые имена и заполняет поле темы их отображаемым именем. Мне нужно захватить адрес электронной почты, который также связан с этим пользователем, но использовать его в качестве адреса электронной почты, на который отправляется форма на второй странице, поскольку в настоящее время мой скрипт может отправлять его только на адрес электронной почты, который я жестко прописал в нем.
Итак, первая страница:
<?php
$args1 = array(
'role' => 'committee',
'orderby' => 'user_nicename',
'order' => 'ASC'
);
$committee = get_users($args1);
foreach ($committee as $user) {
echo '
<a href="../contact-form?displayname=' . $user->display_name . '"><b style="font-size:18px;">
<tr>
<td style="padding: 10px;">' .$user->job_title .' - </td>
<td style="padding: 10px;">' .$user->display_name .'</td>
</tr></b></a><br><br>';
}
?>
Вторая страница:
<?php $displayname = $_GET['displayname'];?>
<form role="form" method="post" action="../mailuser.php">
<div class="form-group">
<input type="hidden" name="displayname" value="<?php echo $displayname ?>">
<input type="text" name="hp" class="hp" value="" alt="if you fill this field out then your email will not be sent">
</div>
<div class="form-group">
<label for="InputName">Your name</label>
<input type="name" class="form-control" id="InputName" placeholder="Enter your name" name="username">
</div>
<div class="form-group">
<label for="InputEmail">Email address</label>
<input type="email" class="form-control" id="InputEmail" placeholder="you@example.com" name="emailFrom">
</div>
<div class="form-group">
<label for="InputMsg">Message</label>
<textarea class="form-control" rows="8" id="InputMsg" placeholder="Please begin typing your message..." name="emailMessage"></textarea>
</div>
<button type="submit" class="btn btn-primary pull-right">Send</button>
</form>
И в моем сценарии отправки моя электронная почта жестко запрограммирована как:
$mail->From = ‘myemail@dummy.com ‘;
Поэтому мне нужно, чтобы это было переменной в зависимости от того, на какого человека вы нажали в первую очередь. Его необходимо отправить как на мой жестко запрограммированный адрес электронной почты, так и на адрес электронной почты пользователей, который связан с ними в базе данных пользователей WordPress.
Комментарии:
1. есть ли у вас отображаемые имена и адреса электронной почты в базе данных?
2. @MikeWillis Итак, имя пользователя и адреса электронной почты хранятся в базе данных, но в качестве моего бэкэнда используется WordPress. Итак, если вы взглянете на первую часть моего скрипта, он показывает, как я могу получить к ним доступ и отобразить их.
3. хорошо, я не был уверен, как работает get_users. В этом случае почему бы не выполнить поиск адреса электронной почты на второй странице, используя displayname в качестве совпадения?
4. Вот где я застрял, я подумал, что это будет наиболее логичным способом, но не уверен, каков наилучший способ добиться этого?
5. Возвращает ли get_users отображаемое имя и адрес электронной почты? Если это так, на второй странице вы можете выполнить другой get_users, просмотреть список, найти тот, у которого есть соответствующее displayname, и получить адрес электронной почты. Тогда $mail-> To = $matchedEmailAddress; должно сработать
Ответ №1:
Основываясь на нашем обсуждении комментариев, вы должны быть в состоянии сделать что-то вроде следующего на второй странице. Обязательно исправьте мой email_address, я не уверен, возвращает ли get_users адрес электронной почты именно так или нет.
<?php
$displayname = $_GET['displayname'];
$args1 = array(
'role' => 'committee',
'orderby' => 'user_nicename',
'order' => 'ASC'
);
$committee = get_users($args1);
$matchingEmail = false;
foreach ($committee as $user) {
if ( !$matchingEmail amp;amp; $user->display_name == $displayname ) {
// great, we found our match
$matchingEmail = $user->email_address; // I don't know if email_address is right, double check this and modify if necessary
}
}
if ( $matchingEmail ) {
// only proceed if a matching email address is found
?>
<form role="form" method="post" action="../mailuser.php">
<div class="form-group">
<input type="hidden" name="displayname" value="<?php echo $displayname; ?>">
<input type="hidden" name="matchingEmail" value="<?php echo $matchingEmail; ?>">
<input type="text" name="hp" class="hp" value="" alt="if you fill this field out then your email will not be sent">
</div>
<div class="form-group">
<label for="InputName">Your name</label>
<input type="name" class="form-control" id="InputName" placeholder="Enter your name" name="username">
</div>
<div class="form-group">
<label for="InputEmail">Email address</label>
<input type="email" class="form-control" id="InputEmail" placeholder="you@example.com" name="emailFrom">
</div>
<div class="form-group">
<label for="InputMsg">Message</label>
<textarea class="form-control" rows="8" id="InputMsg" placeholder="Please begin typing your message..." name="emailMessage"></textarea>
</div>
<button type="submit" class="btn btn-primary pull-right">Send</button>
</form>
<?php
} else {
?>
<p>Something is wrong, I can't find your email address! Please try again.</p>
<?php
}
?>
Наконец, на третьей странице, где вы отправляете электронное письмо, вы можете сделать что-то вроде:
<?php $mail->addAddress(stripslashes( $_POST["matchingEmail"] ) ); ?>
Комментарии:
1. Хорошо, все работало нормально до отправки почты, я получаю эту ошибку: сообщение не удалось отправить. Ошибка почтовой программы: необходимо указать хотя бы один адрес электронной почты получателя.
2. моя ошибка, надо было <?php $mail->К = stripslashes( $_POST, где[«matchingEmail»] ); ?>, пожалуйста, попробуйте снова
3. Используете ли вы PHPMailer? Если так $почты->не правы, вы должны использовать <?php $mail->addAddress(stripslashes($_POST, где[«matchingEmail»])); ?>
4. Должно быть, происходит что-то еще, оно должно отправлять электронное письмо только на адреса, добавленные addAddress() . Как нам перенести это в чат?
5. Круто, рад, что смог помочь!