1 Востаннє редагувалося Betterthanyou (29.01.2017 17:33:21)

Тема: Wordpress. Як передати дані між JS i PHP

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

Після того як користувач опублікує статтю, я хочу перевірити чи скористався він моїм плагіном, якщо так то в БД потрібно записати дату (в самій статті дати не буде, тільки в БД) яку поставив користувач (це не та дата яку WP присвоює при створенні статті).
По натисканні спеціальної кнопки яку я створив у TinyMCE випливає вікно в якому користувач заповнює інформацією. Там є і

<input type="date" name="date" id="date" required/>

туди користував вписує дату, цю дату потрібно записати в БД.

І ось проблема, я не знайшов якогось методу обміну між JS і PHP

Наприклад:
Сесії у них окремі, тобто якщо я запишу щось в sessionStorage (JS) то я його не зможу дістати за допомогою $_SESSION (PHP) (якщо це можна поясніть як)

GET я не можу зробити через те що WP використовує post

<form name="post" action="post.php" method="post" id="post" autocomplete="off">
...
<input type="submit" name="publish" id="publish" class="button button-primary button-large" value="Publish">

А в POST я не знаю як записати інформацію.
Коли я використовую POST я пишу
HTML

<input type="date" name="date" id="date" required/>

PHP

echo $_POST['date_of_concert'];

але він звичайно що не спрацьовує тому що мій input знаходиться поза тегом form.
Ось цім з WP

<form name="post" action="post.php" method="post" id="post" autocomplete="off">

Тому SESSION, GET, POST не підходить (я так думаю), але якщо ви знаєте як передати дані використовуючи їх, то напишіть.

Як передати дані між JS i PHP ?

2

Re: Wordpress. Як передати дані між JS i PHP

Не зовсім зрозуміло що саме мається на увазі - наприклад ви ж викликаєте PHP-скрипт на сервері - чим вам це не підходить? Використовуйте метод кінцевого автомату, зберігайте його стан та зчитуйте при необхідності. Це універсальний підхід. Є більш простий варіант - наприклад використовувати hidden-поле у формі. Встановлюйте йому значення зі скрипту та читайте у методі який опрацьовує форму. Я ж думаю як знайти елемент форми по id зі JS проблеми нема?

Подякували: Betterthanyou, 221VOLT2

3

Re: Wordpress. Як передати дані між JS i PHP

І чому ви намагаєтесь прочитати $_POST['date_of_concert'] коли поле у вас називається по іншому?

Подякували: Betterthanyou1

4 Востаннє редагувалося Betterthanyou (29.01.2017 18:09:38)

Re: Wordpress. Як передати дані між JS i PHP

Проблема в тому що я не можу змінювати код WP, тобто я не можу створити поле hidden, не можу створити своє поле і помістити його в тег form wordpress.
$_POST['date_of_concert'] не замітив, але після перейменування не допомогло

Я звичайно можу створити поле hidden динамічно і якось запхнути його в за допомогою JS під form вордпресу, але це буде костиль.

В мене є файл з плагіном, там є хук

...
//тут я реєструю кнопку
function myPlugin_register_buttons( $buttons ) 
{
   array_push( $buttons, 'separator', 'myPlugin' );
   return $buttons;
}

//тут її виводжу
function myPlugin_register_tinymce_javascript( $plugin_array ) 
{
   $plugin_array['myPlugin'] = plugins_url( 'js/script.js',__FILE__ );
   return $plugin_array;
}
...

script.js

...
<input type="date" name="date" id="date" required />
...

тобто я не можу вносити зміни в файл вордпресу post.php (і в інші файли вордпресу теж)

Я можу вносити зміни тільки в script.js, myPlugin.php (мій плагін)

Тепер зрозуміло ?

5 Востаннє редагувалося 221VOLT (29.01.2017 19:03:18)

Re: Wordpress. Як передати дані між JS i PHP

додаєте своє поле і значення динамічно в форму з допомогою js
в php ловите чи існує пост з такою назвою і відповідно вмістом...
чим це не підходить?

Подякували: Betterthanyou1

6

Re: Wordpress. Як передати дані між JS i PHP

221VOLT написав:

додаєте своє поле і значення динамічно в форму з допомогою js
в php ловите чи існує пост з такою назвою і відповідно вмістом...
чим це не підходить?

Напевно так і зроблю, але на мою думку це якось не правильно (бо форма то не моя)

Ще в мене одна ідея з'явилася але вона не краща

Коли користував записав дату, зразу відправляти ajax запит, який створить сесію на сервері (PHP), а якщо користувач передумає публікувати статтю і закриє сторінку, обробити подію закриття вкладки і відправити ajax щоб сервер очистив свою сесію.