Вопрос или проблема
В админке есть ли способ использовать слаг вместо ID поста в URL, который ведет на экран редактирования поста?
Так вместо:
http://example.com/wp-admin/post.php?post=5562&action=edit
Вы бы использовали что-то вроде:
http://example.com/wp-admin/post.php?slug=home&action=edit
Или, поскольку база данных хранит слаг в колонке post-name
:
http://example.com/wp-admin/post.php?post-name=home&action=edit
Конечно, ни один из этих вариантов не работает. Существует ли какой-либо существующий метод для этого, используя встроенные параметры URL WordPress?
Если нет, то какую функцию можно использовать в файле functions.php
моей темы, чтобы это сработало?
Если главная страница установлена как “Главная” в настройках, используйте:
get_edit_post_link( get_option( 'page_on_front' ) );
Ответ или решение
Вопрос использования слагов вместо ID в URL для редактирования постов в админке WordPress является актуальным для многих пользователей, желающих сделать свои URL более читабельными и понятными. По умолчанию WordPress использует числовые идентификаторы постов, что может быть не всегда удобно, особенно если вам нужно быстро находить и редактировать определенные записи.
Работает ли это «из коробки»?
К сожалению, стандартный функционал WordPress не поддерживает использование слагов вместо ID в ссылках для редактирования постов. URL для редактирования выглядит следующим образом:
http://example.com/wp-admin/post.php?post=5562&action=edit
Здесь 5562
— это ID поста. Попытка передать слаг через URL, как:
http://example.com/wp-admin/post.php?slug=home&action=edit
или
http://example.com/wp-admin/post.php?post-name=home&action=edit
не приведет к успешному редактированию, так как WordPress не обрабатывает такие параметры по умолчанию.
Как сделать это самостоятельно?
Для того чтобы реализовать возможность редактирования постов по слагу, необходимо добавить определенную функциональность в файл functions.php
вашей темы. Ниже приведен пример функции, которая будет позволять использовать слаг для редактирования постов:
add_action('admin_init', 'slug_edit_post_redirect');
function slug_edit_post_redirect() {
if (isset($_GET['slug']) && !empty($_GET['slug'])) {
$slug = sanitize_text_field($_GET['slug']);
// Получаем пост по слагу
$post = get_page_by_path($slug, OBJECT, 'post');
if ($post) {
// Перенаправляем на URL редактирования поста по ID
wp_redirect(admin_url('post.php?post=' . $post->ID . '&action=edit'));
exit;
}
}
}
Как это работает?
- Событие
admin_init
: Эта функция срабатывает при каждом запросе к админ-панели. - Получение слага: Мы проверяем, есть ли в URL параметр
slug
. Если есть, то мы очищаем его с помощьюsanitize_text_field()
для обеспечения безопасности. - Получение поста: С помощью функции
get_page_by_path()
мы получаем пост на основе слага. - Перенаправление: Если пост найден, мы перенаправляем пользователя на стандартный URL редактирования с использованием ID поста.
Как пользоваться?
После добавления указанного кода в файл functions.php
, вы сможете редактировать посты, используя их слаги в URL. Например:
http://example.com/wp-admin/post.php?slug=home&action=edit
Итог
Создание функционала, который позволяет использовать слаги вместо ID в админке WordPress, может значительно упростить процесс редактирования постов и улучшить удобство работы с админкой. Указанный метод является простым и эффективным, объединив безопасность и функциональность без необходимости глубоких изменений в ядре WordPress. Рекомендуется тщательное тестирование на локальной среде перед внедрением на рабочем сайте.