これは簡単ではありませんか?!カスタム投稿タイプ/カスタム分類パーマリンク


11

だから、これは私を完全に狂気にさせています。私はこれを修正するために何日も費やしてきましたが、これが非常に一般的なパーマリンク構造であるので、なぜこれがそんなに難しいのか理解できません!

私は何百もの回答と投稿を調べましたが、どれも問題を解決していないようです。

私はこの構造が欲しいだけです:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

だから私は以下を達成します:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

何かを試すたびに404エラーが発生するか、ページネーションが機能しません。

なぜこんなに難しいのかわかりません!

どんな助けも本当に感謝しています!

ありがとうございました

================================================== ==== ================== 追加情報 ==================

現在、次のように投稿タイプと分類法を登録しています。

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

両方を「文学」として登録すると、mysite.com / literatureページに404が表示されますが、これはパーマリンクを次のように表示します。 mysite.com/literature/books/mybook

この質問に関するアドバイスに従ってください- カスタム投稿タイプ、分類、およびパーマリンク

これを関数に追加しました:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

投稿タイプをに'slug' => 'literature/%literature_category%' 変更し、分類をに変更しました'slug' => 'literature'

これはmysite.com/literatureページネーションが機能しないことを除いて素晴らしい働きをするので、次のURLで404エラーが発生します。

mysite.com/literature/page/2/


好奇心から、これまでに何を試しましたか?
Matthew Boynes 2012年

-この答えは私に最も近いましwordpress.stackexchange.com/questions/5308/...を -しかし、それはどちらかの改ページと動作しませんでした提案プラグインでは動作しませんでした
fxfuture

かっこいい、私が尋ねてうれしいです、それは私をいくらか時間を節約しました!
Matthew Boynes 2012年

回答:


6

既に行ったように、この質問のアドバイスに従いますが、これをコードに追加します。

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

最後に、[設定]> [パーマリンク]に移動して、[保存]をクリックします。それでも機能しない場合は、パーマリンクを再度保存してください。時々私はあなたがそれらを二度救う必要があるように感じます、しかし誰が知っています。とにかく、あなたがどのように理解しているか教えてください。Computer Science Standard Answer#1が適用されることに注意してください:それは私のために機能します... ;-)

TMIの国から...

参考までに、ページがデフォルトで機能しない理由は、WordPressが文献/%literature_category%/%book%/%page%の書き換えルールを採用しているためです。したがって、デフォルトのパーマリンクには、次の順序で競合するルールがあります。

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

ここで実際に行っているのは、後者の設定を解除することでこれらの順序を変更し(それを保持できますが、その後のすべての書き換えでは、ページの読み込み時に実行する正規表現が1つ追加されます)、配列の先頭に追加します。

面白い事実:「ページ」というタイトルの「本」があり、複数のページがある場合、この順序は競合し、その後のページは機能しません。


おっと、私の構文がここで間違っていることに気づきました。おかしなことに、それは私にとってはうまくいき、私がそれを修正すると、それはうまくいきません。私はそれを守り、理解したら答えを更新します...
Matthew Boynes 2012年

ご協力ありがとうございますマシュー。試してみましたが、うまくいきませんでした。質問に情報を追加しました。
fxfuture 2012年

1
わかりました。混乱を招きました。そこに少し脳ガスがあった(最近、いくつかの脳豆があったに違いない)私の答えは更新されましたが、再びうまくいきます。パーマリンクは必ず保存してください。
Matthew Boynes、2012年

1
ああ、更新された質問を見ました。/ literature / fiction / page / 2が機能しないのではなく、/ literature / page / 2が機能しないのですか?もしそうなら、それは簡単な修正です、私たちはレベルを上げて同じことをします
Matthew Boynes 2012年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.