WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Вопрос по передаче данных в Democracy Poll

Добавил текстовое поле к голосованию. При голосовании нужно сохранить его значение в таблице БД wp_democracy_log.

Подскажите, пожалуйста, как передать его значение серверному скрипту для записи в БД?
Я так понял, за передачу данных со страницы AJAX-запросом отвечает файл democracy.js
Там есть раздел // AJAX

$.post( Dem.ajaxurl, data,
			function( respond ){...}

Я добавил к объекту data переменную userNum

data.userNum = $('#dem_userNum') && $('#dem_userNum').val() ? parseInt($('#dem_userNum').val()) : 0

Теперь не могу найти, какой из скриптов получает data и как оттуда выдернуть интересующую меня userNum.
Вроде, запись логов происходит в class-DemPoll.php, в protected function add_logs().

return $wpdb->insert( $wpdb->democracy_log, array(
			'ip'      => $ip,
			'qid'     => $this->id,
			'aids'    => $this->votedFor,
			'userid'  => (int) get_current_user_id(),
			'date'    => current_time('mysql'),
			'expire'  => $this->get_expire_time(),
			'ip_info' => Democracy_Poll::ip_info_format( $ip ),
			'userNum' => ?????,
		) );

В БД добавил поле userNum типа INT к таблице wp_democracy_log

Туплю уже 3 дня (((

Заметки к вопросу:
KirVer 5 Мар. 2020

Установил сниффер, определил, что запрос получает admin-ajax.php, но data.userNum из democracy.js туда не передается:

dem_pid=1&dem_act=vote&action=dem_ajax&answer_ids=3

В class-Democracy_Poll.php есть метод _sanitize_request_vars добавил туда строку кода:

    function _sanitize_request_vars(){
		return array(
			'act'  => isset($_POST['dem_act']) ? $_POST['dem_act'] : false,
			'pid'  => isset($_POST['dem_pid'])  ? absint( $_POST['dem_pid'] ) : false,
			'aids' => isset($_POST['answer_ids']) ? wp_unslash( $_POST['answer_ids'] ) : false,
			// добавлено для передачи значения userNum
			'userNum' => isset($_POST['userNum']) ? absint( $_POST['userNum'] ) : 0,
		);

Но результат прежний. Похоже, туда тоже не доходит $_POST['userNum']

KirVer 10 Мар. 2020

Разобрался! Оказывается, по умолчанию был подключен не democracy.js, а democracy.min.js mosking
А я правки делал в democracy.js.
В итоге, поменял код в class-Democracy_Poll.php

wp_enqueue_script( 'democracy', DEMOC_URL  .'js/democracy.js', array(), DEM_VER, true )

и, на всякий случай

echo "\n<!--democracy-->\n" .'<script type="text/javascript">'. file_get_contents( DEMOC_PATH .'js/democracy.js' ) .'</script>'."\n";

и получил в class-DemPoll.php переменную $_REQUEST['userNum']
дальше - уже дело техники

0
KirVer
4 марта 2020

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация