/** * WordPress allows URIs with any numeric suffix, e.g.: * /canonical-page-or-postname/12345/ * This functions performs a simple check and redirects * to the canonical URI if neccessary. * * @return void */ function canonical_request() { global $page, $post; // post, page, attachment, preview if ( ! is_singular() or is_preview() ) { return; } $permalink = get_permalink(); // We don't have access to the number of sub pages here. // So we have to hack. $max_pages = substr_count( $post->post_content, '<!--nextpage-->') + 1; if ( 1 < $page and $page <= $max_pages ) { /* * Handle different permalink settings, eg: * /%year%/%postname%.html or * /%year%/%postname%/ */ $rev_perma_struct = strrev(get_option('permalink_structure')); if ( '/' != $rev_perma_struct[0] ) { $permalink .= "/$page"; } else { $permalink .= "$page/"; } } $host_uri = 'http' . ( empty ( $_SERVER['HTTPS'] ) ? '' : 's' ) . '://' . $_SERVER['HTTP_HOST']; $canonical_path = str_replace($host_uri, '', $permalink); if ( ! empty ( $_GET ) ) { global $wp; // Array $allowed = $wp->public_query_vars; $out_arr = array(); foreach ( $_GET as $k => $v ) { if ( in_array($k, $allowed ) ) { $out_arr[] = $k . ( empty ( $v ) ? '' : "=$v" ); } } if ( ! empty ( $out_arr ) ) { $canonical_path .= '?' . implode('&', $out_arr); } } if ( $canonical_path == $_SERVER['REQUEST_URI'] ) { return; } // Debug current result: #print '<pre>' . var_export($canonical_path, TRUE) . '</pre>'; // Change it or return 'false' to stop the redirect. $canonical_path = apply_filters( 'toscho_canonical_path', $canonical_path ); if ( FALSE != $canonical_path ) { header('Location: ' . $permalink, true, 301); die("<a href='$permalink'>$permalink</a>"); } return; } add_action('wp', 'canonical_request');
Это блог начинающего web разработчика. Здесь я публикую новости интернета, различные уроки и техники создания новых фич, статьи посвящены веб-разработке на PHP, HTML, CSS, JavaScript и кое что о SEO.
21 апреля 2020
WordPress: Canonical Permalink для пагинации
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий