Архив рубрики: Плагины

Меняем админку

Наверняка многие сталкивались с проблемой разделения прав, если на блоге открыта свободная регистрация для того, чтобы люди что-то писали или постили свои статьи. Часть функционала реализует Role Manager, он позволяет существующими ролями, добавлять или убирать полномочия, изменять уровень и создавать новые роли и способности. Но если необходимо, например, ограничить возможность пользователя постить только в определённые категории или убрать определённые элементы в меню админки, то тут нужны другие решения, именно их мы и рассмотрим. Для ограничения доступа к рубрикам можно воспользоваться плагином Level2Categories. На странице настроек не много, выбирается рубрика и выставляется уровень, который должен быть у пользователя, чтобы он мог постить в данную категорию (уровень пользователя можно, например, задавать через Role Manager). При публикации пользователь увидит в списке только те категории, в которые он может отпостить.

Для изменения вида админки есть отличное решение в виде плагина Adminize. Функционал его весьма широк, так что можно отточить отображение админки по своему вкусу.

Нас интересуют разделы Menu Options и Write options – Post. Первый отвечает за отображение пунктов главного меню, а второй – за отображение элементов интерфейса при публикации. Всё достаточно просто, ставим напротив не нужного нам пункта галочку у соответствующей роли, и она больше не будет отображаться в админке. Весьма удобный вариант, если , например, все посты пользователей должны быть в одной рубрике, то можно убрать отображение рубрик в плагине, а в настройках «Написание» поставить основной рубрикой для записей ту рубрику, которая вам необходима. Настроив тем самым админку, можно избавить пользователя от лишних элементов и акцентировать всё внимание только на главном, например вот так:

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

Расширяем регистрацию

Сегодня я расскажу, как расширить регистрацию дополнительными полями и подружить эти поля с ajax-login(удобный плагин, позволяющий выводить форму регистрации и логина непосредственно на страницу).

Для расширения регистрации я нашёл два плагина: DRegister и Register Plus.

Первый самый простой, в нём есть возможность только добавлять поля при регистрации и выбрать пункт, обязательны ли эти поля для заполнения или нет. Есть один нюанс – ключ (имя) поля плагин составляет из приставки dr_ и названия поля, которое вы введёте, но русский язык не воспринимается, поэтому я рекомендую сначала заполнить название на латинице, а потом уже поменять его на русское.

DRegister опции
Поля DRegister при регистрации
Поля DRegister в профиле пользователя

Второй обладает более расширенными настройками, среди которых такие как:

  • 1) Возможность добавления капчи
  • 2) Настройка письма уведомления пользователя
  • 3) Регистрация только по инвайт-кодам
  • 4) Вывод лицензионного соглашения
  • 5) Добавление дополнительных полей не только при регистрации, но и просто в персональные настройки пользователя.

Здесь та же проблема, что и в первом плагине, нужно писать имена полей на латинице, иначе поле останется вообще без имени.

Register Plus опции
Поля Register Plus при регистрации
Добавление дополнительных полей

После добавления нужных нам полей перейдём к ajax-login, чтобы научить его работать с ними. Открываем папку с плагином, нам понадобятся файлы ajaxlogin.js (проверяет и передаёт данные php-скриптам, а так же выводит результат в виде сообщения), al_template.php (отвечает за вывод форм на страницу) и register.php (производит регистрацию).

Сперва посмотрим как же называются наши дополнительные поля, в случае с DRegister их названия пишутся на странице настройки в виде meta_key: dr_deatelnost (dr_deatelnost и будет именем нашего поля), в плагине Register Plus имя поля будет таким же, как вы его задали, т.е если назвали Pol, то и имя будет Pol. Эти имена нам понадобятся в дальнейшем, чтобы по ним сохранять данные. а так же извлекать их впоследствии. У меня это два поля: dr_(специальность) и dr_deatelnost(деятельность).

Начнём с шаблона (al_template.php). Форма регистрации - al_registerForm, изменяем её. Она изначально была у меня изменена, т.к. подгонялась под шаблон, приведу её пример.

<div class="al_nodisplay" id="al_register">

