Голосование вордпресс. Плагин голосования на 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 .
Для его установки и использования проследуйте пожалуйста этой небольшой инструкции:
- Скачиваем плагин .
- Устанавливаем по стандартному принципу, как и все другие плагины.
- Активируем в административной панели.
- В консоли слева появляется новый раздел Polls.
- Заходим в его подраздел Add Poll.
- И заполняем специальные графы (вопрос и варианты ответов).
Видите ничего сложного в этом нет. Но теперь все равно, смотрите более подробная инструкция в картинках
Устанавливаем опросы на 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.
- Go to WP-Admin -> Appearance -> Widgets .
- You can add the Polls Widget by clicking on the ‘Add’ link besides it.
- After adding, you can configure the Polls Widget by clicking on the ‘Edit’ link besides it.
- Click ‘Save Changes’.
- Scroll down for instructions on how to create a Polls Archive.
- Go to WP-Admin -> Pages -> Add New .
- Type any title you like in the post’s title area.
- 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.
- Click ‘Edit’ and type in pollsarchive in the text field and click ‘Save’.
- Type in the post’s content area.
- 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.
- 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");
- 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.
- 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.)
- Courtesy Of TreedBox.com
- Open poll-css.css
- Add to the end of the file:
Отзывы
Участники и разработчики
«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 и поползет отображение результатов голосования)