我在wordpress网站的主题functions.php中运行某些代码时遇到问题。
我创建了一个具有表单的页面, 该表单的action属性应该将数据提交给主题functions.php
提交表单后, 页面将重定向到functions.php文件, 但不执行任何操作。
这是表格的代码
<div>
<form name="formSenda" method="POST" action="../wp-content/themes/storefront/functions.php">
<input type="text" placeholder="name" id="nameSenda" name="nameSenda">
<input type="email" placeholder="emailSenda" id="emailSenda" name="emailSenda">
<input type="submit" value="Check" name="submitSenda">
</form>
</div>
这是functions.php中的代码
function inSenda(&$na, &$em){
$message = "Hi $na, is your email $em?";
$headers = "From Fly Gadgets \r\n";
mail($em, "Invoice", $message, $headers);
echo "<script type='text/javascript'> document.location = 'categories'; </script>";
};
$nameSenda = $_POST['nameSenda'];
$emailSenda = $_POST['emailSenda'];
if(!empty($nameSenda) && !empty($emailSenda)){
inSenda($nameSenda, $emailSenda);
}
谢谢你的时间。
#1
你可以使用AJAX请求来执行此操作。
从表单中删除操作属性:
<div>
<form name="formSenda" method="POST">
<input type="text" placeholder="name" id="nameSenda" name="nameSenda">
<input type="email" placeholder="emailSenda" id="emailSenda" name="emailSenda">
<input type="submit" value="Check" name="submitSenda">
</form>
</div>
添加以下JavaScript代码以发送请求:
<script type="text/javascript">
(function($) {
$(function() {
function handleFormSubmission(e) {
$.ajax({
type: 'POST', // Replace with the url to your own `/wp-admin/admin-ajax.php`
url: 'https://example.com/wp-admin/admin-ajax.php', data: {
// Action name should be the same on the backend
action: 'send_invoice', }, success: function() {
document.location = 'categories';
}, });
}
$('form[name="formSenda"]').on('submit', handleFormSubmission);
});
})(jQuery);
</script>
然后, 挂接到wp_ajax_和wp_ajax_nopriv_来处理你的自定义AJAX端点。
- wp_ajax_对已登录的用户触发。
- wp_ajax_nopriv_处理来自未经身份验证的用户的请求(即is_user_logged_in()返回false时)。
要同时允许这两个钩子, 必须注册两个钩子。
因此, 在你的functions.php中:
<?php
// where send_invoice matches the action name on the frontend
add_action( 'wp_ajax_send_invoice', 'yourchildtheme_handle_invoice' );
add_action( 'wp_ajax_nopriv_send_invoice', 'yourchildtheme_handle_invoice' );
/**
* Send the invoice via email
*
* @param string $na The name
* @param string $em The email
*/
function in_senda( $na, $em ) {
// Sanitize your fields!
$na = sanitize_text_field( $na );
$em = sanitize_email( $em );
$message = "Hi $na, is your email $em?";
$headers = "From Fly Gadgets \r\n";
mail( $em, 'Invoice', $message, $headers );
}
/**
* Handle the contact form ajax request
*/
function yourchildtheme_handle_invoice() {
$name_senda = $_POST['nameSenda'];
$email_senda = $_POST['emailSenda'];
if ( ! empty( $name_senda ) && ! empty( $email_senda ) ) {
in_senda( $name_senda, $email_senda );
}
}
笔记
我在你的in_senda()函数中添加了一些清理功能。你可以阅读有关验证, 清除和转义用户数据的更多信息。
研究WordPress Nonces也是一个好主意。食典规定:
[…]有助于保护URL和表单免遭某些类型的滥用, 恶意或其他形式的滥用。
虽然使用mail()从WordPress网站发送电子邮件是完全可以的, 但你可能想看看wp_mail()。这是一个可插拔功能, 因此在某些情况下确实很有用。
免责声明:我尚未实际测试此代码。
#2
我在wordpress网站的主题functions.php中运行某些代码时遇到问题。
我创建了一个具有表单的页面, 该表单的action属性应该将数据提交给主题functions.php
提交表单后, 页面将重定向到functions.php文件, 但不执行任何操作。
这是表格的代码
<div>
<form name="formSenda" method="POST" action="../wp-content/themes/storefront/functions.php">
<input type="text" placeholder="name" id="nameSenda" name="nameSenda">
<input type="email" placeholder="emailSenda" id="emailSenda" name="emailSenda">
<input type="submit" value="Check" name="submitSenda">
</form>
</div>
这是functions.php中的代码
function inSenda(&$na, &$em){
$message = "Hi $na, is your email $em?";
$headers = "From Fly Gadgets \r\n";
mail($em, "Invoice", $message, $headers);
echo "<script type='text/javascript'> document.location = 'categories'; </script>";
};
$nameSenda = $_POST['nameSenda'];
$emailSenda = $_POST['emailSenda'];
if(!empty($nameSenda) && !empty($emailSenda)){
inSenda($nameSenda, $emailSenda);
}
谢谢你的时间。
#3
你可以使用AJAX请求来执行此操作。
从表单中删除操作属性:
<div>
<form name="formSenda" method="POST">
<input type="text" placeholder="name" id="nameSenda" name="nameSenda">
<input type="email" placeholder="emailSenda" id="emailSenda" name="emailSenda">
<input type="submit" value="Check" name="submitSenda">
</form>
</div>
添加以下JavaScript代码以发送请求:
<script type="text/javascript">
(function($) {
$(function() {
function handleFormSubmission(e) {
$.ajax({
type: 'POST', // Replace with the url to your own `/wp-admin/admin-ajax.php`
url: 'https://example.com/wp-admin/admin-ajax.php', data: {
// Action name should be the same on the backend
action: 'send_invoice', }, success: function() {
document.location = 'categories';
}, });
}
$('form[name="formSenda"]').on('submit', handleFormSubmission);
});
})(jQuery);
</script>
然后, 挂接到wp_ajax_和wp_ajax_nopriv_来处理你的自定义AJAX端点。
- wp_ajax_对已登录的用户触发。
- wp_ajax_nopriv_处理来自未经身份验证的用户的请求(即is_user_logged_in()返回false时)。
要同时允许这两个钩子, 必须注册两个钩子。
因此, 在你的functions.php中:
<?php
// where send_invoice matches the action name on the frontend
add_action( 'wp_ajax_send_invoice', 'yourchildtheme_handle_invoice' );
add_action( 'wp_ajax_nopriv_send_invoice', 'yourchildtheme_handle_invoice' );
/**
* Send the invoice via email
*
* @param string $na The name
* @param string $em The email
*/
function in_senda( $na, $em ) {
// Sanitize your fields!
$na = sanitize_text_field( $na );
$em = sanitize_email( $em );
$message = "Hi $na, is your email $em?";
$headers = "From Fly Gadgets \r\n";
mail( $em, 'Invoice', $message, $headers );
}
/**
* Handle the contact form ajax request
*/
function yourchildtheme_handle_invoice() {
$name_senda = $_POST['nameSenda'];
$email_senda = $_POST['emailSenda'];
if ( ! empty( $name_senda ) && ! empty( $email_senda ) ) {
in_senda( $name_senda, $email_senda );
}
}
笔记
我在你的in_senda()函数中添加了一些清理功能。你可以阅读有关验证, 清除和转义用户数据的更多信息。
研究WordPress Nonces也是一个好主意。食典规定:
[…]有助于保护URL和表单免遭某些类型的滥用, 恶意或其他形式的滥用。
虽然使用mail()从WordPress网站发送电子邮件是完全可以的, 但你可能想看看wp_mail()。这是一个可插拔功能, 因此在某些情况下确实很有用。
免责声明:我尚未实际测试此代码。
评论前必须登录!
注册