个性化阅读
专注于IT技术分析

我如何使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="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()。这是一个可插拔功能, 因此在某些情况下确实很有用。


免责声明:我尚未实际测试此代码。

赞(0)
未经允许不得转载:srcmini » 我如何使wordpress表单操作属性转到主题function.php并在那里执行代码

评论 抢沙发

评论前必须登录!