我如何使wordpress表单操作属性转到主题function.php并在那里执行代码

我在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="http://www.srcmini.com/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="http://www.srcmini.com/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表单操作属性转到主题function.php并在那里执行代码】我在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="http://www.srcmini.com/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="http://www.srcmini.com/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()。这是一个可插拔功能, 因此在某些情况下确实很有用。
免责声明:我尚未实际测试此代码。

    推荐阅读