Добавление прямой ссылки на редактор сообщений в админ-меню

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

Я пытаюсь создать ярлык в навигации, который перенаправит пользователя на один определённый пост.
Пока я использую

add_action('admin_menu', 'add_custom_menu_position');

function add_custom_menu_position() {
add_menu_page('FeaturedJobs', 'Показанные вакансии', 'edit_posts', 'edit.php?post=706&action=edit',18); 
}

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

Финальная ссылка выглядит так: http://website_url/wp-admin/admin.php?page=post.php?post=706&action=edit

Я знаю, что у меня достаточно прав для редактирования, потому что я использую аккаунт администратора, и когда я использую обычную ссылку для редактирования (http://website_url/wp-admin/post.php?post=706&action=edit), всё работает хорошо. Я почти уверен, что проблема в том, что ссылка, к которой я пытаюсь обратиться, неправильная, но я не могу найти способ связаться с ней другим способом.

Я буду благодарен за любые подсказки,
E.

Когда вы добавляете слаг меню как
edit.php?post=706&action=edit, он добавляет его в URL после admin.php, считая это новой страницей на панели администратора (типичное поведение add_menu_page())

Поэтому вам следует указать полнофункциональный URL. Я думаю, admin_url() может помочь.

Попробуйте добавить

admin_url('post.php?post=706&action=edit')

Или

admin_url('edit.php?post=706&action=edit')

вместо

edit.php?post=706&action=edit

в качестве слага меню.

add_action( 'admin_menu', 'register_custom_menu_link' );

function register_custom_menu_link(){
    add_menu_page('FeaturedJobs', 'Показанные вакансии', 'edit_posts', 'featured_jobs', '__return_null', 'dashicons-external', 18);
}

add_action( 'admin_init', 'redirect' );
function redirect() {
    if(!empty($_GET['page']) && $_GET['page'] == 'featured_jobs') {
        // Ваш ID поста
        $post_id = 706;
        wp_redirect(wp_specialchars_decode(get_edit_post_link($post_id)));
    }
}

Я сталкивался с такой же проблемой, но смог решить её с помощью wp_redirect и этого поста.

Моё решение в итоге выглядело примерно так:

add_action('admin_menu', 'add_custom_menu_position');

function add_custom_menu_position() {
$hook = add_menu_page('FeaturedJobs', 'Показанные вакансии', 'edit_posts', 'featured-jobs',18); 
add_action('load-' . $hook, function () {
            wp_redirect(admin_url('post.php?post=706&action=edit'));
        });
}

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

Чтобы создать удобную ссылку на редактор постов в меню админ-панели WordPress, необходимо учесть правильный формат ссылки и использование функций WordPress для перенаправления. Давайте разберем вашу задачу более подробно и предложим оптимальное решение.

Проблема

Вы пытались добавить пункт меню, который бы перенаправлял пользователя на редактор конкретного поста (в данном случае, поста с ID 706). Однако, при нажатии на этот пункт, возникала ошибка "У вас недостаточно прав для доступа к этой странице". Причиной этого являются неверные параметры при добавлении ссылки в меню. Поскольку вы использовали edit.php?post=706&action=edit, WordPress интерпретировал это как новую страницу, чего не происходит в стандартной работе панели администратора.

Решение

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

Код для добавления меню

add_action('admin_menu', 'add_custom_menu_position');

function add_custom_menu_position() {
    // Добавляем новый пункт меню
    $hook = add_menu_page('Featured Jobs', 'Featured Jobs', 'edit_posts', 'featured_jobs', 'custom_redirect_to_post', 'dashicons-external', 18);
}

// Функция для перенаправления
function custom_redirect_to_post() {
    // ID поста, который мы хотим редактировать
    $post_id = 706;
    // Перенаправление на страницу редактирования поста
    wp_redirect(admin_url('post.php?post=' . $post_id . '&action=edit'));
    exit; // Завершение выполнения скрипта после перенаправления
}

Пояснения к коду

  1. add_menu_page: Здесь мы добавляем новый пункт меню "Featured Jobs", который будет доступен пользователю с правами ‘edit_posts’. Параметр featured_jobs является уникальным слугом для данной страницы.

  2. custom_redirect_to_post: Это функция, связанная с пунктом меню. В ней мы определяем ID поста, который необходимо редактировать, и выполняем перенаправление на страницу редактирования поста с помощью wp_redirect.

  3. admin_url: Функция admin_url() используется для генерации корректного URL для перехода в раздел администрирования. В данном случае, она формирует адрес для редактирования указанного поста.

  4. exit: Команда exit необходима, чтобы прекратить выполнение скрипта после перенаправления, тем самым предотвращая возможные дальнейшие операции.

Заключение

Сохраните изменения и обновите админ-панель. Теперь, когда вы нажмете на пункт меню "Featured Jobs", вы будете перенаправлены на редактор поста с ID 706 без ошибок доступа. Этот подход не только обеспечивает законное и корректное поведение панели администрирования, но и совместим с архитектурой WordPress.

Также рекомендуется тестировать любые изменения в окружении разработки перед их применением на продакшн-сайте, чтобы избежать возможных неполадок. Если у вас появятся дополнительные вопросы или вам потребуется помощь с другими аспектами разработки, не стесняйтесь обращаться.

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

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