Поддержка Проблемы и решения Проблемы при активации плагина

  • Добрый день, Всем!
    При активации плагина появляется такая ошибка:

    Undefined index: plugins in D:\localhost\wp\wp-admin\plugins.php on line 16

    А затем следующее сообщение:

    Плагин произвёл при активации 198 символов неожиданного вывода. Если вы заметите ошибку «headers already sent», проблемы с RSS-лентами или другие неполадки, попробуйте деактивировать или удалить этот плагин.

    При этом плагин работает нормально.

    В файле plugins.php, ругается на следующий кусок строку 16:

    11 if ( is_multisite() ) {
    12	$menu_perms = get_site_option( 'menu_items', array() );
    13
    14	if ( empty($menu_perms['plugins']) && ! is_super_admin() )
    15		wp_die( __( 'Cheatin’ uh?' ) );
    16	else if ( $menu_perms['plugins'] != 1 && is_super_admin() )
    17		add_action( 'admin_notices', 18'_admin_notice_multisite_activate_plugins_page' );
    19 }

    Пыталась вывести значение $menu_perms = get_site_option( 'menu_items', array() ); просто в теле плагина — пустой массив, возможно не там надо вызывать.

    Помогите, пожалуйста, разобраться куда копать и почему так происходит?

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Одно замечание:
    Активируемый плагин является тестовой копией основного плагина, который на данный момент не активирован, но присутствует. Тестовый плагин имеет другое имя, хотя реализация та же, что и у основного. Но при физическом удалении основного плагина , ошибки при активации тестового все равно остаются. Может тут что-то искать надо, но не знаю что.

    Atrax

    (@atrax)

    Ethical engineer

    Сервер тестовый? 🙂
    Скорее всего, это включенные настройки error_reporting E_NOTICE
    А вывод — это текст об использовании несуществующей переменной.
    На боевых серверах обычно error_reporting = E_ALL & ~E_NOTICE

    Закомментировла вывод ошибок — все стало нормально. Но ведь по сути получается, что ошибка

    Undefined index: plugins in D:\localhost\wp\wp-admin\plugins.php on line 16

    так и осталась, нет мыслей почему она может возникать?

    Atrax

    (@atrax)

    Ethical engineer

    Потому что вы читаете несуществующий элемент массива.

    Напишите так:
    if (isset($menu_perms['plugins']) && ($menu_perms['plugins'] != 1) && is_super_admin())

    Это не ошибка, а предупреждение. Семантически PHP позволяет работать с несуществующими переменными и создает их автоматически. Но в «режиме разработчика» об этом сообщает.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Похоже на баг в WordPress. Написал в багтрекер:
    http://core.trac.wordpress.org/ticket/14202

    В этом фрагменте выводится сообщение о том, что страница плагинов не видна обычным пользователям (если её не включить). isset() не подходит, потому что тогда сообщение просто не будет выводиться. Можно так:

    if ( empty($menu_perms['plugins']) && ! is_super_admin() )
    	wp_die( __( 'Cheatin’ uh?' ) );
    else if ( empty($menu_perms['plugins']) && is_super_admin() )
    	add_action( 'admin_notices', '_admin_notice_multisite_activate_plugins_page' );

    Спасибо, да таким образом предупреждение исчезает, остается только сообщение, которое выводится в зависимости от параметров «error», «charsout»:

    <?php if ( isset($_GET['error']) ) :
    
    	if ( isset($_GET['charsout']) )
    		$errmsg = sprintf(__('The plugin generated %d characters of <strong>unexpected output</strong> during activation.  If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.'), $_GET['charsout']);
    	else
    		$errmsg = __('Plugin could not be activated because it triggered a <strong>fatal error</strong>.');
    	?>

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Плагин что-то выводит? Было бы здорово взглянуть на код.

    Извините за долгий ответ!!!
    Выяснилось, что на появление сообщения:

    Плагин произвёл при активации 198 символов неожиданного вывода. Если вы заметите ошибку «headers already sent», проблемы с RSS-лентами или другие неполадки, попробуйте деактивировать или удалить этот плагин.

    влияют включенные настройки:

    ini_set('display_errors',1);
    error_reporting(E_ALL);

    Плагин состоит из 4-х функций, они громоздкие, поэтому привожу скелет, если нужно что-то подробнее, то можно и подробнее привести:

    //--define constant--------/
    ...
    //////////////
    function activate_plugin()
    {
    	mkdir(SLD_UPLOAD_PATH);
    
    	add_option("opt_all_sld");
    
    }
    function add_admin_sub_menu()
    {
    	add_submenu_page('plugins.php', 'Name', 'Name', 8,basename(__FILE__), 'name_page');
    }
    
    function name_page() {
    //функция, которая отвечает за отображение меню
    }
    function sld_redirect() {
    //тут происходит обработка полей плагина в зависимости от параметра
     "action", приходящего в адресной строке. А так же в зависимости от
    того, нажата кнопка "Изменить" или "Добавить".
    }
    
    function slider() {
    //функция подготавливает массив данных для шаблона
    }
    
    register_activation_hook(__FILE__, 'activate_plugin');
    
    add_action('admin_menu', 'add_admin_sub_menu');
    add_action('admin_init', 'sld_redirect');

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Тема «Проблемы при активации плагина» закрыта для новых ответов.