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

Democracy Poll

Плагин позволяет создавать на сайте опросы, с возможностью пользователям добавлять варианты ответов. Одна из главных фишек плагина - это умение работать с плагинами страничного кэширования (например WP Super Cache).

Что касается сравнения этого плагина с аналогами. Но насчет известного wp-polls все же скажу: оба плагина очень похожи, функционал во много похож, я даже удивился когда начал сравнивать. Но, по моему, этот плагин лучше, потому что удобнее, пользователи могут добавлять свои ответы, работает с кэшем. Однако в моем плагине нет такой гибкой настройки шаблона опроса, а есть 3 темы оформления и возможность изменять дописывать свои css стили. Изменив стили, можно полностью изменить внешний вид опроса.

Что умеет плагин

  • Создавать опросы.
  • Работать с плагинами страничного кэширования, не "убивая" их функциональность.
  • Пользователи могут добавлять свои ответы (Democracy) (отключается).
  • Мульти-голосование: пользователи могут выбирать несколько вариантов ответов (отключается).
  • Закрывать опрос по окончанию указанный даты.
  • Показывать случайный опрос из нескольких активных.
  • Закрывать опросы для незарегистрированных пользователей.
  • Удобное редактирование отдельного опроса: кнопка редактировать для администраторов.
  • Редактировать количество голосов.
  • Пользователь может изменить свое мнение: возможность пере-голосовать (отключается).
  • Запоминание голосовавших по: IP, Cookie, профилям в WordPress (для авторизованных пользователей). Историю можно очищать.
  • Вставлять опросы в посты: шоткод [demоcracy]. Для этого есть кнопка в визуальном редакторе.
  • Виджет (отключается).
  • Удобное редактирование опросов: панель плагина вынесена в Панель инструментов WordPress (toolbar) (отключается).
  • Отключение .css или .js файлов. Или их встраивание прямо в HTML.
  • Выводить заметку под опросом: короткий текст пояснение к опросу и т.п.
  • Изменение внешнего вида опроса: css темы.
  • Русский интерфейс. В коде все на русском, но кому нужно, есть перевод на English.

Но как говорил Идиот (Достоевского), - «Говорить нехорошо, лучше пример»:

Если вам нужны какие либо дополнительные возможности, голосуйте/добавляйте их в конце этой статьи, в опросе.

меню

Использование

Создавать опросы и настраивать плагин можно в меню: Настройки > Опрос Democracy. Или через Панель инструментов WordPress. Меню в панели можно отключить в настройках:

Меню инструментов Democracy

Для вставки опроса на сайт используйте виджет. Если виджет не нужен и он мешает, его можно отключить в настройках.

Виджет Опроса Democracy

Также опросы можно вставлять отдельно в записи (посты) для этого используйте шоткод [ democracy id=""]. Для удобной вставки шоткодов, плагин добавляет кнопку в визуальный редактор. Кнопку можно отключить в настройках:

dem-tinymce-button

меню

[democracy_archives] — шоткод 

Чтобы вывести архив опросов используйте шоткод [democracy_archives] (удалите пробел в начале шорткода, он есть чтобы тут не обрабатывался шорткод). Обычно создавать архив отдельно не нужно, для этого на странице настроек есть специальная кнопка. Она ищет существующую страницу, если не найдено, то создает новую постоянную страницу с нужным шоткодом.

dem-create-archive

С версии 5.5.6, в шоткод [democracy_archives] можно передавать параметры. Например можно вывести все активные опросы так:

[democracy_archives screen="vote" active="1" per_page="-1"]

Параметры которые можно передать в шорткод:

'before_title' => '',      // for single poll title
'after_title'  => '',      // for single poll title
'active'       => null,    // 1 (active), 0 (not active) or null (param not set).
'open'         => null,    // 1 (opened), 0 (closed) or null (param not set) polls.
'screen'       => 'voted', // vote, voted
'per_page'     => 10,      // limit. 0 or -1 - no limit
'add_from_posts' => true,  // add From posts: html block
меню

Расширенное использование