<div id="al_register" class="al_nodisplay">
<h2>Регистрация</h2>
<div>
<center>
 <form name="al_registerForm" onsubmit="return false;" id="al_registerForm" action="#" method="post">
 <label><input style="width: 140px;margin-bottom:5px;color:#666;text-align:center;" value="имя пользователя" onfocus="if(this.value=='имя пользователя') this.value='';" onblur="if(this.value=='') this.value='имя пользователя';" onkeypress="return al_loginOnEnter(event);" onkeypress="return al_registerOnEnter(event);" type="text" name="user_login" size="18" tabindex="7" /></label><br />
 <label><input style="width: 140px;margin-bottom:5px;color:#666;text-align:center;" value="e-mail" onfocus="if(this.value=='e-mail') this.value='';" onblur="if(this.value=='') this.value='e-mail';" onkeypress="return al_loginOnEnter(event);" onkeypress="return al_registerOnEnter(event);" type="text" name="user_email" size="18" tabindex="8" /></label><br />
 <input type="button" style="color: #4D5159;margin-bottom:15px;width: 145px" name="submit" value="<?php _e('Регистрация'); ?>" size="18" tabindex="11" onclick="al_register();"/>
 <br/>
 <span id="al_registerMessage">пароль будет отправлен на ваш e-mail.</span><br/>

<a href="javascript:al_showLogin();">Войти</a> | <a href="javascript:al_showLostPassword();">Забыли пароль?</a>
 </form>
</center>
</div>
</div>

</div>

Выглядит так:

AjaxLogin изменённая форма регистрации

А теперь добавляем наши дополнительные поля, которые мы ввели через плагин.

... /></label><br />

<label><input style="width: 140px;margin-bottom:5px;color:#666;text-align:center;" value="ваша должность" onfocus="if(this.value=='ваша должность') this.value='';" onblur="if(this.value=='') this.value='ваша должность';" type="text" name="dr_" value="" tabindex="9"></label><br />
<label> 
<select name="dr_deatelnost" style="margin-left:5px;width: 144px;margin-bottom:5px;color:#666;text-align:center;" tabindex="10">
 <option value=""> деятельность</option>
 <option value="творческая">творческая</option>
 <option value="научная">научная</option>
 <option value=" учебная"> учебная</option>
 <option value="предпринимательская">предпринимательская</option>
 <option value="Другое">Другое</option>
</select>
</label><br />
 
 <input type="button" ...

Первое поле я сделал обычным текстовым, а второе поле с возможностью выбора, но это уже дело каждого. Оформление так же меняем как душе угодно, главное не забываем про имена (name="dr_deatelnost"), по ним мы будем получать данные.

Форма регистрации с добавленными полями

Перейдём к отлову наших данных (ajaxlogin.js). Находим строчки:

if (al_registerForm.user_email.value == '') {
 alert("Пожалуйста, введите e-mail адрес!");
 al_registerForm.user_email.focus();
 return;
}
al_sack.setVar("user_login", al_registerForm.user_login.value);
al_sack.setVar("user_email", al_registerForm.user_email.value);

добавив свои, получим:

if (al_registerForm.user_email.value == '') {
 alert("Пожалуйста, введите e-mail адрес!");
 al_registerForm.user_email.focus();
 return;
}
if (al_registerForm.dr_.value == '' || al_registerForm.dr_.value == 'ваша должность') {
 alert("Пожалуйста, введите специальность!");
 al_registerForm.user_email.focus();
 return;
}

al_sack.setVar("user_login", al_registerForm.user_login.value);
al_sack.setVar("user_email", al_registerForm.user_email.value);
al_sack.setVar("dr_", al_registerForm.dr_.value);
al_sack.setVar("dr_deatelnost", al_registerForm.dr_deatelnost.value);

Последние 2 строчки – это наши новые данные, так же я добавил проверку на незаполненость поля должности, опять таки дело творчества :).

И непосредственно сама регистрация (register.php). Снова ищем нужные нам строчки:

$user_login = sanitize_user( $_POST['user_login'] );
$user_email = apply_filters( 'user_registration_email', $_POST['user_email'] );

Добавляем после них:

$user_dr = $_POST['dr_'];
$user_deatelnost = $_POST['dr_deatelnost'];

Мы получили данные, теперь их нужно занести, ищем дальше wp_new_user_notification($user_id, $user_pass); и после неё через функцию update_option() обновляем данные по пользователю:

update_option('dr_', $user_dr);
update_option('dr_deatelnost', $user_deatelnost);

Теперь можно опробовать нашу регистрацию, данные должны вноситься в настройки пользователя, теперь осталось разобрать как их выводить. Приведу пример как это сделать на комментариях. За вывод метаданных отвечает the_author_meta(), первый параметр – имя поля, которое хотим вывести, второй – id пользователя. Вставляем в шаблон вывода комментариев (comments.php, если же комментарии выводятся через <?php wp_list_comments(‘callback=имя_функции’);?>, то идём в functions.php и ищем функцию с этим именем) в нужное место код с названием нужного нам поля(в моём случае dr_): <?php the_author_meta('description', $comment->user_id); ?>

