Хорошим вариантом в вашем случае будет использование конечной точки перезаписи. Конечная точка перезаписи позволяет добавлять дополнительные параметры запроса к определенным URL-адресам. Например, вы можете добавить конечную точку gallery
ко всем сообщениям, которые могут отображать другой шаблон, показывающий все изображения для данного сообщения. Более подробную информацию о add_rewrite_endpoint()
можно найти на странице Codex.
Ниже приведен код, который добавляет конечную точку send
к EP_ROOT
(домашняя страница сайта). Обратите внимание, что после добавления этого кода вам нужно будет перейти на Settings > Permalinks
, чтобы конечная точка переписывания начала работать.
Как только у нас есть конечная точка перезаписи на месте, мы подключаемся к действию template_redirect
, чтобы проверить наличие запроса send
var. Если send
нет, то мы ничего не делаем.
Если send
присутствует, но пустой (например, если вы загружаете страницу http://example.com/send/
), то мы перенаправляем на главную страницу.
В противном случае мы разделили send
на несколько частей на каждые /
и присвоили это переменной $send_parts
. Затем мы используем оператор switch
, чтобы узнать, что такое $send_action
(первая часть после /send/
) и действовать соответственно.
Сейчас мы проверяем только действие email
(если это не электронная почта, мы снова перенаправляемся на домашнюю страницу). Мы проверяем, существует ли реальный адрес электронной почты ($send_parts[1]
) и является ли он действительным адресом электронной почты (я должен отметить, что is_email()
не соответствует RFC и может отклонять действительные адреса электронной почты, поэтому используйте с осторожностью). Если это действительный адрес электронной почты, мы используем wp_mail()
для отправки электронной почты, иначе мы перенаправляемся на домашнюю страницу.
Теперь, поскольку я не знаю, как вы планируете реализовать это, мой код не охватывает такие вещи, как аутентификация (кто может отправлять электронные письма - если это все, я могу злоупотреблять вашим сайтом и спамом пользователей и получать ваши почтовый сервер blacklisted - bad :(), генерация сообщения электронной почты Subject и Message (он будет динамическим через переменные $_POST
, будет ли он заранее определен и т. д.). Это особенности, которые вам придется реализовать на ваш собственный.
Как только код, указанный ниже, помещается в соответствующий файл (файл .php, который загружается в текущую тему или файл активного плагина), и вы регенерируете свои правила перезаписи (перейдя на Settings > Permalinks
), вы может перейти на http://example.com/send/email/[email protected]/, и вы должны получить письмо с субъектом t «Привет» и сообщение «Это сообщение».
function so_34002145_add_email_endpoint() {
add_rewrite_endpoint('send', EP_ROOT);
}
add_action('init', 'so_34002145_add_email_endpoint', 10);
function so_34002145_handle_send_email() {
$send = get_query_var('send', null);
// This is not a /send/ URL
if (is_null($send)) {
return;
}
// We're missing an action, the URL is /send/
// Take the user to the home page, since this is an incomplete request.
if (empty($send)) {
wp_redirect(home_url('/'));
exit;
}
$send_parts = explode('/', $send);
$send_action = $send_parts[0];
switch ($send_action) {
case 'email':
$email = ! empty($send_parts[1]) ? $send_parts[1] : false;
if (! $email || ! is_email($email)) {
// A missing or invalid email address, abort
wp_redirect(home_url('/'));
exit;
}
wp_mail($email, 'Hello', 'This is a message');
break;
default:
// This is an unknown action, send to the home page
wp_redirect(home_url('/'));
exit;
break;
}
}
add_action('template_redirect', 'so_34002145_handle_send_email', 10);
Есть ли что-то уже существующее на '/ send /' (например, страница) или нет? Также будет для вас такой URL-адрес: 'example.com/send/email/someone @ example.com'? –
нет его настройки URL, с которым я борется. мне нужно создать страницу для этого? извините Im все еще совершенно новый для wordpress.Этот URL-адрес будет прекрасен, пока я получу адрес электронной почты от него. – Neil