web-dev-qa-db-ja.com

カテゴリとページのURLが重複していると、ページではなくカテゴリが読み込められる

私は、パーマリンクhttps://example.com/serviceを持つスラッグserviceでカテゴリーを作成しました。

リンク付きのPage:https://example.com/service

カテゴリserviceには、https://example.com/service/post1のようなリンクのある投稿があります

リンクhttps://example.com/serviceはカテゴリアーカイブにリダイレクトされていますが、代わりにページをロードしたいと思います。

どうやってやるの?

2
Thien Sư

PagePageのアーカイブのURLが同じ場合は、Categoryをロードします。

これはデフォルトのWordPressの動作です:カテゴリのアーカイブとページのURLが同じ場合、WordPressはカテゴリのアーカイブではなくページをロードします。 。

そのため、WordPressの設定でこの動作を変更するプラグインがない限り、重複したURLでカテゴリアーカイブではなくページが読み込まれるはずです。

適切なURL構造を実現するには

必要なURL構造にはいくつかの作業が必要です。それで、あなたがすでにそれをしていない限り、言われたURL構造を達成するために以下の指示に従ってください:

# URL structure for Pages:
https://example.com/page-slug

これはデフォルトで起こります、あなたは何もする必要はありません。


# URL structure for Categories
https://example.com/category-slug

このため:

  1. WordPress Admin Panel MenuSettingsに移動します。
  2. .テキストフィールドに単一のドット(Category base)を入力します。
  3. クリック Save Changes ボタン。

# URL structure for Posts
https://example.com/category-slug/post-slug

このため:

  1. WordPress Admin Panel MenuSettingsに移動します。
  2. Custom Structureを選択し、/%category%/%postname%/テキストフィールドにCustom Structureを入力します。
  3. クリック Save Changes ボタン。

何らかの理由でこれから予想される結果が得られない場合は、WordPressインストールでこのURL構造を使用してください。

  1. WordPress Coreが最新バージョンに更新されました。
  2. プラグインは起動されていません
  3. 27 のようなデフォルトのテーマが有効になっています

次に、ページとカテゴリのURLが重複しているとどうなるかを確認します。

カテゴリページネーション問題の解決

あなたが この記事をチェックしてください あなたがこの種のURL構造があなたのカテゴリアーカイブページにいくつかのページネーション問題を引き起こすことをあなたは見るでしょう。これはWordPressが/page/2の部分を別のページまたは投稿として混同しているために起こります。

たとえば、serviceというカテゴリがあり、serviceカテゴリには、web developmenthostingなどの投稿があり、次のURLがあるとします。

https://example.com/service
https://example.com/service/web-development
https://example.com/service/hosting

次のように、serviceカテゴリの引数ページに複数のページがある可能性があります。

https://example.com/service
https://example.com/service/page/2
https://example.com/service/page/3

このURL構造のため、WordPressはpostカテゴリの下にスラッグserviceを持つa postをロードしようとしていると考えます。そのポストは ページ区切り付きポスト です。

そのため、serviceカテゴリアーカイブの次のページをロードする代わりに、WordPressはスラッグpageを使用してページ区切り付きの投稿をロードしようとしますが、代わりに404(page not found)エラーが発生します。

これを修正するために、あなたは次のコードで単純なプラグインを使うかもしれません:

<?php
/*
Plugin Name:  Category Pagination Fix
Plugin URI:   https://wordpress.stackexchange.com/a/308826/110572
Description:  Fix category pagination for possible conflicts with page or post url
Version:      1.0.0
Author:       Fayaz Ahmed
Author URI:   https://www.fayazmiraz.com/
*/

function wpse308326_fix_category_pagination( $query_string = array() )
{
    if( isset( $query_string['category_name'] )
            && isset( $query_string['name'] ) && $query_string['name'] == 'page'
            && isset( $query_string['page'] ) ) {
        $paged = trim( $query_string['page'], '/' );
        if( is_numeric( $paged ) ) {
            // we are not allowing 'page' as a page or post slug 
            unset( $query_string['name'] );
            unset( $query_string['page'] )  ;

            // for a category archive, proper pagination query string  is 'paged'
            $query_string['paged'] = ( int ) $paged;
        }
    }   
    return $query_string;
}
add_filter( 'request', 'wpse308326_fix_category_pagination' );
0
Fayaz