Ссылки в меню администратора просто обновляют страницу.

Вопрос или проблема

Я использую функцию add_submenu_page(), чтобы добавить несколько опций в мой плагин. На хостинге Linux все работает как должно, на хостинге Windows эти 5 подменю почему-то имеют одинаковую ссылку, и когда я на них нажимаю, страница просто перезагружается. В чем может быть проблема? Оба хоста используют одну и ту же версию PHP. Вот код:

$this->page_hooks['link1'] = add_submenu_page(__FILE__, __('link1', 'domain'), __('link1', 'domain'), $acl_table['manage_link1'], 'wp-plugin-link1', array($this, 'on_manage_link1'));
$this->page_hooks['link2'] = add_submenu_page(__FILE__, __('link2', 'domain'), __('link2', 'domain'), $acl_table['manage_link2'], 'wp-plugin-link2', array($this, 'on_manage_link2'));
$this->page_hooks['link3'] = add_submenu_page(__FILE__, __('link3', 'domain'), __('link3', 'domain'), $acl_table['manage_link3'], 'wp-plugin-link3', array($this, 'on_manage_link3'));
$this->page_hooks['link4'] = add_submenu_page(__FILE__, __('link4', 'domain'), __('link4', 'domain'), 'manage_options', 'wp-plugin-link4', array($this, 'on_link4'));
$this->page_hooks['link5'] = add_submenu_page(__FILE__, __('link5', 'domain'), __('link5', 'domain'), 'manage_options', 'wp-plugin-link5', array($this, 'on_link5'));

Мне кажется, что связанная функция, которая вызывает сам файл страницы, одинакова для всех пяти случаев использования add_submenu_page(). Трудно сказать без кода.

<?php add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function ); ?>

Переменная $function должна быть разной для всех пяти случаев, что означает, что вам нужно еще четыре функции или методы класса. У вас уже должна быть одна, просто дублируйте ее и укажите включение в другие файлы страниц или измените содержание функций, если вы не включаете файлы.

WordPress Codex: add_submenu_page()

Обновление
Вы пробовали без использования $this->page_hooks[‘link5’] и упрощения вещей? Я не помню, чтобы использовал add_submenu_page() таким образом. Хотя я использую его в цикле, так как моя структура/данные меню находятся в массиве в моем плагине…

add_submenu_page($n, $c2p_mpt_arr[$k]['title'], $c2p_mpt_arr[$k]['menu'], $required_capability, $c2p_mpt_arr[$k]['slug'],  array($this,'page_' . $k) );

Мне удалось найти решение. Проблема была с __FILE__, Windows не воспринимал это как переменную, это было просто NULL. Я изменил это на родительский слаг, и теперь все работает нормально.

Ответ или решение

Проблема с тем, что ссылки в админском меню вашего плагина просто обновляют страницу, как правило, указывает на ошибки в реализации функции add_submenu_page(). Рассмотрим основные аспекты, которые могут вызывать такую ситуацию, учитывая ваш код и замечания.

1. Какая ошибка могла произойти?

Использование FILE

Вы отметили, что проблема была связана с использованием переменной __FILE__. На хостингах под Windows значение этой константы могло быть интерпретировано как NULL, что является дорогостоящей ошибкой. Как результат, страницы, ассоциированные с вашими подменю, не запускались должным образом, а просто происходило обновление главной страницы админ-интерфейса.

Решение:
Измените __FILE__ на корректный родительский слаг, как вы это сделали, чтобы обеспечить правильное связывание подменю с главной страницей плагина.

2. Проверка функции обратного вызова

Ваши функции обратного вызова, такие как on_manage_link1, on_manage_link2 и т. д., должны быть уникальными для каждого подменю. Все функции должны быть правильно определены и должны вызываться в зависимости от выбранного подменю. Убедитесь, что каждая функция делает свое дело и не используется в нескольких местах.

Пример правильного вызова:

$this->page_hooks['link1'] = add_submenu_page('parent_slug', 'Link 1', 'Link 1', 'manage_options', 'wp-plugin-link1', array($this, 'on_manage_link1'));

3. Проверка аргументов

Также стоит проверить все аргументы, которые вы передаете в функцию add_submenu_page(). Убедитесь, что параметр $capability корректно показывает требуемую возможность для каждой подстраницы. Например, у вас есть и manage_link1, и manage_options. Это может привести к тому, что не все пользователи смогут видеть все подменю.

4. Сравнение окружений

Так как у вас работают оба хостинга на одной и той же версии PHP, следите за различиями в конфигурации сервера и установке PHP. Windows и Linux могут обрабатывать определенные функции или настройки по-разному, например:

  • Настройки путей
  • Регистронезависимость файловых систем
  • Конфигурации .htaccess или php.ini (в случае Windows использование IIS)

5. Дебаггинг

Чтобы диагностировать проблему, попробуйте вывести отладочную информацию. Вставьте вывод для проверки значений переменных. Например:

if ( is_admin() ) {
    error_log('Current page slug: ' . $current_screen->base); // Проверка текущего экрана
}

Заключение

Эти меры позволят вам углубиться в проблему и выявить корень неисправности. Определив правильные параметры и убедившись, что каждая функция рабочая, вы сможете решить проблему, мешающую корректной работе вашего плагина. Успехов в дальнейшем развитии вашего проекта!

Оцените материал
Добавить комментарий

Капча загружается...