Я регистрирую страницу в Админ-панели с помощью следующего кода: <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" текущему юзеру.