использование слага вместо ID в URL редактирования поста администратора

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

В админке есть ли способ использовать слаг вместо 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;
        }
    }
}

Как это работает?

  1. Событие admin_init: Эта функция срабатывает при каждом запросе к админ-панели.
  2. Получение слага: Мы проверяем, есть ли в URL параметр slug. Если есть, то мы очищаем его с помощью sanitize_text_field() для обеспечения безопасности.
  3. Получение поста: С помощью функции get_page_by_path() мы получаем пост на основе слага.
  4. Перенаправление: Если пост найден, мы перенаправляем пользователя на стандартный URL редактирования с использованием ID поста.

Как пользоваться?

После добавления указанного кода в файл functions.php, вы сможете редактировать посты, используя их слаги в URL. Например:

http://example.com/wp-admin/post.php?slug=home&action=edit

Итог

Создание функционала, который позволяет использовать слаги вместо ID в админке WordPress, может значительно упростить процесс редактирования постов и улучшить удобство работы с админкой. Указанный метод является простым и эффективным, объединив безопасность и функциональность без необходимости глубоких изменений в ядре WordPress. Рекомендуется тщательное тестирование на локальной среде перед внедрением на рабочем сайте.

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

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