Как можно настроить функцию 'add_menu_page()', чтобы при открытии страницы она сразу содержала определённый GET-параметр?

Я регистрирую страницу в Админ-панели с помощью следующего кода: <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;amp;tab=my-first-tab', // &lt;&lt;&lt;
  'page_content',
  'dashicons-admin-tools',
  null
);</code></pre> <br/> <br/> Однако, в результате я вижу сообщение "Извините, вам не разрешено просматривать эту страницу". <br/> <br/> В Админ-панели, после установки WooCommerce, есть пункт меню "Платежи", в ссылку которого уже встроен GET-параметр "tab=checkout". <br/> <br/> Как правильно добавить GET-параметр к меню при его регистрации?
  • 3 декабря 2024 г. 6:43
Ответы на вопрос 2
Для того чтобы добавить 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&amp;tab=my-first-tab', 'page_content', plugins_url( 'dashicons-admin-tools' ), 6 );
}


Кроме того стоит перепроверить доступность возможности "edit_others_posts" текущему юзеру.
Похожие вопросы