Хранение данных в wp_posts и wp_postmeta
-
Доброго дня !
Подскажите, пожалуйста, как верно организовать хранение данных, получаемых из формы ввода пользователем, содержащей 6-8 полей ? (Соответственно каждая запись будет иметь 6-8 параметров)
Первоначально была мысль создавать собственную таблицу, но понимание множества уже имеющихся в WP средств и методов работы с таблицамиwp_posts
иwp_postmeta
подсказывает актуальность использования данных таблиц. Если предпочтительнее использовать таблицыwp_posts
иwp_postmeta
, то как верно организовать хранение данных: куда записывать данные 6-8 параметров — в поле post_content добавляемой записи таблицыwp_posts
? или же после отправки формы в поле post_content записывать основной параметр, а все остальные (второстепенные) параметры записывать в таблицуpostmeta
как метаданные после создания соответствующей записи в таблицеposts
?Наведите на верную мысль
Заранее благодарен за любую помощь
-
@yube , спасибо, но имеет ли смысл устанавливать плагин только из-за одной ссылки ? может быть есть другой «ручной» способ без привлечения плагина ?
спасибо заранее за ответ@yube , спасибо, но имеет ли смысл использовать плагин только из-за одной ссылки ? может быть есть другой «ручной» способ без привлечения плагина ?
заранее спасибо за ответКонечно, есть. Но имеет ли смысл разбираться с каким-то bootstrap_menu (если от него вообще что-то зависит), если существует уже готовый плагин? По крайней мере, есть ли смысл для меня? 😉
понял, буду разбираться, ещё раз спасибо!
@yube , снова прошу Вашего прощения, можно Ваш совет:
столкнулся с такой ситуацией: пользователи из фронт-энда вводят записи через форму ввода (в форме 5 элементов input), последний input в форме ввода — это календарь — на основе выбранной даты календаря из базы данных выбирается индекс через ajax-запрос, и если пользователь прям «очень быстрый» — выбрал дату и мгновенно нажал Сохранить появляется ошибка:
Warning: A non-numeric value encountered in /home/user2077509/www/iepa.efp.by/wp-content/themes/infrcost/forms/form_gas.php on line 35
Я так понимаю ajax-запрос не успевает отработать ? верно ? как это можно устранить или обойти ? или только поместить данный input с календарем поближе к началу формы ?1. Сделать submit изначально disabled.
2. В момент начала ajax-запроса также выставлять disabled.
3. По success запроса снимать disabled.
Можно не только дизаблить, но и прятать. И показывать на его месте@yube , спасибо, а можете пояснить пункт 2 и 3 — я так понимаю это нужно делать через JS, а как связать с wp_ajax_ ? ps извините, если задал глупый вопрос, совсем запутался, голова уже совсем сложно варить) как отслеживать начало, ход ajax-запроса и его success?
if( wp_doing_ajax() ){ add_action('wp_ajax_get_index', 'ajax_build_index'); } function ajax_build_index() { global $wpdb; $table_prefix = $wpdb->get_blog_prefix(); $date_in_usage = $_POST['indexes']; $index_build = $wpdb -> get_var("SELECT index_value FROM {$table_prefix}ic_indexes WHERE date_operation = '$date_in_usage'"); echo "$index_build"; wp_die(); }
и JS
heatDate.change(function(){ var heatDateValue = $(this).val(); jQuery.post( myTheme.ajaxurl, { action: 'get_index', indexes: heatDateValue }, function (response) { $heatHidden.val(response); if (heatDateValue >= '2017-01' && heatDateValue <= '2020-01') $heatIndex.text('i=' + response); else $heatIndex.text(response); }); });
а как связать с wp_ajax_ ?
Никак. Это не нужно. Всё внутри js.
как отслеживать начало, ход ajax-запроса и его success?
Начало перед jQuery.post, конец внутри function (response) {}. Ход не нужен.
выкл/вкл
jQuery("input[type=submit]").attr("disabled", true);
jQuery("input[type=submit]").removeAttr("disabled");
@yube , а если ajax-запросов в форме последовательно выполняется несколько (2), то нужно проверять все это в каждом запросе, верно ? и ещё раз огромное спасибо
нужно проверять все это в каждом запросе, верно ?
Верно.
Но если форма заполняется в несколько обязательных итераций, то разблокировать можно только по окончании последней, то есть, когда все данные готовы.
Еще можно не кнопку блокировать, а выставлять флаг и проверять его на on submit формы. Возможно, так даже правильнее, если форма может быть отправлена по Enter.
@yube , спасибо огромное, реализовал, все работает, но при тестировании столкнулся с проблемой, когда быстро нажимаешь по кнопке отправки формы, то одна и та же запись может сохраниться 2 раза. Получается нужно также делать submit disabled и после её нажатия, когда данные формы отправляются ? Не подскажете как это правильно реализовать?
heatTypeBox.change(function(){ var heatAreaType = $(this).val(); jQuery("#heatSend").attr("disabled", true);//перед ajax-запросом кнопка Сохранить неактивна jQuery.post( myTheme.ajaxurl, { action: 'get_city', city: heatAreaType }, function (response) { $heatNameBox.html(response); jQuery("#heatSend").removeAttr("disabled");//по завершении ajax-запроса кнопка Сохранить активна }); });
Нужно как-то проверять на on submit формы и блокировать кнопку?
Нужно как-то проверять на on submit формы и блокировать кнопку?
Да. Как-то так
jQuery('form').on('submit', function () { jQuery('input[type=submit]').attr("disabled", true); });
@yube , спасибо, сделал так — кнопка блокируется, но данные введенные пользователем в форму не сохраняются. Код блокировки
jQuery("#heat_form").on("submit", function () { jQuery("#heatSend").attr("disabled", true); });
я вставил в custom.js, который подключаю через wp_enqueue_script в functions.php. Данные введенные пользователем в форму обрабатываю так:
if (isset($_POST['heat_send'])) { include( get_stylesheet_directory() . '/forms/form_heat.php' ); }
и при наличии выше обозначенного кода блокировки в custom.js файл form_heat.php вовсе не обрабатывается. Подскажите, пожалуйста, что я сделал не так ?
@yube , попробовал уже и таким образом:
<?php if (isset($_POST['heat_send'])) { include( get_stylesheet_directory() . '/forms/form_heat.php' ); } ?> <form class="form-horizontal" action="" method="post" id="heat_form" onSubmit="formDisable(this)"> ...
а в custom.js разместил функцию formDisable :
`function formDisable(form) {
var btn = document.getElementById(‘heatSend’);//кнопка
btn.disabled = true;
return true;
}`
В результате кнопка неактивна в процессе отправки данных, а форма не отправляется и наверное form_heat.php не отрабатывает. Не пойму почему? Помогите, пожалуйста@dmay1989, Вы действительно считаете, что я могу умозрительно собрать из обрывков кода страницу с формой и скриптами и выполнить трассировку событий? За комплемент спасибо, но Вы сильно переоцениваете мои способности. Я и в браузере далеко не всего могу в режиме read only поставить диагноз, а уж мысленно — и подавно. Придется Вам самостоятельно солить по вкусу и варить до готовности.
- Тема «Хранение данных в wp_posts и wp_postmeta» закрыта для новых ответов.