Как мне сделать атрибут действия wordpress go для функции theme. php и выполнить там код - PullRequest
1 голос
/ 09 февраля 2020

У меня проблемы с запуском некоторого кода в функциях тем моего веб-сайта WordPress. php.

Я создал страницу с формой, и атрибут действия этой формы должен передавать данные. к функциям тем. php

При отправке формы страница перенаправляется в файл функций. 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>

Вот код в функциях. 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 Ответ

0 голосов
/ 09 февраля 2020

Для этого можно использовать запрос AJAX.

Удалите атрибут action из своей формы:

<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>

Добавьте следующее * Код 1080 * для отправки запроса:

<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(). Это подключаемая функция, поэтому в некоторых случаях она действительно полезна.


Отказ от ответственности: На самом деле я не проверял этот код.

...