Голосование вордпресс. Плагин голосования на wordpress

Организация голосования или опросов в блоге – штука весьма полезная. Вариантов применения этой опции можно выделить несколько – во-первых, это может быть сделано для оценки вашего проекта / продукта / услуги. Так, например, в своем основном блоге я однажды спрашивал о будущей тематике проекта – углубляться больше в seo и заработок в интернете или писать об интернете в целом. Также узнавал о предпочтениях в плане модернизации функциональности блога. Практически по такому же принципу решил создать опрос на wordpress inside. Ну, и к тому же на форумах некоторых сказали, что эти замечательные и слишком навязчивы, а панель снизу мешает при прокрутке. Интересно, что думают остальные читатели проекта. Кстати, если есть какие варианты в опрос добавить – пишите, рассмотрим.

Кроме того голосование в блоге можно полезно в некоторых сферах деятельности дабы знать настроения аудитории – чем посетители увлекаются, какие интересы для них являются преобладающими и т.п. В целом, думаю, тот или иной опрос оживляет сайт, делает его в какой-то степени интерактивным. И, если бы я судил об СДЛ направленности того или иного проекта, то опросы были бы оценены мной в положительную сторону. Но хватит теории, перейдем непосредственно к практике.

Установка и настройка плагина WP-Polls

Итак, для организации голосования в блоге используется плагин под названием wp-polls . Скачать его можно как с официального сайта wordpress , так и на проекте разработчиков . В последнем есть еще дополнительная информация по работе с модулем – скриншоты, демо, документация. Плагин wp-polls, наверное, самый популярный и часто используемый для данных целей в рунете. Что лично меня нисколько не удивляет – ведь он обладает достаточной функциональностью, но вместе с тем, прост в обращении .

Для установки плагина wp-polls копируем его в папку wp-content/plugins на фтп. После чего в админке wordpress активируем. После этого в меню должен появится целый раздел, посвященный голосованиям в блоге – Polls. Он содержит пункты:

  • Manage polls (управление голосованиями) – редактирование старых, скрытие, открытие, управление датами и т.п.
  • Add poll (добавить опрос) – создание нового голосования в блоге.
  • Poll options (настройки) – выбор опция для формирования внешнего вида и поведения модуля действительно велик. Советую изучить пункт как можно подробнее.
  • Poll templates (шаблоны) – позволяет задавать форматирование для голосования, результатов вплоть до html кода.
  • Uninstall poll – удаление модуля.

