Перенаправить URL-адрес старых пользовательских сообщений на новый URL-адрес WordPress

#php #wordpress #.htaccess #post #redirect

#php #wordpress #.htaccess #Публикация #перенаправление

Вопрос:

Короче говоря, я преобразовал свой старый пользовательский сайт на новый сайт WordPress, домен остался прежним, я использовал PHP для вставки тысяч старых статей с комментариями в базу данных WordPress, сохраняя ту же последовательность идентификаторов, что означает, что старые ссылки были:

www.mysite.com/index.php?id=11058

www.mysite.com/index.php?category=12

Чем новая ссылка:

www.mysite.com/?p=11058

www.mysite.com/?cat=12

Все было сделано хорошо, единственная проблема в том, что я не хочу терять старые обратные ссылки, и я хочу использовать PHP для перенаправления, например:

     if (isset($_GET['old_id'])) {  $id=$_GET['old_id']; $Wordpress_post_id = $id; }
 

Как я могу использовать этот код в WordPress? и этот метод лучше или перенаправить на .htaccess? Или есть другой способ, который лучше, чем два?

Ответ №1:

Я бы сделал это в template_redirect :

Это действие выполняется непосредственно перед тем, как WordPress определит, какую страницу шаблона загружать. Это хороший способ, если вам нужно выполнить перенаправление с полным знанием запрошенного содержимого.

 add_action(
    'template_redirect',
    static function() {

        if(!isset($_GET['old_id'])){
            return;
        }

        // Do custom look up here, possibly get_posts()

        // Once you determine where to go, use wp_safe_redirect with the appropriate code (probably 301)
        // https://developer.wordpress.org/reference/functions/wp_safe_redirect/

        // Also possibly use get_permalink() to find the canonical link for the object
        // https://developer.wordpress.org/reference/functions/get_permalink/
    }
);
 

К сожалению, «пользовательский материал» действительно зависит от того, как вы хранили вещи. Это мета-сообщение, вы вручную вставляли идентификаторы сообщений, это пользовательская таблица поиска?

Если это истинное сопоставление устаревших идентификаторов с идентификаторами postID, вы даже можете использовать плагин, такой как перенаправление, с простым правилом.

Комментарии:

1. Я думаю, что лучше использовать плагин, чем самому изменять скрипт, поскольку я новичок в WordPress.

2. Я использовал функции WordPress для вставки сообщений и комментариев (wp_insert_post() и wp_insert_comment()). большое вам спасибо.

3. Если плагин перенаправления работает, я говорю, что он полностью согласен. Однако, если вы хорошо разбираетесь в PHP, этот код не нуждается в большом количестве материалов WordPress внутри.

4. Проблема в том, что я мало что знаю о том, как работает и структурирует WordPress. Вставить сообщения, комментарии и изображения было легко, потому что все, что мне нужно было сделать, это поместить их в массив, а затем использовать функции WordPress для вставки их в базу данных, но этот вопрос, перенаправление, кажется более сложным. Я попробую PHP-решение на локальном хостинге моего компьютера, если это удастся, я внедрю его на сайте. Так благодарен вам.

Ответ №2:

Поскольку вы упомянули (и отметили) .htaccess , вы могли бы сделать это следующим образом в верхней части .htaccess файла (перед # BEGIN WordPress маркером комментария):

 # Redirect "/index.php?id=<number>" to "/?p=<number>"
RewriteCond %{QUERY_STRING} ^id=(d )
RewriteRule ^index.php$ /?p=%1 [R=301,L]

# Redirect "/index.php?category=<number>" to "/?cat=<number>"
RewriteCond %{QUERY_STRING} ^category=(d )
RewriteRule ^index.php$ /?cat=%1 [R=301,L]
 

Где %1 — обратная ссылка на захваченную группу в предыдущем CondPattern в обоих случаях. т.е. значение параметров id и category URL соответственно.

Протестируйте с 302 (временными) перенаправлениями, чтобы избежать проблем с кэшированием.

Комментарии:

1. Я попробую.. Большое вам спасибо

Ответ №3:

Недавно мне пришлось сделать то же самое. Я реорганизовал сайт и переместил структуру из корня (и всю структуру каталогов) в папку блога. Я экспериментировал с несколькими методами для WordPress, анализировал журналы на предмет проблем и т. Д. И Реализовал следующий метод.

Сначала я создал список каждой страницы, статьи и т. Д.

Затем я создал файл .htaccess, расположенный в корневом каталоге сайта.

В моем примере ниже я показываю перенаправление для одной страницы, но с двумя записями (косая черта или нет). Нижняя часть обрабатывает файлы и директоры и т. Д.

Мой .htaccess имеет длину около 600 строк. Я не заметил никаких проблем с производительностью при перенаправлениях.

Примечание: я использую 302 для перенаправлений, если ваши являются постоянными, рассмотрите возможность использования 301.

 <IfModule mod_rewrite.c>
  <IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
  </IfModule>

  RewriteEngine On

  RewriteRule ^aboutme$ https://www.example.com/blog/aboutme/ [L,R=302]
  RewriteRule ^aboutme/$ https://www.example.com/blog/aboutme/ [L,R=302]

  # Handle Authorization Header
  RewriteCond %{HTTP:Authorization} .
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

  # Redirect Trailing Slashes If Not A Folder...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} (. )/$
  RewriteRule ^ %1 [L,R=301]

  # Send Requests To Front Controller...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]
</IfModule>
 

Комментарии:

1. Кажется немного сложным, поскольку у меня нет большого опыта работы с .htaccess, и я боюсь ошибиться.. Мне нужно простое решение.. Спасибо

2. @AyadAttar Я не думаю, что есть простое решение для WordPress. Вы должны обрабатывать угловые случаи. В WordPress есть много способов отображения статей и страниц в виде URL-адресов. Какой бы метод вы ни выбрали, потратьте время на изучение файлов журналов, так как будут проблемы.

3. Вы абсолютно правы, простых решений не существует.. Я действительно должен приложить больше усилий, чтобы узнать, как работает WordPress.. Проблема в том, что управление сайтом, редактирование и написание новых постов не оставляют мне времени на изучение чего-то нового.. Вот почему я стараюсь сократить время и усилия, обращаясь к экспертам.. Я думаю, что проблема, с которой я сталкиваюсь, как и многие владельцы веб-сайтов, заключается в том, что они не могут сформировать команду для управления своим сайтом .. Вы не можете делать все самостоятельно.. Большое вам спасибо за совет.