Для вывода опросов и архива опросов через код, в плагине есть специальные функции-обертки:

<?php democracy_poll( $id, $before_title, $after_title ); ?>

Выводит на экран отдельный опрос по переданному id опроса. Если id не передать, то будет выведен один из активных опросов, в случайном порядке. Чтобы получить результат этой функции для обработки используйте get_democracy_poll().

<?php democracy_archives( $hide_active, $before_title, $after_title ); ?>

Выводит на экран архив опросов. Параметр $hide_active отвечает за показ активных опросов. Если установить его в true, все активные опросы (которые участвуют в ротации) будут удалены их вывода. Чтобы получить результат функции, а не выводить его на экран используйте get_democracy_archives().

Код этих функций:

###### функции обертки ######
/**
 * Для вывода отдельного опроса
 * @param int $id ID опроса
 * @return HTML
 */
function democracy_poll( $id = 0, $before_title = '', $after_title = ''){
	echo get_democracy_poll( $id, $before_title, $after_title );
}
function get_democracy_poll( $id = 0, $before_title = '', $after_title = '' ){
//  die($before_title . $after_title);
	$poll = new DemPoll( $id );

	$show_results = __query_poll_screen_choose( $poll );

	return $poll->display( $show_results, $before_title, $after_title );
}

/**
 * Для вывода архивов
 * @param bool $hide_active Не показывать активные опросы?
 * @return HTML
 */
function democracy_archives( $hide_active = false, $before_title = '', $after_title = '' ){
	echo get_democracy_archives( $hide_active, $before_title, $after_title );
}
function get_democracy_archives( $hide_active = false, $before_title = '', $after_title = '' ){
	global $wpdb;

	$WHERE = $hide_active ? 'WHERE active = 0' : '';
	$ids = $wpdb->get_col("SELECT id FROM $wpdb->democracy_q $WHERE ORDER BY active DESC, id DESC");

	$output = '<div class="dem-archives">';
	foreach( $ids as $poll_id ){
		$poll = new DemPoll( $poll_id );
		$poll->opt['archive_page_url'] = ''; // убираем ссылку на архив

		$show_results = isset( $_REQUEST['dem_act'] ) ? __query_poll_screen_choose( $poll ) : true;

		$output .= $poll->display( $show_results, $before_title, $after_title );
	}
	$output .= "</div>";

	return $output;
}
меню

Примеры использования функций в теме

#1. Функция democracy_poll()

<?php democracy_poll( 25, '<div class="title">', '</div>'); ?>

Выведет опрос с ID 25 и обвернет заголовок опроса в <div class="title"> и </div>

#2. Функция democracy_archives()

Выведем список всех неактивных опросов и обернем их заголовки в тег <strong>:

<?php democracy_archives( true, '<strong>', '</strong>' ); ?>

#3 Функция get_dem_polls()

Получает список опросов по указанным параметрам.

$args = array(
	'wrap'           => '<div class="dem-polls">%s</div>', // html block wrap
	'before_title'   => '',      // for single poll title
	'after_title'    => '',      // for single poll title
	'screen'         => 'vote',  // vote, voted
	'active'         => null,    // 1 (active), 0 (not active) or null (param not set).
	'open'           => null,    // 1 (opened), 0 (closed) or null (param not set) polls.
	'add_from_posts' => false,    // add From posts: html block
	'return'         => 'html',  // html, objects
	'paged'          => 1,       // pagination page when 'limit' parameter is set
	'per_page'       => 0,       // limit. 0 - no limit
);

$html = get_dem_polls( $args );

echo $html;

#4 Использование хуков

Один из примеров расширения функционала плагина при помощи имеющихся хуков, описан в вопросе.

Удаление

Удалять плагин нужно из панели плагинов WordPress, чтобы он вместе с файлами удалил данные о себе в базе данных.

Нельзя удалять папку плагина через FTP (это относится ко всем плагинам WP)! Так как плагин создает дополнительные таблицы в Базе Данных и сохраняет настройки. Если удалить плагин просто удалив его папку из каталога плагинов, то плагин не почистит за собой.

