Наверняка многие сталкивались с проблемой разделения прав, если на блоге открыта свободная регистрация для того, чтобы люди что-то писали или постили свои статьи. Часть функционала реализует Role Manager, он позволяет существующими ролями, добавлять или убирать полномочия, изменять уровень и создавать новые роли и способности. Но если необходимо, например, ограничить возможность пользователя постить только в определённые категории или убрать определённые элементы в меню админки, то тут нужны другие решения, именно их мы и рассмотрим. Для ограничения доступа к рубрикам можно воспользоваться плагином Level2Categories. На странице настроек не много, выбирается рубрика и выставляется уровень, который должен быть у пользователя, чтобы он мог постить в данную категорию (уровень пользователя можно, например, задавать через Role Manager). При публикации пользователь увидит в списке только те категории, в которые он может отпостить.
Для изменения вида админки есть отличное решение в виде плагина Adminize. Функционал его весьма широк, так что можно отточить отображение админки по своему вкусу.
Нас интересуют разделы Menu Options и Write options – Post. Первый отвечает за отображение пунктов главного меню, а второй – за отображение элементов интерфейса при публикации. Всё достаточно просто, ставим напротив не нужного нам пункта галочку у соответствующей роли, и она больше не будет отображаться в админке. Весьма удобный вариант, если , например, все посты пользователей должны быть в одной рубрике, то можно убрать отображение рубрик в плагине, а в настройках «Написание» поставить основной рубрикой для записей ту рубрику, которая вам необходима. Настроив тем самым админку, можно избавить пользователя от лишних элементов и акцентировать всё внимание только на главном, например вот так:
Важный момент: если вы захотите удалить плагин, то сперва удалите все настройки на странице с настройками плагина, иначе после удаления плагина все изменения никуда не денутся.
Сегодня я расскажу, как расширить регистрацию дополнительными полями и подружить эти поля с ajax-login(удобный плагин, позволяющий выводить форму регистрации и логина непосредственно на страницу).
Первый самый простой, в нём есть возможность только добавлять поля при регистрации и выбрать пункт, обязательны ли эти поля для заполнения или нет. Есть один нюанс – ключ (имя) поля плагин составляет из приставки dr_ и названия поля, которое вы введёте, но русский язык не воспринимается, поэтому я рекомендую сначала заполнить название на латинице, а потом уже поменять его на русское.
Второй обладает более расширенными настройками, среди которых такие как:
1) Возможность добавления капчи
2) Настройка письма уведомления пользователя
3) Регистрация только по инвайт-кодам
4) Вывод лицензионного соглашения
5) Добавление дополнительных полей не только при регистрации, но и просто в персональные настройки пользователя.
Здесь та же проблема, что и в первом плагине, нужно писать имена полей на латинице, иначе поле останется вообще без имени.
После добавления нужных нам полей перейдём к 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, изменяем её. Она изначально была у меня изменена, т.к. подгонялась под шаблон, приведу её пример.
Первое поле я сделал обычным текстовым, а второе поле с возможностью выбора, но это уже дело каждого. Оформление так же меняем как душе угодно, главное не забываем про имена (name="dr_deatelnost"), по ним мы будем получать данные.
Перейдём к отлову наших данных (ajaxlogin.js). Находим строчки:
Мы получили данные, теперь их нужно занести, ищем дальше wp_new_user_notification($user_id, $user_pass); и после неё через функцию update_option() обновляем данные по пользователю:
Теперь можно опробовать нашу регистрацию, данные должны вноситься в настройки пользователя, теперь осталось разобрать как их выводить. Приведу пример как это сделать на комментариях. За вывод метаданных отвечает the_author_meta(), первый параметр – имя поля, которое хотим вывести, второй – id пользователя. Вставляем в шаблон вывода комментариев (comments.php, если же комментарии выводятся через <?php wp_list_comments(‘callback=имя_функции’);?>, то идём в functions.php и ищем функцию с этим именем) в нужное место код с названием нужного нам поля(в моём случае dr_): <?php the_author_meta('description', $comment->user_id); ?>
Так же можно отправить введёные данные по почте пользователю(только в плагине Register Plus), чтоб он знал, что ввёл, а то мало ли забыл :). Достаточно заполнить форму как хочется, подставив в нужные места теги, которые будут заменяться на вводимые данные.
Так же советую не только чётко следовать инструкциям, но и поэксперементировать с плагинами и их кодом, так что удачи ;).
Занялся тут вопросом: а какие есть средства для 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 в месте:
Не хочет работать функция Num_and_Padezh (функция родительного падежа и числительного). Чтож, не смертельно нужная функция, так что можем спокойно убить её :). Меняем весь этот код на:
Данный плагин весьма популярен, он позволяет проводить опросы среди посетителей. Его функционал весьма не мал: можно вставить опрос как в запись, так и в сайдбар с помощью виджета или кода, большое количество настроек для отображения опросов на сайте, использование AJAX, можно задать дату начала и окончания опроса, возможность выбора более, чем одного ответа и прочее.
Передо мной же была поставлены задачи:
1) необходимо было добавить поле URL, в который бы заключался текст опроса (например чтобы перейти на ту страницу, где выводятся какие-то пояснения и сам результат опроса),
2) после нажатия кнопки "Ответить" необходимо редиректить пользователя на этот URL,
3) дополнительное поле для добавления рисунка к опросу, т.е. чтобы пользователь мог сразу же на странице настроек выбрать необходимое изображение со своего компьютера, после чего это изображение автоматический должно вставляться перед текстом опроса.
Для начала стоит разобраться как же устроена внутренняя механика wp-polls. Все данные плагин хранит в mysql в таблицах wp_pollsa, wp_pollsip и wp_pollsq. В wp_pollsa хранятся все ответы на наши опросы, в wp_pollsip статистика ответов, а в wp_pollsq сам опрос и его основные данные. Именно последняя таблица нам и нужна. Имена полей интуитивно понятны, поля для url и рисунка мы будем добавлять по параметрам анологичным полю pollq_question. В итоге должна получится картина такая:
В этих полях будут сохраняться наши данные. Следующий шаг - добавление в интерфейс настроек наших полей.
За опции отвечают 2 файла polls-add.php и polls-manager.php. Первый соответственно при добавлении запроса, а второй отвечает за редактирование уже существующих опросов. Начнем с добавления опроса. Добавим сами поля ввода после кода:
Теперь необходимо, чтобы введенные нами данные сохранялись, ищем строчку $pollq_question = addslashes(trim($_POST['pollq_question'])); и вставляем после неё
Теперь после заполнения полей рисунка и ссылки, наши данные будут скохраняться в mysql. В данном случае используется стандартная функция для перемещения файлов, которая использует путь и имя выбранного изображения. Если вы хотите, чтобы имена файлов случайно не совпали при загрузке, то стоит вместо имени файла использовать случайный генератор или использовать хэш md5.
Следующее - нужно добавить возможность изменять и просматривать, вводимые нами данные, для этого будем править файл polls-manager.php. Здесь мы добавим поля для изменения, а так же не помешает дополнительно вывести то изображение, которое используется в данном опросе. Действия похожи на предыдущие, соответственно сперва добавляем нужные поля между комментариями и :
Половина дела сделана, теперь осталось выводить эти данные как нам угодно. Для вывода опроса плагин использует шаблоны, которые можно изменять в админке (пункт Poll Templates). Данные подставляются наподобие %<текст>%. Для вывода изображения и урла мы сделаем такую же структура. За вывод опроса уже непосредственно на экран отвечает wp-polls.php. Заходим туда и ищем строчки наподобие:
1
2
3
4
5
6
7
$poll_question=$wpdb->get_row("SELECT pollq_id, pollq_question, pollq_totalvotes, pollq_active, pollq_timestamp, pollq_expiry, pollq_multiple, pollq_totalvoters, pollq_url, pollq_img FROM $wpdb->pollsq WHERE pollq_id = $poll_id LIMIT 1");
Первые строчки отвечают за извлечение данных из БД. Последние - за подстановку в шаблон, взятый из админки, вместо тегов уже конкретных значений.
Теперь всё, прописываем в шаблоне как нам угодно выводить эти данные, например изменяем стандартную часть шаблона в "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):