Почему страница настроек моего плагина может не загружаться?
У меня возникла проблема на одном сайте, где установлен мой плагин. Страница "настроек" не загружается. Когда я нажимаю на "настройки", страница загружается, но после блока "Upgrade to 3.1" экран становится пустым, как будто там стоит die().
У меня есть два файла: plugin.php и plugin-admin.php
В plugin.php у меня есть код для настройки админ-страницы:
$my_dir = plugins_url('/img', __FILE__);
add_options_page(
'Настройки MY!',
'Настройки MY!',
'manage_options',
'my-plugin-admin.php',
'my_settings_admin',
$my_dir.'/favicon.png', 'top'
);
register_setting( 'my_settings_options', 'my_settings', 'my_settings_validate' );
function my_settings_admin(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
include_once dirname(__FILE__) . '/my-plugin-admin.php';
}
define( 'my_BASENAME', plugin_basename( __FILE__ ) );
define( 'my_BASEFOLDER', plugin_basename( dirname( __FILE__ ) ) );
define( 'my_FILENAME', str_replace( my_BASEFOLDER.'/', '', plugin_basename(__FILE__)));
Ссылка "My Settings" отображается в меню "Настройки" корректно, и ссылка ведет на правильную страницу, но скрипт не загружается, и никакие трассировки внутри my-plugin-admin.php не работают.
Есть идеи?
ОБНОВЛЕНИЕ: с помощью t31os я обновил функцию, которая исправляет проблему:
function my_settings_admin(){
include_once dirname(__FILE__) . '/my-plugin-admin.php';
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
Мне просто нужно было переместить wp_rewrite и flush_rules после оператора include. Хотя я не знаю, почему это помогло.

Если бы мне пришлось предположить причину проблемы, моей первой мыслью был бы вызов flush rules.
Как сказал Andy, включение debug очень помогает, и если вы действительно не хотите видеть ошибки, вы всегда можете использовать лог отладки, добавив следующее в ваш конфигурационный файл..
define('WP_DEBUG', true); // Включить режим отладки
define('WP_DEBUG_LOG', true); // Логировать ошибки в wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // Отключить отображение ошибок
Что касается проблемы с отсутствием редиректа при обновлении настроек, обычно это происходит, когда nonce отсутствует или некорректен, хотя в вашем случае может быть что-то другое.
Были ли какие-то ошибки при включенном debug? (или в логе, если вы используете этот метод?)

Когда я использую предоставленный код, я вижу пункт меню "MY! Settings" как верхний элемент в меню Настройки, и у него неожиданный URL.
Вызов add_options_page
должен быть обёрнут в функцию, подключённую к действию admin_menu
.
function my_admin_menu() {
add_options_page(
'MY! Settings', // Заголовок страницы
'MY! Settings', // Название пункта меню
'manage_options', // Необходимые права доступа
'my-admin', // URL-слаг страницы
'my_settings_admin' // Функция для вывода содержимого страницы
);
}
add_action( 'admin_menu', 'my_admin_menu' );
В целом, используйте define( 'WP_DEBUG', true )
в вашем wp-config.php
, чтобы видеть ошибки и предупреждения.

Спасибо, Энди, я поместил это внутрь функции, моя ошибка, что не уточнил это.

Проблема, как указал t31os, в правилах сброса. Мне пришлось разместить их после include once, а не до. Теперь скрипт загружается. Однако, при включенном режиме отладки, мои клики для сохранения настроек перенаправляют на options.php, а не обратно к настройкам плагина, как ожидалось.
