Я регистрирую страницу в Админ-панели с помощью следующего кода: <br/> <br/> <pre><code class="php">add_menu_page( 'Мои настройки', 'Мои настройки', 'edit_others_posts', 'my-settings', 'page_content', 'dashicons-admin-tools', null );</code></pre> <br/> <br/> Однако, мне нужно, чтобы эта страница меню открывалась с предустановленным GET-параметром. <br/> <br/> Я пытался зарегистрировать страницу, добавляя GET-параметр непосредственно в строке: <br/> <br/> <pre><code class="php">add_menu_page( 'Мои настройки', 'Мои настройки', 'edit_others_posts', 'my-settings&amp;tab=my-first-tab', // <<< 'page_content', 'dashicons-admin-tools', null );</code></pre> <br/> <br/> Однако, в результате я вижу сообщение "Извините, вам не разрешено просматривать эту страницу". <br/> <br/> В Админ-панели, после установки WooCommerce, есть пункт меню "Платежи", в ссылку которого уже встроен GET-параметр "tab=checkout". <br/> <br/> Как правильно добавить GET-параметр к меню при его регистрации?
Для того чтобы добавить GET-параметр к пункту меню в админ-панели WordPress, необходимо немного изменить ваш подход. Вы не можете добавить GET-параметр непосредственно в строке, которая передается в `add_menu_page()`, так как это может вызвать проблемы с разрешениями, как вы и наблюдали.
Один из способов сделать это - использовать хуки для редиректа после загрузки страницы. Вам нужно будет зарегистрировать страницу и затем сделать редирект на ту же страницу с необходимым параметром, когда пользователь открывает пункт меню.
Вот пример кода, который вы можете использовать:
```php
add_action('admin_menu', 'my_custom_menu_page');
function my_custom_menu_page() {
add_menu_page(
'Мои настройки',
'Мои настройки',
'edit_others_posts',
'my-settings',
'page_content',
'dashicons-admin-tools',
null
);
}
add_action('admin_init', 'redirect_my_settings');
function redirect_my_settings() {
// Проверяем, пришли ли мы на нужную страницу и при этом это не редирект
if (isset($_GET['page']) && $_GET['page'] == 'my-settings' && !isset($_GET['tab'])) {
wp_redirect(admin_url('admin.php?page=my-settings&tab=my-first-tab'));
exit; // Обязательно вызовите exit после редиректа
}
}
function page_content() {
// Ваш код для отображения контента страницы
if (isset($_GET['tab']) && $_GET['tab'] == 'my-first-tab') {
echo '<h1>Контент для первой вкладки</h1>';
} else {
echo '<h1>Основной контент</h1>';
}
}
```
В этом примере:
- Мы регистрируем страницу с помощью `add_menu_page()`.
- Затем создаем обработчик `redirect_my_settings`, который перенаправляет пользователя с нужным GET-параметром при первом открытии страницы.
- `wp_redirect()` используется для установки редиректа на страницу с нужным параметром.
- Обработчик `page_content` выводит содержание страницы в зависимости от значения GET-параметра `tab`.
Теперь, когда пользователь открывает страницу "Мои настройки", его сразу перенаправляет на ту же страницу с добавленным параметром `tab=my-first-tab`.
В Админ-панели, после установки WooCommerce, есть пункт меню "Платежи" в ссылку которого сразу вшит GET-параметр "tab=checkout".
Если внимательно посмотреть на параметры, то можно увидеть что они передаются в файл admin.php. Ты тоже можешь передать их в файл
add_action( 'admin_menu', 'register_my_custom_menu_page' ); function register_my_custom_menu_page(){ add_menu_page( 'Мои настройки', 'Мои настройки', 'edit_others_posts', 'myplugin/myplugin-admin.php&tab=my-first-tab', 'page_content', plugins_url( 'dashicons-admin-tools' ), 6 ); }
Кроме того стоит перепроверить доступность возможности "edit_others_posts" текущему юзеру.