Вопрос или проблема
Я пытаюсь создать ярлык в навигации, который перенаправит пользователя на один определённый пост.
Пока я использую
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; // Завершение выполнения скрипта после перенаправления
}
Пояснения к коду
-
add_menu_page: Здесь мы добавляем новый пункт меню "Featured Jobs", который будет доступен пользователю с правами ‘edit_posts’. Параметр
featured_jobs
является уникальным слугом для данной страницы. -
custom_redirect_to_post: Это функция, связанная с пунктом меню. В ней мы определяем ID поста, который необходимо редактировать, и выполняем перенаправление на страницу редактирования поста с помощью
wp_redirect
. -
admin_url: Функция
admin_url()
используется для генерации корректного URL для перехода в раздел администрирования. В данном случае, она формирует адрес для редактирования указанного поста. -
exit: Команда
exit
необходима, чтобы прекратить выполнение скрипта после перенаправления, тем самым предотвращая возможные дальнейшие операции.
Заключение
Сохраните изменения и обновите админ-панель. Теперь, когда вы нажмете на пункт меню "Featured Jobs", вы будете перенаправлены на редактор поста с ID 706 без ошибок доступа. Этот подход не только обеспечивает законное и корректное поведение панели администрирования, но и совместим с архитектурой WordPress.
Также рекомендуется тестировать любые изменения в окружении разработки перед их применением на продакшн-сайте, чтобы избежать возможных неполадок. Если у вас появятся дополнительные вопросы или вам потребуется помощь с другими аспектами разработки, не стесняйтесь обращаться.