После установки плагина WordPress появляется сообщение об использовании функции has_cap с устаревшим аргументом, но этой функции нет в коде плагина. Что нужно изменить в плагине?
Где устаревший аргумент?
Notice: Функция has_cap вызвана с аргументом, который считается устаревшим с версии 2.0! Использование уровней пользователей в плагинах и темах считается устаревшим. Используйте роли и возможности.. in /.../....../wp-includes/functions.php on line 2712
Файл .../wp-includes/functions.php - это не файл плагина, а файл WordPress, но в него в функцию has_cap() передается устаревший аргумент из кода плагина.
Нужно найти, где в коде плагина задан уровень пользователя вместо возможности пользователя.
Что искать?
Устаревший аргумент - Уровень пользователя (User Level) - числовой, а сейчас в WordPress используются роли (Admin - администратор, Subscriber - подписчик и др.) и возможности (capabilities) , например, edit_posts - редактирование записей, read - читать, read_private_posts - читать личные записи (см. Roles and Capabilities в WordPress Codex)
Аргумент capability (возможность) задается в плагине или теме, например, в функциях добавления административной страницы темы или плагина add_theme_page(), add_options_page(), add_menu_page(), add_submenu_page().
Понятно, что должно быть задано, кто может иметь доступ к административным страницам плагина, например, вот синтаксис одной из функций добавления админ-страницы:
add_menu_page ($page_title, $menu_title,
$capability, $menu_slug,
$function, $icon_url, $position);
Третий параметр $capability задает, что для доступа пользователь должен иметь роль с указанной возможностью. Если значение $capability задано неверно, получаем ошибку.
Примеры исправления
Неправильно использовать числовое значение уровня пользователя (устаревшее - deprecated) или строковое значение роли. Функции добавления меню и подменю принимают строковое значение возможности (например, edit_pages - редактирование страниц), а не роли пользователей.
//Неверно: роль задана как число 8
add_menu_page( 'MyPage', 'MyPage', 8, 'mypage',
array(&$this, 'mainAdmin'), null, 6);
//Правильно: возможность 'edit_pages'
add_menu_page( 'MyPage', 'MyPage', 'edit_pages', 'mypage',
array(&$this, 'mainAdmin'), null, 6);
//Неверно: строковое значение роли 'administrator'
add_submenu_page('mypage', 'MyLines', 'Lines', 'administrator',
'my-lines', array(&$this, 'linesPage'));
//Правильно:
add_submenu_page('mypage', 'MyLines', 'Lines', 'edit_pages',
'my-lines', array(&$this, 'linesPage'));
Еще пример.
В плагине Dictionary Box устаревший аргумент в функции добавления страницы настроек (опций):
function dictionary_box_options_page() {
add_options_page('Dictionary Box Options', 'Dictionary Box', 10, 'dictionary-
box/options.php');
}
Вместо 10 напишем 'manage_options' - возможность изменять настройки:
function dictionary_box_options_page() {
add_options_page('Dictionary Box Options', 'Dictionary Box', 'manage_options',
'dictionary-box/options.php');
}
Да, так и было add_submenu_page с 8-кой, поменял 8-ку на administrator. Большое спасибо, WordPress - рулит.
Проблема была в плагине RusToLat
add_options_page('RusToLat', 'RusToLat', 8, __FILE__, 'rtl_options_page');
заменил на
add_options_page('RusToLat', 'RusToLat', 'edit_pages', __FILE__, 'rtl_options_page');
Огромное спасибо
+1 - проблема в RusToLat
заменил как написано! "дуло пропало"! спасибо!
+1
Да, во многих плагинах такая проблема. Ads WordPRess, RusToLat, Qiwi Button и ещё во многих пришлось применить выше написанное :) Спасибо за полезную информацию!
Благодарю за полезный пост! все получилось
Не совсем понял где искать проблему когда отображается ошибка.
У меня висит сообщение об ошибке: Функция has_cap вызвана....../wp-includes/functions.php on line 3495
В линии 3495 указанного файла речь идет как раз о совместимости.
Как узнать какой плагин не соответствует? У меня их много, все не перелопатишь.
Ошибка появляется после активации плагина. Если новые плагины в последнее время не подключались, и неизвестно, из-за какого плагина появилась ошибка, можно отключать и включать плагины по одному, пока ошибка не исчезнет. Может оказаться, что таких плагинов несколько.
Огромное спасибо! помогло!
Плагин WP Page Numbers поправил файл wp-page-numbers.php.
В строке add_submenu_page('options-general.php', 'WP Page Numbers Options', 'Page Numbers', 'manage_options', __FILE__, 'wp_page_numbers_settings'); заменил 10 и ошибка ушла.
Спасибо!
Спасибо друг! Мир твоему коду!
Спасибо! Помогло!!!
Спасибо, помогло в плагине карты сайта Dagon Design Sitemap Generator необходимо заменить в строке
// add_options_page('Dagon Design Sitemap Generator', 'DDSitemapGen', 8, __FILE__, 'ddsg_options_page');
на
add_options_page('Dagon Design Sitemap Generator', 'DDSitemapGen', 'edit_pages', __FILE__, 'ddsg_options_page');
и заработало.
Спасибо большое!
Спасибо!
Спасибо, очень помог