Таким образом, для добавления опроса в блог мы первым делом должны его создать – идем в закладку Add poll. Здесь вводим название голосования, добавляем варианты ответа, определяем возможность выбора сразу нескольких вариантов опроса и т.п.

  • Polls

  • Polls

  • Это, можно сказать, полный его вариант – сначала проверка наличия модуля и функции, а в самом конце ссылка на архив. В настройках можно указать отображение как последнего, так и случайного опроса. Также можно использовать следующие конструкции:

    • Для отображения одного из опросов (с указанием его id)
    • Показать случайны опрос
    • Отобразить выбранное голосование в посте блога
    • Случайный опрос в теле поста
    • Вывести результаты определенного голосования в посте

    Подробнее об этом можно почитать на соответствующей странице сайта разработчиков. Там разных опций и вариантов использования море. Кстати, много чего можно менять в разделе шаблонов – подстраивать блок голосования под свой дизайн + ввести переводы для англоязычных надписей.

    Напоследок, как и обещал — что касается глюка, когда плагин wp-polls не работает и при клике на кнопки или ссылку результатов ничего не происходит. Выход оказался весьма простым и неожиданным. А именно — нужно зайти в файл футера шаблона (footer.php), где добавить строку:

    Приветствую Вас, мои глубокоуважаемые посетители! Скоро, возможно со следующей статьи, в конце каждого поста я буду Вам предлагать отвечать на разные тесты/опросы. А сейчас, в данной статье я опишу как сделать эти самые опросы на wordpress.

    Для того, чтобы использовать опросы на нашем проекте мы будем использовать плагин WP-Polls .

    Для его установки и использования проследуйте пожалуйста этой небольшой инструкции:

    1. Скачиваем плагин .
    2. Устанавливаем по стандартному принципу, как и все другие плагины.
    3. Активируем в административной панели.
    4. В консоли слева появляется новый раздел Polls.
    5. Заходим в его подраздел Add Poll.
    6. И заполняем специальные графы (вопрос и варианты ответов).

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

    Устанавливаем опросы на wordpress

    И заполняем нужные графы. Если плохо шарите по английскому, воспользуйтесь изображением ниже

    Выше я все подробно описал, когда создать новый вопрос. Так можно создать не только первый, но и второй, третий, десятый и т.д.

    Далее, чтобы вставить его в статью нужно узнать ID, созданного опроса и вставить в спец.окно при написании статьи или создании страницы. Чтобы узнать ID нужно опять же перейти в раздел Poll , в подраздел Manage Polls , и рядом с Вашем созданным опросом будет его ID.

    Теперь, когда мы знаем ID номер своего опроса, мы отправляемся в редактор постов (т.е. туда где мы пишем статьи) и видим новую кнопочку, где нарисована диаграмма

    Нажимаем на нее и вводим ID нашего опроса

    И вуаля опрос добавлен в нашу статью. Не правда ли, что это легко? Так же последнии действия можно было заменить кодом (только вместо _ просто пробел):

    Таких, как этот опросы на wordpress можно сделать уйму. Даже по несколько на статью.

    На этом у меня все. Всем пока и удачи!

    С уважением, Константин Белан.

    I spent most of my free time creating, updating, maintaining and supporting these plugins, if you really love my plugins and could spare me a couple of bucks, I will really appreciate it. If not feel free to use it without any obligations.

    Скриншоты

    Часто задаваемые вопросы

    General Usage (Without Widget)
  • Polls

    • To show specific poll, use where 2 is your poll id.
    • To show random poll, use
    • To embed a specific poll in your post, use where 2 is your poll id.
    • To embed a random poll in your post, use
    • To embed a specific poll’s result in your post, use where 2 is your poll id.
    General Usage (With Widget)
    1. Go to WP-Admin -> Appearance -> Widgets .
    2. You can add the Polls Widget by clicking on the ‘Add’ link besides it.
    3. After adding, you can configure the Polls Widget by clicking on the ‘Edit’ link besides it.
    4. Click ‘Save Changes’.
    5. Scroll down for instructions on how to create a Polls Archive.
    Как добавить архив опросов?
    1. Go to WP-Admin -> Pages -> Add New .
    2. Type any title you like in the post’s title area.
    3. If you ARE using nice permalinks, after typing the title, WordPress will generate the permalink to the page. You will see an ‘Edit’ link just beside the permalink.
    4. Click ‘Edit’ and type in pollsarchive in the text field and click ‘Save’.
    5. Type in the post’s content area.
    6. Click ‘Publish’.
    • If you ARE NOT using nice permalinks, you need to go to WP-Admin -> Polls -> Poll Options and under Poll Archive -> Polls Archive URL , you need to fill in the URL to the Polls Archive Page you created above.
    Why doesn’t my poll’s answers add up to 100%?
    • It is because of rounding issues. To make it always round up to 100%, the last poll’s answer will get the remainding percentage added to it. To enable this feature, add this to your theme’s functions.php: add_filter("wp_polls_round_percentage", "__return_true");
    How Does WP-Polls Load CSS?
    • WP-Polls will load polls-css.css from your theme’s directory if it exists.
    • If it doesn’t exists, it will just load the default polls-css.css that comes with WP-Polls.
    • This will allow you to upgrade WP-Polls without worrying about overwriting your polls styles that you have created.
    Why In Internet Explorer (IE) The poll’s Text Appear Jagged?
    • To solve this issue, Open poll-css.css
    • Find: /* background-color: #ffffff; */
    • Replace: background-color: #ffffff; (where #ffffff should be your background color for the poll.)
    How Do I Have Individual Colors For Each Poll’s Bar?
    • Courtesy Of TreedBox.com
    • Open poll-css.css
    • Add to the end of the file:
    .wp-polls-ul li:nth-child(01) .pollbar{ background:#8FA0C5} .wp-polls-ul li:nth-child(02) .pollbar{ background:#FF8} .wp-polls-ul li:nth-child(03) .pollbar{ background:#ff8a3b} .wp-polls-ul li:nth-child(04) .pollbar{ background:#a61e2a} .wp-polls-ul li:nth-child(05) .pollbar{ background:#4ebbff} .wp-polls-ul li:nth-child(06) .pollbar{ background:#fbca54} .wp-polls-ul li:nth-child(07) .pollbar{ background:#aad34f} .wp-polls-ul li:nth-child(08) .pollbar{ background:#66cc9a} .wp-polls-ul li:nth-child(09) .pollbar{ background:#98CBCB} .wp-polls-ul li:nth-child(10) .pollbar{ background:#a67c52} .wp-polls-ul li .pollbar{ transition: background 0.7s ease-in-out } .wp-polls-ul li .pollbar:hover{ background:#F00 } To Display Total Polls To Display Total Poll Answers To Display Total Poll Votes To Display Total Poll Voters

    Отзывы

    Участники и разработчики

    «WP-Polls» - проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:

    Участники

    Журнал изменений

    Versiob 2.75.2

    • FIXED: Missing str_replace for wp_polls_template filter

    Version 2.75.1

    • FIXED: Use array() instead of as a few users are still on < PHP 5.4. Props @bearlydoug.
    • FIXED: pollq_expiry is now 0 instead of blank string. Props @hpiirainen.

    Version 2.75

    • FIXED: Standardize all filters to begin with wp_polls rather than poll
    • NEW: Added wp_polls_ipaddress and wp_polls_hostname to allow user to overwrite it.

    Version 2.74.1

    • FIXED: Don’t use PHP 5.4 Short array syntax.
    • FIXED: Division by zero
    • FIXED: Wrong database column type for pollq_expiry

    Version 2.74

    • NEW: Hashed IP and anonymize Hostname to make it GDPR compliance
    • NEW: If Do Not Log is set in Poll Options, do not log to DB
    • NEW: Support %POLL_MULTIPLE_ANSWER_PERCENTAGE%. This is total votes divided by total voters.

    Version 2.73.8

    • FIXED: Bug fixes and stricter type checking

    Version 2.73.7

    • FIXED: Unable to save input HTML tags for footer templates

    Version 2.73.6

    • FIXED: Unable to vote for multiple answers
    • FIXED: input HTML tags being removed when saving templates

    Version 2.73.5

    • FIXED: Parsed error in SERVER variable.

    Version 2.73.4

    • FIXED: sanitize_key on top of intval.

    Version 2.73.3

    • NEW: Added sort by votes casted to poll answers.
    • NEW: For polls with mutiple answers, we divided by total votes instead of total voters. Props @ljxprime.
    • FIXED: Do not display poll option is not respected when poll is closed.
    • FIXED: pollip_qid, pollip_aid, pollip_timestamp are now int(10) in pollsip table.
    • FIXED: pollq_expiry is now int(10) in pollsq table.

    Version 2.73.2

    • NEW: Bump WordPress 4.7
    • FIXED: Change cron to hourly instead of twice daily.

    Version 2.73.1

    • FIXED: Allow local IP
    • FIXED: XSS on Poll bar option. Props Netsparker Web Application Security Scanner
    • FIXED: Stricter Poll pptions check

    Version 2.73

    • NEW: Display Poll Questions at the top of the Poll Logs table
    • FIXED: Remove slashes

    Version 2.72

    • НОВОЕ: Используйте translate.wordpress.org для перевода плагина
    • FIXED: SQL Injection fixes. Props Jay Dansand
    • FIXED: Use $wpdb->insert(), $wpdb->update() and $wpdb->delete() as much as possible
    • FIXED Remove poll_archive_show option from UI

    Version 2.71

    • FIXED: Use wp_kses_post() to get filter always bad tags

    Version 2.70

    • NEW: Add wp_polls_vote_poll_success action hook
    • NEW: Add wp_polls_add_poll, wp_polls_update_poll, wp_polls_delete_poll action hooks
    • ИСПРАВЛЕНО: PHP-уведомления
    • FIXED: Removed not needed wp_print_scripts
    • FIXED: Use esc_attr() and esc_textarea() instead of htmlspecialchars(). Props Govind Singh

    Итак, есть блог на WordPress с формой для голосования, которая реализована с помощью плагина WP-Polls. Появилось желание потестировать плагин на защищенность от накрутки перед использованием.
    Ниже приведу результаты моих экспериментов над несчастным WP и не менее несчастным WP-Polls.

    Исходные данные
    Дан блог на WordPress с голосованием на WP-Polls. Голосование доступно для всех посетителей. Защита от повторного голосования осуществляется блокировкой по IP. В опросе возможен выбор только одного варианта.
    Необходимо написать скрипт, который может влиять на результаты голосования.
    Изучаем предметную область
    При добавлении голосования, на страницу вставляется следующая форма:

    После выбора варианта на сервер ajax"ом отправляется запрос вида:
    POST http://test.ru/wp-content/plugins/wp-polls/wp-polls.php poll_1: 1 poll_id: 1 rndval: 1221566428538 vote: true
    где poll_id - id опроса, а poll_1 - варианты ответа (после подчеркивания в имени переменной идет id опроса).

    Реализация защиты от повторного голосования
    Воспользуемся тем, что WP - проект с открытым кодом и изучим исходники плагина.
    Очевидно, что нам нужна функция check_voted($poll_id) в которой вызывается check_voted_ip($poll_id) .

    Начинаем шалить
    В функции check_voted_ip($poll_id) выполняется запрос к БД на предмет наличия записи с данным id опроса и ip пользователя. IP адрес возвращается функцией get_ipaddress() :
    function get_ipaddress() { if (empty($_SERVER["HTTP_X_FORWARDED_FOR"])) { $ip_address = $_SERVER["REMOTE_ADDR"]; } else { $ip_address = $_SERVER["HTTP_X_FORWARDED_FOR"]; } if(strpos($ip_address, ",") !== false) { $ip_address = explode(",", $ip_address); $ip_address = $ip_address; } return $ip_address; }
    Из этой функции следует, что мы со спокойной душой выставляем ручками заголовок "X_FORWARDED_FOR ", который и будет использован плагином для проверки повторного голосования.
    Реализация
    Не буду приводить листинг скрипта по накрутке опроса ввиду его тривиальности. Достаточно на наиболее любимом вами языке программирования написать скрипт/программу, которая будет отправлять POST запрос на адрес плагина с необходимыми параметрами, при этом, при каждом запросе должен выставляться уникальный заголовок «X_FORWARDED_FOR».
    Заключение
    В данной статье приведен вариант обхода защиты от повторного голосования в плагине WP-Polls для WordPress. В представленном материале не рассматривается вариант использования proxy-серверов ввиду большей трудоемкости по сравнению с представленным методом.

    Естественно, что результаты работы скрипта легко исправляются через административную панель WP. Данная информация представлена исключительно в ознакомительных целях.

    P.S.
    В процессе разбора исходного кода плагина, был обнаружен еще один способ накрутки, который отрабатывает не совсем корректно.
    Этот способ связан с возможностью плагина реализовывать опросы, в которых пользователь может выбрать несколько вариантов ответов. На сервер они передаются через запятую:
    poll_1: 1,2,3,4
    При обработке скриптом этот параметр бьется по запятой в массив, по которому выполняется цикл:
    foreach($poll_aid_array as $polla_aid) { $wpdb->query(" UPDATE $wpdb->pollsa SET polla_votes = (polla_votes+1) WHERE polla_qid = $poll_id AND polla_aid = $polla_aid "); }
    Поэтому, для накрутки одного из вариантов достаточно передать строку вида:
    poll_1: 1,1,1,...,1
    чтобы увеличить кол-во голосов за данный ответ в N раз.
    Недостаток заключается в том, что кол-во голосовавших все равно увеличится только на 1 и поползет отображение результатов голосования)