web-dev-qa-db-ja.com

カスタムパラメータ構造はページングで404になる

パーマリンクの問題があります。あなたの情報のために、ウェブサイト内にいくつかの異なるカテゴリがあり、一つのカテゴリにたくさんの投稿があります。

私のパーマリンク設定は:

カスタム構造:/%category%/%postname%/

カテゴリーベース:。

この設定を保存した後、私のURLは

www.mydomain.com/category-slug-name/

の代わりに

www.mydomain.com/category/category-slug-name/

私は ブログページを最大で表示するように設定しました:8件の投稿 設定>閲覧 の下カテゴリページに8を超える投稿があると、ページ区切りが表示されます。

"page 2" をクリックしたところ、www.mydomain.com/category-slug-name/page/2/によって404エラーページが表示されました。

もともと、カテゴリ "page2"のURLはwww.mydomain.com/category/category-slug-name/page/2/ですが、元のURLとしてURL内に "カテゴリ"がある場合は正常に機能します。それ以外の場合は、404エラーページになります。

私の主な関心事は、カテゴリがURLに表示されないようにすることです。しかし、選択した投稿を表示しているときにカテゴリのスラッグ名をURLに表示する必要があります。そして "/ page/2 /"とそれ以外はうまくいきます。

この問題が推奨されるプラグインで解決されないことを願っています。なぜなら、私はウェブサイトが重すぎないようにしたいのです。

助言がありますか?

5
Jornes

それは全く普通の振る舞いです。カテゴリベースを削除したい場合は、私が言わなければならない単純なルールではなく、カスタムの書き換えルールを作成する必要があります。私の考えでは、カテゴリベースを削除すると、SEOやサイトナビゲーションに有利になることはないため、リクエストごとに余分な仕事が必要になります。 YoastによるWordPres SEOのようないくつかの人気のあるプラグインは過去にこのオプションを持っていてしばらく前にそれを削除しました。しかしこれは単なる意見です。

カテゴリベースを.(dot)に設定し、このコードをあなたのテーマのfunctions.phpに、あるいはもっと良いものをプラグインに入れて、書き換えルールをフラッシュしてください( Daily Web Kitのポスト

add_filter( 'category_rewrite_rules', 'vipx_filter_category_rewrite_rules' );
function vipx_filter_category_rewrite_rules( $rules ) {
    $categories = get_categories( array( 'hide_empty' => false ) );

    if ( is_array( $categories ) && ! empty( $categories ) ) {
        $slugs = array();
        foreach ( $categories as $category ) {
            if ( is_object( $category ) && ! is_wp_error( $category ) ) {
                if ( 0 == $category->category_parent ) {
                    $slugs[] = $category->slug;
                } else {
                    $slugs[] = trim( get_category_parents( $category->term_id, false, '/', true ), '/' );
                }
            }
        }

        if ( ! empty( $slugs ) ) {
            $rules = array();

            foreach ( $slugs as $slug ) {
                $rules[ '(' . $slug . ')/feed/(feed|rdf|rss|rss2|atom)?/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
                $rules[ '(' . $slug . ')/(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
                $rules[ '(' . $slug . ')(/page/(\d)+/?)?$' ] = 'index.php?category_name=$matches[1]&paged=$matches[3]';
            }
        }
    }
    return $rules;
}
10
cybmeta

これは私のために働きました、wordpressのあなたのfunctions.phpページでこの機能を追加して、この機能はあなたの好きなものを変えます:

Previous: http://www.example.com/advice/category/category_name/page/3/

宛先: http://www.example.com/advice/category_name/page/3/

function remove_category_slug_url($query_string){ 
    if ($query_string['name'] == 'page' && isset($query_string['page'])) {
        unset($query_string['name']);
        list($delim, $page_index) = explode('/', $query_string['page']);
        $query_string['paged'] = $page_index;
    }      
    return $query_string;
}
add_filter('request', 'remove_category_slug_url');
2
Avinash Shukla
function 
 remove_category_slug_url($query_string){ 
if ($query_string['name'] == 'page' && isset($query_string['page'])) {
    unset($query_string['name']);
    list($delim, $page_index) = split('/', $query_string['page']);
    $query_string['paged'] = $page_index;
}      
return $query_string;
 }
 add_filter('request', 'remove_category_slug_url');

これは私のために働いた、wordpressのあなたのfunctions.phpにこの機能コードを追加する

注:設定 - >固定リンクに行き、 "保存"をクリックしてください。これにより、WordPressは新しいルールを考慮して書き換えルールを再構築します。

1
ghanshyam v

この問題を抱えている他の誰かにとって、ページ付けされたページへのリダイレクトで、私にとっては以下がうまくいった:

パーマリンクで、/%category%/%postname%/を変更してください。

/%category%/%postname%

末尾のスラッシュ "/"が削除されていることに注目してください。

ロブ

0
robireland

これは私のために働きました。

function remove_page_from_query_string($query_string){ 
   if ($query_string['name'] == 'page' && isset($query_string['page'])) {
       unset($query_string['name']);
       // 'page' in the query_string looks like '/2', so i'm spliting it out
      list($delim, $page_index) = split('/', $query_string['page']);
      $query_string['paged'] = $page_index;
   }      
   return $query_string;
} 
add_filter('request', 'remove_page_from_query_string');
0
Jhony Penagos