Intereting Posts
Шаблоны страниц не работают, несмотря на правильность ссылок Как отображать разные подменю? «Добавить медиа» показывает только «Полный размер» в настройках отображения вложений Использование wp_get_image_editor в автономном скрипте внутренняя страница сообщения custum не принимает single-gallery.php? перенаправление на страницу архива Does is_user_logged_in () блокировать поисковые боты? Как показать функцию the_content в этом цикле? get_template_directory_uri () дает мне неправильный путь, когда я пытаюсь использовать wp_enqueue_style Создание вложенных циклов форума в bbPress get_permalink возвращает ссылку по умолчанию Как я могу получить доступ к изображению объекта за пределами цикла? Как избежать дублирования при создании последних сетевых сообщений Как добавить вызовы функций в мою программу plugin options.php default submit? Как обновить настраиваемое поле таксономии с помощью wp_update_term ()? знак воды на показанном изображении изображения в wordpress

Как настроить мою структуру ссылок 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]