Intereting Posts
WP не разрешает мне публиковать документы Macintosh .pages в мой блог Темы для детей без санкций Как переместить код <head>, введенный плагином ниже стандартного кода WordPress <head>? Использование операторов if / else с выводами из параметров темы Отображать похожие сообщения по категориям в случайном порядке изображения не отображаются после передачи Как я могу присвоить конкретный ID при создании? Присвоение роли определенному типу пользовательских сообщений (и игнорирование других типов сообщений) Повторное использование переменной в обратном вызове Разбиение страницы на пользовательский пост get_users () timeout на большой пользовательской базе – опции для разделения запроса? Как получить скриншот темы Использование лицензированного MIT лицензированного niftyPlayer в WordPress Hosted Plugin (Premium и бесплатные версии) WP_Query posts_per_page Только вывод одной записи Отображается ли wordpress.com в URL-адресе, если я покупаю специальную службу домена с WP.com

Форма Shortcode не сохраняет данные в базу данных WP

Я разрабатываю плагин, который создает пользовательскую таблицу при активации плагина. Плагин позволяет пользователям добавлять короткий код формы для сбора данных для потенциальных клиентов.

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

Я тянул свои волосы, пытаясь понять, что я делаю неправильно.

Любая помощь в правильном направлении была бы высоко оценена.

Вот код процесса формы.

//Process form data function el_process_form(){ if (isset($_POST['everlead'])) { if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty( $_POST['post_type'] ) && $_POST['post_type'] == "everlead"){ $name = stripcslashes($_POST["name"]); $email = stripcslashes($_POST["email"]); $phone = stripcslashes($_POST["phone"]); $website = stripcslashes($_POST["website"]); // Do some minor form validation to make sure there is content if (trim($name) == "" ) { echo 'Please enter your name. <br />'; } if (trim($email) == "" ) { echo 'Please enter a valid email address.<br/>'; } if (trim($phone) == "" ) { echo 'Please enter a contact number.<br/>'; } if (trim($website) == "" ) { echo 'Please enter your website url.<br/>'; } global $wpdb; //Set time $formtime = date('mdY h:i:a'); $ipaddress = $_SERVER['REMOTE_ADDR']; //Table data $data = array( 'name' => $name, 'email' => $email, 'phone' => $phone, 'website' => $website, 'date' => $formtime, 'ipaddress' => $ipaddress ); //set lead data $table = $wpdb->prefix . 'el_leads'; $wpdb->insert( $table, $data, array('%s', '%s', '%s', '%s', '%s') ); } } } add_action( 'init', 'el_process_form' ); 

Одна странная вещь с кодом выше ^^^. Все работает нормально, если на локальном сервере (xampp) вы удаляете if (isset($_POST['everlead'])) { но я получаю ошибку «заголовки уже отправлены», когда на реальном сайте ».

Кроме того, если я добавляю этот оператор if перед процессом формы, я не могу сохранить данные в базе данных.

  function el_process_form(){ if(isset($_POST['post_type'])){ ...process form data } } add_action('init', 'el_process_form' ); 

Вышеприведенный код позволяет мне создать новое сообщение (как указано в предыдущем абзаце), но данные не сохраняются.

Solutions Collecting From Web of "Форма Shortcode не сохраняет данные в базу данных WP"

Хорошо, по какой-то причине он работает. Вместо того, чтобы подключаться к «init», я использовал «the_post», а короткий код формы – это работа. У меня больше нет проблемы с публикацией новой публикации или данных, которые не сохраняются. Кроме того, сообщение об ошибке «Невозможно изменить информацию заголовка – заголовки уже отправлены».

Функция

 function el_process_form(){ if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty( $_POST['post_type'] ) && $_POST['post_type'] == "everlead"){ $name = stripcslashes($_POST["name"]); $email = stripcslashes($_POST["email"]); $phone = stripcslashes($_POST["phone"]); $website = stripcslashes($_POST["website"]); // Do some minor form validation to make sure there is content if (trim($name) == "" ) { echo 'Please go back and enter your name. <br />'; exit(); } if (trim($email) == "" ) { echo 'Please go back and enter a valid email address.<br/>'; exit(); } if (trim($phone) == "" ) { echo 'Please go back and enter a contact number.<br/>'; exit(); } if (trim($website) == "" ) { echo 'Please go back and enter your website url.<br/>'; exit(); } global $wpdb; //Set time $formtime = date('mdY h:i:a'); $ipaddress = $_SERVER['REMOTE_ADDR']; //Table data $data = array( 'name' => $name, 'email' => $email, 'phone' => $phone, 'website' => $website, 'date' => $formtime, 'ipaddress' => $ipaddress ); //set lead data $table = $wpdb->prefix . 'el_leads'; $wpdb->insert( $table, $data, array('%s', '%s', '%s', '%s', '%s') ); } 

}

Я использую 'the_post', и все в порядке

 add_action( 'the_post', 'el_process_form' ); 

Теперь мой [el_form buttonsize="block"] работает и отображает форму на любой странице или сообщении. Самое главное, это сохраняет данные в базе данных.

Мне придется копать глубже, чтобы узнать, почему «the_post» работает над «init» при использовании короткого кода формы.