Вывод данных в комментариях

Так же можно отправить введёные данные по почте пользователю(только в плагине Register Plus), чтоб он знал, что ввёл, а то мало ли забыл :). Достаточно заполнить форму как хочется, подставив в нужные места теги, которые будут заменяться на вводимые данные.

Изменение уведомительного письма

Так же советую не только чётко следовать инструкциям, но и поэксперементировать с плагинами и их кодом, так что удачи ;).

Плагины тестирования: wbquiz и TESTME

Занялся тут вопросом: а какие есть средства для wordpress, чтобы сделать тест? Пользователь должен ответить на несколько вопросов и в итоге получить какой-то результат. Немного пошарив на просторах интернета нашёл два решения, плагины wbquiz и TESTME.

Начнём обзор с первого. Скачиваем плагин и устанавливаем следующим образом:

  • 1) копируем файлы из папки plugins в вашу папку /wp-content/plugins,
  • 2) активируем плагин в панели управления на странице плагинов,
  • 3) создаём шаблон страницы, в котором не забываем использовать стандартный цикл и строчку в нём (пример можно посмотреть в архиве example\wb_quiz_template.php) и закидываем его в папку с используемой темой,
  • 4) создаём страницу через админку, используем для неё наш шаблон,
  • 5) добавляем произвольное поле с именем question_file, а в значение подставляем путь до файла опроса, это может быть абсолютный путь со строны сервера, например Z:\home\myblog\www\wp-content\plugins\wb_quiz_questions.php, или относительный путь от папки /wp-content/plugins, т.е. если ваш файл лежит в этой же папке, то пишем просто wb_quiz_questions.php, если же уровнем выше, то ../wb_quiz_questions.php,
  • 6) собственно создаём сам опрос, используя для примера файл plugins\wb_quiz_questions.php.

Используя стандартные файлы получим такую картину: сам опрос и результат.

Опрос
Результаты опроса

Отсюда сразу очевидные минусы плагина: используется только на страницах, хотя ничто не мешает поставить плагин для выполнения php скриптов в постах и вставить код в нужный пост, так же минус – необходимо самому php файл опроса, конечно в этом есть своя гибкость, но ей в полной мере могу воспользоваться лишь те, кто умеет разбираться в php коде.

Второй же плагин рассчитан на более широкую аудиторию и может похвастаться более широким функционалом. Судите сами:

  • 1) умеет создавать два типа тестов: тесты, где результат зависит от суммы баллов, и тТесты, где каждому ответу присваивается цифра или буква, а результат зависит от того, каких цифр или букв посетитель больше набрал,
  • 2) показывать статистику прохождения тестов (покажет самые популярные тесты, посчитает, сколько человек в день проходит тот или иной тест, а также наглядно продемонстрирует (с графиками), сколько каких ответов получили посетители для каждого теста),
  • 3) позволяет выбрать, кто может проходить тесты: все или только зарегистрированные пользователи,
  • 4) удобный редактор, такой же, как и в обычных постах, так что в описание вы сможете вставить не только текст, но и картинки и оформить так, как вам хочется. Жаль только что для вопросов редактор не используется, так что, если вы хотите вставить изображение или ссылку в вопрос, то придётся прописывать полностью теги в ручную (<img src=””> и <a href=””></a>).

Устанавливается он гораздо легче, просто скопируйте плагин в папку /wp-content/plugins, активируем в админке, и он готов для работы. Заполняем наш тест и вставляем код этого теста в нужную нам запись(например [TESTME 1]).

Редактор
Настройки
Статистика

Поставив на локал и протестив, я остался доволен, но радость долго не длилась. Установил на сайт, заполнил тест, но после прохождения теста результаты не выдавались, а просто выводился белый экран, тобишь страница не работала. Сразу возникло подозрение, что конфликтует с некоторыми плагинами, после выключения некоторых из них выяснилось, что виновником оказался HeadSpace2 (данный плагин меняет title, description, keywords). Плагин ключевой, так что ищем другой путь решения – идём рыться в коде плагина TESTME.

Место вычислено, им оказался файл testme_show.php в месте:

'.$testme_your_score_notice.'

Не хочет работать функция Num_and_Padezh (функция родительного падежа и числительного). Чтож, не смертельно нужная функция, так что можем спокойно убить её :). Меняем весь этот код на:

