Передача данных между страницами в WordPress: решение ошибки get_header()

12 апр. 2013 г., 06:42:23
Просмотры: 19.6K
Голосов: 1

У меня есть собственная тема в WordPress. Вот путь к моей теме: C:\wamp\www\wordpress2\wp-content\themes\sscy1002\sscy1002

Я создал страницу в WordPress, которая содержит элементы формы. Вот код моей страницы:

<form action="<?php bloginfo('stylesheet_directory'); ?>/Query.php" enctype="multipart/form-data" method="post" name="contact">
<label for="author">Имя:</label> <input class="required input_field" id="author" type="text" name="author" />
    <div class="cleaner h10"></div>
    <label for="email">Email:</label> <input class="validate-email required input_field" id="email" type="text" name="email" />
    <div class="cleaner h10"></div>
    <label for="subject">Тема:</label> <input class="input_field" id="subject" type="text" name="subject" />
    <div class="cleaner h10"></div>
    <label for="text">Сообщение:</label> <textarea class="required" id="text" cols="0" name="text" rows="0"></textarea>
    <div class="cleaner h10"></div>
    <label for="image">Изображение:</label><input type="file" name="file" />

    <input class="submit_btn float_l" id="submit" type="submit" name="submit" value="Отправить" />
    <input class="submit_btn float_r" id="reset" type="reset" name="reset" value="Сбросить" />

    </form>

И вот мой код Query.php в директории C:\wamp\www\wordpress2\wp-content\themes\sscy1002\sscy1002:

<?php
get_header();
?>

<?
$name=$_POST['author'];
$email=$_POST['email'];
$subject=$_POST['subject'];
$message=$_POST['text'];
$image=$_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'],"imagess/".$image);
echo $name."<br/>";
echo $email."<br/>";
echo $subject."<br/>";
echo $message."<br/>";
echo "<img src='imagess/".$image."' alt='Изображение'>";
?>
<?php
get_footer();
?>

Но при отправке формы я получаю фатальную ошибку:

Fatal error: Call to undefined function get_header() in C:\wamp\www\wordpress2\wp-content\themes\sscy1002\sscy1002\Query.php on line 2

Пожалуйста, помогите мне разобраться, как передавать данные с одной страницы на другую (или файл) в WordPress. Я также искал ответ в Google и пробовал все найденные решения, но ничего не работает.

Извините за неправильное форматирование вопроса. Пожалуйста, помогите мне!!!! Спасибо!!!

4
Комментарии

Создайте Query.php как шаблон страницы, добавьте его к странице, затем передайте URL этой страницы в атрибут action формы. http://codex.wordpress.org/Theme_Development#Custom_Page_Templates

Vinod Dalvi Vinod Dalvi
12 апр. 2013 г. 07:23:12

Нет необходимости создавать нестандартный файл шаблона WP для этого. Почему бы просто не поместить функционал вашей формы в functions.php, где ему и место? http://tommcfarlin.com/sending-data-post/

sagalbot sagalbot
20 февр. 2014 г. 01:33:02

Посмотрите здесь: http://wordpress.stackexchange.com/questions/201940/implementing-a-custom-form-in-wordpress/201942#201942 Вам нужно будет сохранить необходимые данные в сессии или куки, а затем на второй странице вы сможете их использовать...

Maikal Maikal
14 июн. 2016 г. 04:49:15

Но если вы не понимаете, в чем проблема: Проблема в том, что вы загружаете пользовательский php-файл, который не связан с файлами WordPress php, поэтому у вас нет доступа к функциям get_header, add_action и т.д. Если вы хотите создать страницу, которая будет принимать данные вашей записи, вам следует рассмотреть возможность создания шаблона страницы и отправки формы на ссылку страницы, у которой есть этот шаблон...

Maikal Maikal
14 июн. 2016 г. 04:53:07
Все ответы на вопрос 4
0

Вы можете использовать файл functions.php для обработки отправки формы и передачи данных через AJAX.

Добавьте скрытое поле в вашу форму с указанием действия, которое нужно выполнить (в functions.php):

<input type="hidden" name="action" value="save_contact"/>

В файле footer.php добавьте jQuery-код для обработки AJAX-запроса:

jQuery('#your-form').submit(ajaxSubmit);
function ajaxSubmit(e){
    e.preventDefault();
var formData = jQuery(this).serialize()

jQuery.ajax({
    type:"POST",
    url: "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php",
        data: formData,
        success: function(response){
       // ПОКАЗАТЬ ПОДТВЕРЖДЕНИЕ
    },
    error: function(error){
       // ПОКАЗАТЬ СООБЩЕНИЕ ОБ ОШИБКЕ
    }
});
return false;
}

Наконец, в файле functions.php:

add_action('wp_ajax_save_contact', 'save_contact');
add_action('wp_ajax_nopriv_save_contact', 'save_contact');
function save_contact(){
     // Здесь можно выполнять любые нужные действия...
}

Надеюсь, это поможет! :)

4 апр. 2014 г. 05:44:16
0

Добавьте следующий код перед get_header()

require_once('../../../wp-load.php');

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

30 июл. 2013 г. 12:49:08
0

Вам следует использовать http://example.com/page-slug/

где page-slug — это страница, созданная с использованием Query.php в качестве шаблона.

<form action="http://example.com/page-slug/" enctype="multipart/form-data" method="post" name="contact">
18 апр. 2015 г. 12:58:12
1
-3

Пожалуйста, замените путь в атрибуте action формы с <?php bloginfo('stylesheet_directory'); ?> на <?php bloginfo('template_directory'); ?>

Затем проверьте это.

17 июл. 2013 г. 15:26:54
Комментарии

Пожалуйста, объясните, как это предотвратит ошибку Call to undefined function, которую получает автор вопроса.

Johannes Pille Johannes Pille
17 июл. 2013 г. 15:33:03