Сброс постоянных ссылок на всех сайтах в сети WordPress (Multisite)

Как правильно сбросить постоянные ссылки на всех сайтах в сети WordPress (Multisite) если у Вас есть пользовательские типы записей (Custom Post Type)
Быстрая навигация по записи

Достаточно часто сталкиваемся с ситуацией, когда что-то нарушает структуру постоянных ссылки на всех сайтах в сети WordPress (Multisite установка), например, когда происходит ошибка активацией плагина по всей сети.

На одном сайте из сети это достаточно легко исправить, вручную зайдя в Настройки → Постоянные ссылки, в результате чего будут сброшены и восстановлены правила перезаписи, но если в сети несколько десятков сайтов, то это уже не практично и нужен способ сделать это автоматически для всех сайтов.

Типичный подход

Большинство попыток, которые мы видели, работали примерно так:

				
					/*
 * Это пример НЕПРАВИЛЬНОГО способа сбросить постоянные ссылки, не используйте его!
 * Используйте лучший способ, описанный ниже.
 */

function wplb_wrong_flush_rewrite_rules_on_multisite() {

    global $wp_rewrite;
    $sites = wp_get_sites( array( 'limit' => false ) );

    foreach ( $sites as $site_id ) {
        switch_to_blog( $site_id );
        $wp_rewrite->init();
        flush_rewrite_rules(); // Нельзя так делать после вызова switch_to_blog().
        restore_current_blog();
    }
    $wp_rewrite->init();

}
				
			

Функция отработает для основных типов записей POST и PAGE, но никак не повлияет на работу пользовательских типов записей CPT, а всё потому, что в работе функции switch_to_blog() есть несколько ограничений, и плагины – одна из таких вещей.

Итак, если кратко:

Если Вы используете мультисайт и у Вас есть пользовательские типы записей (CPT), которые регистрируются с помощью сторонних плагинов, то использование функции flush_rewrite_rules() бессмысленно!

Лучший способ

Достаточно просто удалить значение опции rewrite_rules, так как она будет автоматически сгенерирована заново при следующей загрузке сайта.

				
					$sites = get_sites( array(
    'number'  => 10000,
    'public'  => 1,
    'deleted' => 0,
) );

foreach ( $sites as $site ) {
    switch_to_blog( $site->blog_id );
    delete_option( 'rewrite_rules' );
    restore_current_blog();
}
				
			

На этом всё. Спасибо.

Оставить комментарий

Нужна помощь с WordPress WooCommerce плагинами темой оптимизацией ?

Упрощаем сложное, создаем впечатляющее!
100% без риска
Нет обязательств по найму
Бесплатная оценка
5900 ₽
Автомобильный каталог
Автомобильный WordPress шаблон на русском языке, преображающий онлайн-сервисы для автодилеров и профессионалов автобизнеса. Стильный и интуитивно понятный дизайн обеспечивает быстрый поиск автомобиля мечты

Поможем вывести Ваш бизнес на новый уровень!

Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил

Добро пожаловать!

Авторизуйтесь, чтобы продолжить

или

Забыли пароль? Восстановить

* Если аккунта у Вас еще нет, то он будет создан автоматически

Давайте составим техническое задание!
100% без риска
Нет обязательств по найму
Бесплатная оценка стоимости
Здравствуйте! Я асистент на основе искусственного интеллекта. Вы можете общаться со мной, как с человеком — задавайте вопросы, описывайте свои идеи и требования.

С удовольствием помогу вам составить техническое задание для вашего WordPress проекта. Если Вам нужна техническая поддержка по купленному у нас плагину или шаблону, то создайте тикет в личном кабинете.

Выберите подходящий вариант или опишите свою задачу в свободной форме, и я помогу вам составить четкий план действий, для оценки стоимости нашими разработчиками! 😊