'.$testme_your_score_notice.'

и теперь всё замечательно работает.

Кто любит похимичить попробуйте wbquiz, ну а для всех я рекомендую TESTME.

WP-Polls: Добавляем изображение и редирект на статью.

Данный плагин весьма популярен, он позволяет проводить опросы среди посетителей. Его функционал весьма не мал: можно вставить опрос как в запись, так и в сайдбар с помощью виджета или кода, большое количество настроек для отображения опросов на сайте, использование AJAX, можно задать дату начала и окончания опроса, возможность выбора более, чем одного ответа и прочее.

Передо мной же была поставлены задачи:
1) необходимо было добавить поле URL, в который бы заключался текст опроса (например чтобы перейти на ту страницу, где выводятся какие-то пояснения и сам результат опроса),
2) после нажатия кнопки "Ответить" необходимо редиректить пользователя на этот URL,
3) дополнительное поле для добавления рисунка к опросу, т.е. чтобы пользователь мог сразу же на странице настроек выбрать необходимое изображение со своего компьютера, после чего это изображение автоматический должно вставляться перед текстом опроса.

Для начала стоит разобраться как же устроена внутренняя механика wp-polls. Все данные плагин хранит в mysql в таблицах wp_pollsa, wp_pollsip и wp_pollsq. В wp_pollsa хранятся все ответы на наши опросы, в wp_pollsip статистика ответов, а в wp_pollsq сам опрос и его основные данные. Именно последняя таблица нам и нужна. Имена полей интуитивно понятны, поля для url и рисунка мы будем добавлять по параметрам анологичным полю pollq_question. В итоге должна получится картина такая:

Таблица wp_pollsq
Таблица wp_pollsq

В этих полях будут сохраняться наши данные. Следующий шаг - добавление в интерфейс настроек наших полей.

За опции отвечают  2 файла polls-add.php и polls-manager.php. Первый соответственно при добавлении запроса, а второй отвечает за редактирование уже существующих опросов. Начнем с добавления опроса. Добавим сами поля ввода после кода:

наш код:

Теперь необходимо, чтобы введенные нами данные сохранялись, ищем строчку $pollq_question = addslashes(trim($_POST['pollq_question'])); и вставляем после неё

Теперь после заполнения полей рисунка и ссылки, наши данные будут скохраняться в mysql. В данном случае используется стандартная функция для перемещения файлов, которая использует путь и имя выбранного изображения. Если вы хотите, чтобы имена файлов случайно не совпали при загрузке, то стоит вместо имени файла использовать случайный генератор или использовать хэш md5.

Следующее - нужно добавить возможность изменять и просматривать, вводимые нами данные, для этого будем править файл polls-manager.php. Здесь мы добавим поля для изменения, а так же не помешает дополнительно вывести то изображение, которое используется в данном опросе. Действия похожи на предыдущие, соответственно сперва добавляем нужные поля между комментариями и :

и соответственно не забываем про код, который должен извлекать нужные нам данные из базы, находим похожий и подставляем:

а затем добавляем код для сохранения изменённых данных:

Половина дела сделана, теперь осталось выводить эти данные как нам угодно. Для вывода опроса плагин использует шаблоны, которые можно изменять в админке (пункт Poll Templates). Данные подставляются наподобие %<текст>%. Для вывода изображения и урла мы сделаем такую же структура. За вывод опроса уже непосредственно на экран отвечает wp-polls.php. Заходим туда и ищем строчки наподобие:

Первые строчки отвечают за извлечение данных из БД. Последние - за подстановку в шаблон, взятый из админки, вместо тегов уже конкретных значений.
Теперь всё, прописываем в шаблоне как нам угодно выводить эти данные, например изменяем стандартную часть шаблона в "Voting Form Header", чтобы выводился текст опроса и изображение, заключённые в нашу ссылку:

Осталось разобраться только с редиректом, его мы тоже будем прописывать в шаблоне, используя возможности JS. В раздел "Voting Form Footer:" добавляем вместо onclick="poll_vote(%POLL_ID%);" - onclick="poll_vote(%POLL_ID%); justVoted = true;", проверяем эти данные в Result Footer (тот, который Displayed When The User HAS Voted):

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

Вот и всё, таким образом можно добавить любые данные в плагин, тем самым расширив его функционал.

Ну и приложу изменённые файлы, чтобы можно было разобраться наглядно: файлы. Так же пример работы можно посмотреть на сайте Jlady.ru в левом сайдбаре.