перенаправлять страницы без содержимого, вместо ошибки 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';} }} 

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

Если остальная часть вашей функции работает, вам просто нужно добавить вызов в 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');