Intereting Posts
«Срок действия запроса истек» с плагином «Сделайте свой сайт социальным» (Gigya) Изменить метку поля заголовка для сообщений в бэкэнд Почему media_sideload_image () не работает локально? WordPress4.1.15 Ссылки на панели мониторинга не работают Скрыть комментарии к сообщениям при отображении через WP_Query Как использовать этот класс translate для перевода всего содержимого навалом? Отображать пользовательские сообщения произвольно в пользовательском архиве таксономии Есть ли способ внедрить форму Документов Google на странице без использования плагинов? Как удалить сообщения старше одного года с помощью метаданных, вложений и файлов? Как добавить пользовательский CSS в Media Thickbox? Рабочий плагин нарушает правила Создание архива с использованием пользовательской таксономии Как удалить подписчиков из публикации Author Drop Down Как я могу заставить цикл не считать специальные форматы сообщений по отношению к столбцу? Как создать тест, который вызывает is_front_page в phpunit?

перенаправлять страницы без содержимого, вместо ошибки 404, используя max_num_posts?

У меня есть сайт, который изменил структуру разбиения на страницы, что привело к огромному количеству ошибок 404 (больше сообщений отображается на странице, чем раньше), поэтому есть много страниц, которые были проиндексированы в поисковых системах, ,

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

Однако я не знаю, как – или, точнее, когда использовать эту функцию. Я предполагаю, что у WordPress уже есть функция, которая проверяет эту информацию, которая, в свою очередь, запускает 404, поэтому, возможно, мне нужно настроить ее как фильтр на существующую подключаемую функцию?

Функция до сих пор

redirect_tags(){ if (is_main_query() && !is_singular() && is_paged()) {global $wp_query; $paged = intval(get_query_var('paged')); $max_page = $wp_query->max_num_pages; if($max_page < $paged){ echo 'page is greater than max';} }} 

Если остальная часть вашей функции работает, вам просто нужно добавить вызов в wp_safe_redirect и перехватить все это в WordPress . Я думаю, что первый крюк, который будет иметь заполненный $wp_querywp . Поэтому измените последнюю часть своей функции …

 if($max_page < $paged){ wp_safe_redirect(get_bloginof('url'),'301'); } 

А затем добавьте следующую функцию (вне).

add_action('wp','redirect_tags');

Я думаю, что это нужно. Вы можете настроить бесконечные петли перенаправления, поэтому будьте осторожны.

Изменить: проблема заключается в is_paged() в верхней части вашей функции. Если вы пытаетесь получить доступ к странице страницы, которая не существует, is_paged() возвращает false и ни одна из остальных функций не запускается. Удалите эту проверку и привяжите к template_redirect . Я тестировал это, и он работает. Другими словами…

 function redirect_tags() { if (is_main_query() && !is_singular() ) { global $wp_query; $paged = intval(get_query_var('paged')); $max_page = $wp_query->max_num_pages; if ( ($max_page < $paged) ) { wp_safe_redirect(get_bloginfo('url'),'301'); } } } add_filter('template_redirect','redirect_tags');