Фатальная ошибка при попытке получить администраторскую электронную почту на форме контакта

Я создаю contactform, которая должна отправить все запросы в администраторский почтовый адрес.

php файл, который обрабатывает вводимые данные и посылает электронное письмо, имеет, только содержит этот код:

<?php
$admin_email = get_option('admin_email');

if($_POST["name"] != "" && $_POST["contact"] != ""  && $_POST["comments"] != "")
{
    echo "Uw bericht is verzonden! ";
    $name = $_POST["name"];
    $contactOption = $_POST["contactoption"];

    $msg = "Bericht afkomstig van: \n";
    $msg .= "Naam: " .$name;
    $msg .= "\nE-mail of Telefoonnummer: " .$contactOption;
    $msg .= "\n\n";
    $msg .= "Bericht: \n";
    $msg .= $_POST["comments"];
    $msg .= "\n\n";

    $subject = utf8_decode("Bericht via Contactformulier");
    $headers = utf8_decode("From: " .$name."\r\n");

    mail($mailTo, $subject, utf8_decode($msg), $headers);

}
?>

Проблема, я не могу использовать get_option или get_bloginfo для получения администраторского почтового адреса. Это всегда возвращает фатальную ошибку.

Этот файл сопротивляется в моей childtheme папке. Почему я не могу использовать эти функции? Я также попытался добавить get_header () и get_footer () в файл, но эти функции также не распознаны.

Я относительно плохо знаком с Wordpress. Я пропускаю что-то очевидное здесь?

0
10.01.2020, 16:18
1 ответ

Просто наличие файла в папке темы не означает, что WordPress загрузит файл, или что при доступе файл будет загружен в контексте WordPress.

Существует два способа приблизиться к этому, что я могу думать:

Для использования функций WordPress, WordPress должен загрузиться. Самый легкий способ сделать, который должен позволить WordPress загрузить файл. Поместите свой код выше в тот же шаблон, который содержит Вашу форму - по-видимому, который доступен, таким образом, WordPress знает о странице. Просто отправьте форму той же странице вместо к другой. В отсутствие веских причин сделать иначе, это - то, что я сделал бы.

Вы могли также использовать Ajax API для обработки формы.

Примечание: Существует своего рода взлом для загрузки WordPress во внешних файлах включением wp-load.php но не смешивайте со что, если у Вас нет очень хорошей идеи, что Вы делаете.

Править:

На основе дополнительной информации я теперь думаю, что лучшее решение состоит в том, чтобы создать надлежащий виджет для формы.

class Form_Widget_wpse_104728 extends WP_Widget {
  function __construct() {
    $opts = array(
      'description' => 'Display and Process My Form'
    );
    parent::WP_Widget(
      'my-form-content',
      'Some PHP',
      $opts
    );
  }
  function widget($args,$instance) {
    // PHP goes here
    // Your code to process the form
    // Your form itself
  }
}
function register_my_widgets() {
  register_widget('Form_Widget_wpse_104728');
}
add_action('widgets_init','register_my_widgets');

Еще лучше должен был бы поместить все это в плагин так, чтобы можно было обработать форму независимо на рычаге рано в загрузке страницы.

0
19.02.2020, 23:37
  • 1
    Для Вашего первого решения, Вы подразумеваете, что я могу поместить этот код в свой page.php? Страница, которая содержит форму, не является никаким физическим php файлом. Сообщите мне если, именно это Вы имели в виду. Тем временем я взгляну на Ajax API и :) –  Forza 30.06.2013, 01:11
  • 2
    взлома wp-загрузки, можно поместить код в шаблонный файл, который обрабатывает форму - предпочтительно пользовательский шаблон только для формы. Ваша форма не является shortcode, это? –  s_ha_dum 30.06.2013, 01:14
  • 3
    Нет форма находится в textwidget в (pagebuilder) [wordpress.org/plugins/siteorigin-panels/] плагин. Но я попытаюсь сделать шаблонный файл. Я сообщу, работает ли это :) –  Forza 30.06.2013, 01:55
  • 4
    , я не думаю, что это собирается работать. Вы хотите поместить целую contactform в новый шаблон или просто этот код, который я отправил выше? Целая contactform не собирается работать, поскольку я не могу только назвать шаблон от мела textwidget :P –  Forza 30.06.2013, 02:05
  • 5
    то, что Вы формируетесь, находится в текстовом виджете, усложняет вещи. Решение для Ajax лучше двух - что Вы имеете дело с количествами виджета как "веские причины сделать иначе". Однако, это - вид путаницы, учитывая, что текстовый финт виджета. Я отредактирую ответ с тем, что теперь походит на лучшее решение. –  s_ha_dum 30.06.2013, 02:09

Теги

Похожие вопросы