Intereting Posts
Вставка пользовательской почты после публикации опубликованного типа публикации Как ограничить пропускную способность для нескольких? Как предотвратить загрузку wp_editor за пределы контейнера? Добавьте страницу администратора, но не показывайте ее в меню администратора update_post_meta, синтаксический анализатор xml WordPress разбился во время обновления Отображение конкретной таксономии Роли при регистрации (класс) вложения приложений на родительской странице, если вложения текущей страницы меньше, чем … глобальная функция для применения фильтра к настраиваемому полю Использование поля повторителя ACF пейджинг в WP_Query на статической странице Получить таксономию текущей страницы Использование пользовательских мета-возможностей в пользовательском типе сообщений Что определяет, какие заголовки категории A (если в несколько раз)

Как настроить мою структуру ссылок WordPress в link-template.php без плагина?

Прямо сейчас моя структура ссылок выглядит примерно так:

example.com/?p=451

Я бы предпочел, чтобы это выглядело следующим образом:

example.com/abc123

Любые идеи, как я могу изменить код, чтобы сделать это?

Solutions Collecting From Web of "Как настроить мою структуру ссылок WordPress в link-template.php без плагина?"

Хорошо, так, как упоминалось в моем комментарии к вам: изменение файлов ядра – не очень хорошая идея. Но вот решение для плагинов.

Сначала мы создадим собственные правила перезаписи, которые переписывают s/123 (замените 123 идентификатором сообщения) на index.php?short=123 . Нам также придется отфильтровать переменные запроса WordPress, чтобы мы могли их использовать позже.

 <?php add_action( 'init', 'wpse26869_add_rewrites' ); function wpse26869_add_rewrites() { add_rewrite_rule( '^s/(\d+)$', 'index.php?short=$matches[1]', 'top' ); } add_filter( 'query_vars', 'wpse26869_query_vars', 10, 1 ); function wpse26869_query_vars( $vars ) { $vars[] = 'short'; return $vars; } 

В вызове add_rewrite_rule говорится: «Перепишите s, а затем косую черту и строку из одной или нескольких цифр в index.php?short=the_string_of_digits .

Затем мы можем подключиться к переадресации шаблонов и посмотреть, есть ли наша переменная запроса. Если да, мы попытаемся получить постоянную ссылку. Если это не удастся, мы выбросим ошибку 404. В противном случае мы будем использовать `wp_redirect ', чтобы отправить людей на фактический пост.

 <?php add_action( 'template_redirect', 'wpse26869_shortlink_redirect' ); function wpse26869_shortlink_redirect() { // bail if this isn't a short link if( ! get_query_var( 'short' ) ) return; global $wp_query; $id = absint( get_query_var( 'short' ) ); if( ! $id ) { $wp_query->is_404 = true; return; } $link = get_permalink( $id ); if( ! $link ) { $wp_query->is_404 = true; return; } wp_redirect( esc_url( $link ), 301 ); exit(); } 

Наконец, мы подключаемся к get_shortlink для изменения того, как наш rel = «shortlink» появляется в разделе <head> сайта и в другом месте. Эта новая структура ссылок будет отражать правило перезаписи, которое мы писали выше.

 <?php add_filter( 'get_shortlink', 'wpse26869_get_shortlink', 10, 3 ); function wpse26869_get_shortlink( $link, $id, $context ) { if( 'query' == $context && is_single() ) { $id = get_queried_object_id(); } return home_url( 's/' . $id ); } 

В качестве плагина: https://gist.github.com/1179555

Помимо ответа Кристофера Дависа, вы также можете сделать это независимым от PHP способом, используя .htaccess. Просто добавьте это правило:

 RewriteEngine On RewriteRule ^s/(\d+)$ index.php?p=$1 [L] 

Альтернатива без mod_rewrite , используя mod_alias :

 RedirectMatch Permanent ^/s/(\d+)$ /?p=$1 

Единственная проблема заключается в том, что здесь происходят две переадресации (вместо 1) – (например), если пользователь посещает http://example.com/s/121/ он перенаправляется веб-сервером по http://example.com/index.php?p=121/ а затем WordPress на фактическую постоянную ссылку сообщения.

Преимущество в том, что это никогда не ломается! Плагины могут сломаться, но это не так.

PS: Я использую это (структура коротких ссылок будет http://example.com/-121 где 121 – это идентификатор сообщения):

 RewriteEngine On RewriteRule ^-(\d+)$ index.php?p=$1 [L]