Democracy poll и плагины кэширования (WP Super Cache)

Несколько слов о том, как Democracy работает с плагинами кэширования и почему это важно.

Democracy я использую на многих сайтах. И на них часто установлен страничных кэш (WP Super Cache). Однако после очередного обновления Democracy я понял, что опрос-то не умеет работать с кэшем.

В чем проблема? Поясню на примере: зашел посетитель на страницу сайта где выводится опрос за который он уже голосовал, ему вывело результаты опроса помеченные его голосами и такая страница сохранилась в кэш. Далее на эту же страницу заходит другой посетитель, который не голосовал и видит сохраненную в кэше страницу, где выводятся результаты голосования прежнего посетителя, но ведь второй посетитель еще не голосовал. Вот и получается, что если вы используете кэширование на сайте (а в WordPress оно бывает очень нужно), то опрос попросту не работает!

Посмотрел я имеющиеся в каталоге WP плагины опросов, среди которых и популярный WP-Polls и не нашел ни одного плагина, который бы работал с кэшем!

Разумеется меня это все не устроило и я активно занялся доработкой Democracy. Чтобы он умел работать с плагинами страничного кэширования! Я думал сделать это будет проще, гораздо проще, чем оказалось на деле. Работы получилось много, много время ушло на тестирование.

С версии 4.5.6, Democracy работает с кэшем!

Замечу еще, что логику работы с кэшем можно организовать по-разному. Самый простой и очень нехороший вариант - это когда плагин добавляет скрипт, который при загрузке кэшированной страницы, отправляет AJAX запрос, в котором проверяет голосовал ли пользователь и если нужно заменяет данные опроса на полученные. С таким подходом все ускорение и снижение нагрузки, которое должно работать при включенном кэше идет коту под хвост... Например, так работает плагин wp-postviews: страница отдается из кэша, практически без нагрузки на сервер и тут же AJAX запрос подгружает WordPress фоном и нагрузка на сервер, чуть ли не такая же как была без плагина кэширования.

Democracy poll работает по другому принципу и не "аннулирует" работу плагина кэширования.

Логика работы Democracy с кэшем такая: Проверяется установлен ли один из плагинов кэширования и включен ли в нем страничный кэш, если кэш активен, то под каждый опрос на странице в тегах noindex подгружаются html коды голосования и результатов. Далее, при загрузке страницы, скрипт проверяет установлены ли куки голосования для пользователя:

  • если - да, то скрипт берет html результатов и ставит их в опрос и вы видите результаты, независимо от того что там сохранилось в кэше,

  • если - нет, то скрипт заменят опрос на вид голосования и не голосовавший пользователь может голосовать.
    Но тут нужно еще проверить: куков может не быть в браузере, но в логах, в БД могут быть данные о том, что посетитель с таким же IP или пользователь с таким же ID уже голосовал. Получается совсем без AJAX запроса не обойтись, а на сервер нагружать не хочется - кэш все-таки... Поэтому: AJAX запрос на проверку данных в БД отправляется, не при загрузке страницы, а когда посетитель наведет мышку на опрос и удержит её там больше секунды (сигнал, что он хочет голосовать) или кликнет по блоку опроса (в любое место, для тачскринов).

    • Если БД отвечает, что посетитель голосовал, то ему выводятся результаты с заметкой "Вы уже голосовали" и устанавливаются соответствующие куки в браузере, чтобы такой запрос для этого пользователя больше не делать.

    • Если БД отвечает, что пользователь не голосовал, то устанавливаются куки, что такая проверка пройдена, но визуально ничего не происходит и пользователь может голосовать.
меню

Опрос по плагину

меню

Что добавить в плагин Опрос Democracy?

  • Добавить ответ
Результаты

