Страницы

четверг, 7 апреля 2011 г.

Плагин Profiler и Wordpress 3.x

В таком славном движке как Wordpress почему-то нет встроенной возможности просматривать страницу пользователя. Хотя заполнять данные о себе он при этом может.

Решается плагином Profiler  Эрика Шульца, который последний раз обновлял его в июле 2008 года.  Уверен, что решается и другими способами и плагинами посвежее, да и в 3.1 по-моему уже есть что-то встроенное (хотя я не уверен), но этот плагин даёт всё, что требовалось для решения поставленной задачи и использовался именно он.

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

Суть проблемы: не отображаются  пользователи, не смотря на то, что мы явно указали, что нужно отображать их роли. Отображается только профиль администратора, причём только одного, а не всех пользователей с ролью "Администратор" , если поставить чекбокс на "No role".

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

$roleslist = array(
'\'a:1:{s:13:\"administrator\";b:1;}\''=>$administrator,
'\'a:1:{s:10:\"subscriber\";b:1;}\''=>$subscriber,
'\'a:1:{s:6:\"author\";b:1;}\''=>$author,
'\'a:1:{s:6:\"editor\";b:1;}\''=>$editor,
'\'a:1:{s:11:\"contributor\";b:1;}\''=>$contributor,
'\'a:0:{}\''=>$none);
Разбираем, что к чему и что это вообще за надписи.  Информация о ролях по умолчанию хранится в базе данных в таблице wp_usermeta . Получить информацию о ролях пользователей нам поможет запрос вида

SELECT * FROM wp_usermeta WHERE meta_key="wp_capabilities"
В результате выполнения запроса мы увидим, что информация о ролях содержится в поле meta_value как текстовая строка в особом формате. Именно этот формат и приведен выше. Расшифровывается он приблизительно следующим образом:

a:число: { - a это начало массива (от array) и число - это количество элементов в этом массиве. 

s:число:"строка"; - "s" - это строчный тип элемента, число - это количество символов в строке и "строка" - собственно сама строка.

b:1; - это Булев элемент естественно с возможными значениями 1 и 0.

Начиная с версии Wordpress 2 с чем-то, что-то близко к трём формат записи роли слегка изменился. Собственно новый не составляет труда просто посмотреть в базе данных по тому же пути в таблице wp_usermeta. Новый вид записи выглядит таким образом:
a:1:{s:13:"administrator";s:1:"1";}
 Исходя из выше приведенного 91 строку в файле profiler.php становится необходимым привести   к следующему виду:

$roleslist = array('\'a:1:{s:13:\"administrator\";s:1:\"1\";}\''=>$administrator,
                       '\'a:1:{s:10:\"subscriber\";s:1:\"1\";}\''=>$subscriber,
                       '\'a:1:{s:6:\"author\";s:1:\"1\";}\''=>$author,
                       '\'a:1:{s:6:\"editor\";s:1:\"1\";}\''=>$editor,
                       '\'a:1:{s:11:\"contributor\";s:1:\"1\";}\''=>$contributor,

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

Теперь можно смотреть профили пользователей, роли которых вы разрешили просматривать в настройках плагина и можно формировать ссылки вида example.com//?users=%username%.

Комментариев нет:

Отправить комментарий