web-dev-qa-db-ja.com

ページ区切りを削除した後、ページ付き単一投稿がメインのURLにリダイレクトされない

私が使った

<!--nextpage-->

Codex )いくつかの単一の投稿をページ分割(分割)します。今私は記事からすべてのnextpageのhtmlパーツを削除しました。外転は正常に見えます。残念ながら古いURLは好きです

sample.com/tipps-for-me/2

sample.com/tipps-for-me/3

sample.com/tipps-for-me/4

...

メインのURL sample.com/tipps-for-meにリダイレクトしないでください。代わりに、sample.com/tipps-for-mesample.com/tipps-for-me/2sample.com/tipps-for-me/3などを見るときに、メインのURL(sample.com/tipps-for-me/4)とまったく同じ(全体の)内容を表示します。

リダイレクトプラグインやリダイレクト機能はどこにも使っていません。どのようにこの問題を解決するのですか?

3
NewUser

編集

私はあなたの問題に対する可能な解決策で遊んだ。以下を試すことができます

  • 次のようにして、template_redirectに独自のアクションを追加します。

    • 現在のリクエストがページングされた単一の投稿ページであり、投稿コンテンツに<!--nextpage-->タグがないことを確認してください。

    • すべてが私たちの状態でチェックアウトした場合は、投稿の最初のページに手動でリダイレクトします。

これがコードです:

add_filter( 'template_redirect', function()
{
    if (    is_single() 
         && false === strpos( get_queried_object()->post_content, '<!--nextpage-->' )
         && get_query_var('page') 
    ) {
        wp_redirect( get_permalink( get_queried_object_id() ) );
        die;
    }
});

重要なメモ

content_paginationフィルタを使用したとしても、これは現在のページングされた単一の投稿ページを最初のページにリダイレクトします。このコードでは<!--nextpage-->タグのみが考慮されるため、<!--nextpage-->タグ以外の方法で単一の投稿にページ番号を付けないようにする必要があります。

編集終了

もともとの答え

これを機能させるには、これには多くの調査と多くのテスト、コードの批判と書き換えが必要になるでしょう。

残念ながらsample.com/tipps-for-me/4のようなURLを持っているとき、WordPressはバージョン3.3.1でWordPressに出会った時から覚えている限りずっとそのURL構造が有効であると認めています。投稿が1ページしかない場合でもこれは新しいことではありません。

WordPress 4.4では、新しいcontent_paginationフィルタが追加され、次のコードがredirect_canonicalに追加されました。

$next = '<!--nextpage-->';
if ( $p && false !== strpos( $p->post_content, $next ) && ! empty( $this->query_vars['page'] ) ) {
    $page = trim( $this->query_vars['page'], '/' );
    $success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
}

これが成功するのは、投稿に<!--nextpage-->タグがある場合、<!--nextpage-->タグの後の最後のページの後のすべてのページが404になり、最初のページにリダイレクトされることです。そのページがsample.com/tipps-for-me/4タグの後の最後のページの後のページである場合、これは本当にあなたが<!--nextpage-->のようなURLで成功する唯一の機会です。 <!--nextpage-->タグを削除しても、WordPress 4.4以前のようにリダイレクトされることなく、任意のURLを正しく入力できます。

しかし、このコードは、私が(未解決の未解決のtracチケット を発生させた他の問題を引き起こします。そして私と@ birgireの間で、1週間か2週間前に次の質問でこの問題を処理しました。

前述のtracチケットで、1つの投稿でページネーションを処理するための確実な解決策が見つかるまで、新しい問題を回避するためにredirect_canonical()からコードを削除するように依頼しました。

content_paginationタグがあってもなくてもフィルターを通して追加されたページを正しく処理する方法を見つける必要があるので、今これが非常に困難になっているのは新しい<!--nextpage-->フィルターであると思います。もう1つの問題は、WordPress 4.4より前のバージョンでは、the_postタグに加えて<!--nextpage-->フィルタを使用して単一の投稿にページを追加していたため、まだ残っているサイトを壊さないように処理する問題がさらに増えていることです。古い有効な方法に頼る

結論へ

近い将来、これに対する解決策は確実にないでしょう。無効な用語または分類法、空の検索送信、またはWP_Query内の用語名のサニタイズに関してtax_queryによって返されるすべての投稿のように存在する他の多くのバグと同様に、これらの問題を解決する具体的な解決策はありません。私の賭けは、これらの問題のいくつかは決して修正されず、日の終わりまで残るだろうということです。

SEOの観点からは、影響はありませんので、心配することはありません。

4
Pieter Goosen