Предложения из опроса, которые уже внесены в плагин (чтобы не мешались в опросе):
- При выборе возможности выбора несколько вариантов ответа нужно добавить максимальное количество выбранных вариантов к примеру 3 варианта но можно выбрать только 2 (21 голос)
- Дату окончания опроса (71 голос)
- Множественное голосование (несколько вариантов ответов) (61 голос)
- Для голосования, пользователь должен зарегаться. Контроль вести по пользователю WP. (13 голосов)
- Возможность рандомайза опросов из НЕСКОЛЬКИХ активных (18)
- Простой способ вставки опросов. (20)
- Возможность редактировать количество голосов (16)
- Кнопку переголосовать! (9)
- Добавить возможность вручную устанавливать порядок ответов. А то сейчас только по количеству голосов и по порядку добавления. (17)
- Выбор категории пользователей, которые могут управлять опросами (Админ, модер,участник и т.д.) (19)
- Отключать вывод результатов опроса (22)
- Пагинацию в Админке (9)

https://avi1.ru/ - качественные SMM услуги по продвижению в социальных сетях доступны на данном сайте. Здесь Вы найдете любой необходимый ресурс на крайне выгодных условиях.

309 комментов
Полезные 29 Вопросы 7 Все
  • Максим

    Привет! На двух сайтах плагин работает как по маслу, на третьем выдаёт такую лубуду в браузере, когда нажимаешь просмотреть результаты http://сайт.ru/?dem_action=view&dem_poll_id=2
    а когда возвращаешься к голосованию вот так http://сайт.ru/?dem_action=show_vote_screen&dem_poll_id=2

    Как можно лечить?

    Ответить5.5 лет назад #
    • Kama7770

      Во-первых, обновите плагин, вчера выложил новую версию. В планах на днях еще поработать над плагином, будут еще релизы... В каталог ВП выкладывать пока планов нет. На третьем у вас ядро движка случаем в отдельную папку не вынесено? Не понятно какую ошибку выдает?

      Ответить5.5 лет назад #
      • Максим

        К сожалению и новая версия также отображается. В принципе опрос работает корректно, единственное что раздражает, это то, что в браузере отображается лишнее как например http://сайт.ru/?dem_action=view&dem_poll_id=2 и пользователя выбрасывает в шапку сайта, а опрос остается внизу.

        Ошибки по логам отсутствуют, при выводе ошибок посредством файла .htaccess тоже отсутствуют. Поэтому не могу сказать какие ошибки выдаёт.

        Забивал в гугле ?dem_action=view&dem_poll_id=2 вылезло несколько буржуйных сайтов с такой ошибкой, но даже перевод не помог найти решение проблемы.

        Ответить5.5 лет назад #
        • Kama7770

          На двух сайтах плагин работает как по маслу, на третьем выдаёт такую лубуду ...

          Это в адресной строке? Я немного не понял, что нужно сделать, что не так?

          Ответить5.5 лет назад #
          • Максим

            На других двух сайтах отображается всё отлично. Когда жмёшь просмотреть результаты, то в браузере выходит нормально http://сайт.ru/ и человек остается на опросе.

            А на другом сайте при нажатии просмотреть результаты и вернуться назад, сайт перезагружается и открывается уже на шапке, а опрос остается внизу, и в браузере выводиться ссылка вида http://сайт.ru/?dem_action=view&dem_poll_id=2

            Ответить5.5 лет назад #
            • Kama7770

              Вижу вы там стили плагина перенесли в файл стилей темы и отключили их подключение в админке. Тоже самое нужно сделать со скриптами файл democracy.js. Там ошибка скрипта, поэтому плагин работает без скрипта...

              Ответить5.5 лет назад #
              • Максим

                Ок спасибо, работает корректно! Вроде элементарная вещь, а столько нервов вынесло. Кстати WP последняя версия и работает с ней старый плагин, и на других сайтах последние версии WP всё корректно работает

                Ответить5.5 лет назад #
                • Kama7770

                  У меня тоже этот плагин стоит и последняя версия. Но спасибо за информацию!

                  Ответить5.5 лет назад #
  • Otshelnik-fm228 otshelnik-fm.ru

    Тимур. А вы не могли бы к плагину Wp-Recall сделать аддон? Чтобы зарегистрированный пользователь, из фронт-энда смог добавить опрос? На основе Democracy. Отличная связка получилась бы. Аддон можно продавать на том же сайте - уже просили голосовалку. С вашим плагином это было бы круто.

    Ответить5.5 лет назад #
    • Kama7770

      Что-то плохо понимаю каким образом он там должен работать. Чтобы пользователи могли создавать опросы что ли?

      П.С. Щас занят добавлением этого плагина в репозиторий ВП. Модератор попался ну уж очень занудный, до всего докапывается smile Но, думаю скоро примут smile

      Ответить5.5 лет назад #
      • Otshelnik-fm228 otshelnik-fm.ru

        Да. Именно чтобы зареганные могли бы создавать опросы.

        p.s. А ты можешь описать процесс в отдельной статье, и подводные камни, особенности - при добавлении в репозиторий ВП. Интересная тема. Обязательно ли на английском плагин чтобы был, и все требования. До чего модеры достают - что именно

        Ответить5.5 лет назад #
        • Kama7770

          Пока нет планов делать дополнение к recall я с ним к тому же не знаком. Насчет статьи про добавление в репозиторий, непонятно что писать, опыта мало. До этого плагины сразу принимали. Там как я понял по-разному бывает, как повезет... Ну и плагин должен быть нормальный, туфту не примут скорее всего. Русский плагин можно добавлять, только описание к нему (readme.txt) файл нужно сделать на англ.

          1
          Ответить5.5 лет назад #
  • asmi046 asmi-studio.ru

    Скажите а есть возможность в данном плагине сделать рендеринг формы опроса на странице а при нажатии кнопки "голосовать" переходить на другую страницу где выводить результаты?

    1
    Ответить5.5 лет назад #
    • Kama7770

      Можно такое сделать, но только вам в ручную придется страницы такие создавать.

      Разные виды опроса можно получить так:

      $poll = new DemPoll( $id ); // id  опроса указываем
      echo $poll->get_screen('voted'); // вид результатов
      echo $poll->get_screen('vote');  // вид голосования

      Код будет такой:

      // Вам нужно отключить JS в настройках плагина и на одной странице вывести голосование:
      
      // перенаправит на страницу результатов, если пришел запрос на голосование
      if( @$_POST['dem_act'] == 'vote' )
      	wp_redirect('УРЛ страницы с результатами');
      
      // вид голосования, если запрос не пришел
      $poll = new DemPoll( $id );
      echo $poll->get_screen('vote');
      
      // на странице 'УРЛ страницы с результатами' вставить такой код, который выведет результаты
      $poll = new DemPoll( $id );
      echo $poll->get_screen('voted');

      Но я не гарантирую, что эти функции в будущем не изменятся при обновлениях плагина.

      Ответить5.5 лет назад #
  • Галина

    Здравствуйте и спасибо за плагин!
    есть вопрос, как бы мне накрутить голосование?
    прошлый плагин удалила, но там было было голосование за 3 года! А теперь по нулям.

    Ответить5.5 лет назад #
    • Kama7770

      Какой прошлый плагин, другой или эту старую версию?

      В любом случае, теперь наверное только руками.

      Если прошлый мой плагин (старая версия), то можно попробовать найти старый дамб БД и в новую базу залить 3 таблицы: wp_democracy_q, wp_democracy_log, wp_democracy_a. И потом просто зайти в админку democracy таблицы сами обновятся до правильной работы с текущей версией.

      Ответить5.5 лет назад #
      • Галина

        спасибо за ответ, такой вариант подходит буду пробовать

        Ответить5.5 лет назад #
  • Рустам

    Автор спасибо тебе большое, случайно наткнулся на плагин, после обновки Wp-Pool заглючил совсем, в твоем плагине гораздо все удобнее и проще, так же удобен вывод пользовательского варианта. Спасибо. Буду рекомендовать

    Ответить5.4 лет назад #
  • Александр

    Поменял в class.DemPoll.php русские сообщения на украинские. При обновлении слетели. Как добавить украинский язык. Добавляю свой .po файл в languages - все равно надписи Голосовать - по-русски. Опять редактировать class.DemPoll.php

    Ответить5.4 лет назад #
    • Kama7770

      Вам нужно перевод плагина сделать! Файлы плагина менять не нужно!

      Для перевода, вам нужно установить программу poedit (ссылка на скачивание). Далее:

      Открываете программу. И дальше смотрите по картинке:

      После перевода все автоматически должно стать на украинском, если конечно у вас в админке ВП украинский язык включен.

      Еще было бы хорошо, если бы мне прислали перевод.

      Ответить5.4 лет назад #
  • Александр

    За прлагин и комментарии огромное спасибо!

    Ответить5.4 лет назад #
  • William

    Hi, I'm looking for some help with your wonderful plugin, and figured I would try here in English.

    I have added an Email input field and would like to store the users input in a variable so I can see the input user email together with the answer they gave in the database.
    I have added a new column in the database called author and added 'author' at the end of this:

    $exists = $wpdb->query( $wpdb->prepare("SELECT aid FROM $wpdb->democracy_a WHERE answer = '%s' AND qid = $this->id", $new_answer ) );
    if( ! $exists )
    if( $wpdb->insert( $wpdb->democracy_a, array( 'qid'=>$this->id, 'answer'=>$new_answer, 'votes'=>0, 'added_by'=>1, 'author'=>$author) ) )

    • with this, if

      $author = "hello@email.com"

      'hello@email.com' appears in the new column in the database next to the users answer.

    So I'm wonder how to get the value from my email input box and store it in a php variable that I can use here?

    My best guess so far has been $_POST["name"] but no luck sad

    Thanks in advance!

    W

    Ответить5.4 лет назад #
    • Kama7770

      It's not good idea to change plugin's code, because you loose all changes during next plugin update.

      I don't understand the question and what you want to achieve? Where you define the $author var?

      But, you can get new value of new "author" field with such SQL query:

      $wpdb->get_var("SELECT author FROM $wpdb->democracy_a WHERE answer = 'answer_text' AND qid = $questionID");

      P.С. Strongly recommend update the plugin upto last (4.6.6) version. There was a huge bug...

      Ответить5.4 лет назад #
  • Андрей

    Доброго времени суток. Скажите, возможно ли добавить в плагин такую фичу, как несколько вопросов в одном опросе? Очень было бы полезно. Пытался сам это реализовать, но в силу плохого знания ПХП довести дело до конца не смог - слишком много багов выходит. И еще, сейчас пытаюсь сделать интересную функцию, но в силу причин, описанных выше, не уверен что получится. Может, Вас она заинтересует. В общем, для того, что бы пройти какой-то опрос, нужно сначала ввести код. Этот код можно получить от администратора(лично или через обратную связь на сайте - не важно). Админ при создании опроса вводит пароль, а человек, зашедший на сайт, должен этот код ввести, иначе не сможет пройти опрос. Функция полезна, если нужно разделить всех опрашиваемых на несколько категорий, у каждой из которых будет свой пароль, и запретить голосовать за вопросы других людей.Был бы очень благодарен, если бы Вы реализовали хоть 1 из этих функций.

    Ответить5.3 лет назад #
    • Kama7770

      Первое это типа теста? Второе точно реализовывать не буду - это все-таки общественный плагин, а это очень спецефическая фукция.

      Ответить5.3 лет назад #
      • Андрей

        Ну, в принципе, можно и так назвать это. По сути, то же голосование, что есть у Вас, только на несколько вопросов, а не на 1.

        Ответить5.3 лет назад #
        • Kama7770

          Пока плагин такой какой есть, помочь к сожалению ничем не могу... unknw

          Ответить5.3 лет назад #
  • stall

    Реально ли сделать кнопки в один ряд по горизонтали и вывести сами результаты видимыми в определенном месте

    Ответить5.3 лет назад #
    • Kama7770

      Все реально, но я думаю это не про этот плагин - много переделывать... А что значит "кнопки в один ряд по горизонтали " - это где куда?

      Ответить5.3 лет назад #