Как создать правило перенаправления 301 в functions.php - PullRequest
0 голосов
/ 24 октября 2019

Прежде всего, извините, если мой английский не идеален ...

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

В Интернете был новостной канал, который больше не работает, но они все еще были в старой базе данных. Я написал небольшой скрипт на Python для генерации XML с форматом импорта, используемым WordPress, из CSV с новостями, взятыми из базы данных.

У новостей был связанный идентификатор, из которого я сгенерировал идентификатор записии URL в формате «mywebsite.com/on-1234» («on» взято из «Old News»). На старом сайте новости имели формат «mywebsite.com/news.html?id=1234». Эти старые ссылки в настоящее время связаны с большим количеством сайтов (Мы являемся центром экологических исследований).

Я знаю, как перенаправить одну ссылку на другую, но это может быть утомительной задачей. в каждой новости по отдельности, поскольку их сотни ... Есть ли какой-нибудь способ обнаружить шаблон "/news.html?id=1234" и заменить его на "on-1234" (с сохранением номера), чтобы он перенаправлял на этот маршрут? .

Я искал информацию об этом, и ни одно решение не покрывает мою потребность.

Заранее спасибо

1 Ответ

1 голос
/ 24 октября 2019

Самый эффективный способ сделать что-то подобное вне веб-сервера - это подключиться к перехватчику WordPress 'parse_request и обработать перенаправление там. Вот некоторый пример кода, который подключается к parse_request проверкам, чтобы увидеть, был ли запрос к старому news.html, если он был и имеет идентификатор, который будет перенаправлен на пост с идентификатором mywebsite.com/?p=1234, если он не соответствует посту. ID, который вы могли бы слегка настроить для того же эффекта.

/**
 * Plugin Name: Old News Redirect
 * Plugin URI:
 * Description: Redirect old news urls.
 * Version: 0.0.1
 * Author: ninnypants
 * Author URI:
 * License: GPL2
 */

namespace StackOverflow\OldNews;

function maybe_redirect( $wp ) {
    if ( 'news.html' === $wp->request ) {
        $id = filter_input( INPUT_GET, 'id', FILTER_VALIDATE_INT );
        if ( empty( $id ) ) {
            return;
        }

        wp_safe_redirect( add_query_arg( 'p', $id, home_url() ) );
        exit;
    }
}
add_action( 'parse_request', __NAMESPACE__ . '\maybe_redirect' );

Я проверил этот код, поместив его в каталог mu-plugins на одном из моих тестовых сайтов, и я бы предложил этот подход, если вы неЯ не хочу, чтобы какие-либо пользователи могли отключить его или сломать, если кто-то сменит тему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...