web-dev-qa-db-ja.com

分類ページから404ページが見つけません

カスタム投稿タイプとカスタム分類が登録されています。カスタム投稿タイプは「メモリカード」と呼ばれ、分類法は「授業」です。この分類法では、「英語」と「フランス語」という2つの用語を作成しました。

このURLに行くと:

example.com/lesson/english

または

example.com/lesson/french

すべてが期待通りに進み、ページをアーカイブするか、taxonomy.phpまたはtaxonomy-english.phpを作成するかどうかを指示されます。

でも試してみると

example.com/lesson

ページが見つかりませんエラーが表示されます。

私の質問は、私がここで何か悪いことをしているのかということです。私はすべての「レッスン」のためにアーカイブページにたどり着くべきではないですか?私は私の登録簿の分類論の議論でこれらを試してみました:

        'rewrite'           => array( 'slug' => 'lesson' ),

そして

        'rewrite'           => true,

しかし、どれもうまくいきませんでした。私はこれと同じような他の質問を見たことがあるがそれらは分類学リンクよりもむしろリンクという用語に主に関係している。また、ほとんどのチュートリアルでは、分類法のリンクではなく分類法の階層について説明しています。

これは分類法を作成するためのコードです。

    $labels = array(
    'name'              => _x( 'Lessons', 'taxonomy general name', 'textdomain' ),
    'singular_name'     => _x( 'Lesson', 'taxonomy singular name', 'textdomain' ),
    'search_items'      => __( 'Search Lessons', 'textdomain' ),
    'all_items'         => __( 'All Lessons', 'textdomain' ),
    'parent_item'       => __( 'Parent Lesson', 'textdomain' ),
    'parent_item_colon' => __( 'Parent Lesson:', 'textdomain' ),
    'edit_item'         => __( 'Edit Lesson', 'textdomain' ),
    'update_item'       => __( 'Update Lesson', 'textdomain' ),
    'add_new_item'      => __( 'Add New Lesson', 'textdomain' ),
    'new_item_name'     => __( 'New Lesson Name', 'textdomain' ),
    'menu_name'         => __( 'Lessons', 'textdomain' ),
);

$args = array(
    'hierarchical'      => true,
    'labels'            => $labels,
    'show_ui'           => true,
    'show_admin_column' => true,
    'query_var'         => true,
    'rewrite'           => array( 'slug' => 'lesson'),
);

register_taxonomy( 'lesson', array( 'memory-cards' ), $args );  
2
agahi

でも試してみると

example.com/lesson

ページが見つかりませんエラーが表示されます。

私があなたの質問に私のコメントで指摘したように、それは実際にはどのように機能するのか、スラッグという用語はURLで指定される必要があります。 example.com/lesson/english(term slugはenglish)とexample.com/lesson/french(term slugはfrench)は機能しますが、example.com/lessonは機能しません(term slug not specified)。

example.com/lessonを機能させる1つの方法は、register_post_type()を介してCPT has_archiveを登録するときに memory-cards パラメータをlessonに設定することです。例えば:

register_post_type( 'memory-cards', array(
    'labels'       => array(
        'name'          => 'Memory Cards',
        'singular_name' => 'Memory Card',
    ),
    'public'       => true,
    'has_archive'  => 'lesson',
) );

しかし、これはまた、example.com/memory-cards CPTのデフォルトのアーカイブURLであるmemory-cardshas_archivetrueに設定されている場合)では、CPTアーカイブが表示されなくなることを意味します。

これを修正するため、またはデフォルトのアーカイブURLを保持するために、add_rewrite_rule()を使用してexample.com/lessonの書き換え規則を追加することができます。

register_taxonomy( 'lesson', 'memory-cards', array(
    'labels'       => array(
        'name'          => 'Lessons',
        'singular_name' => 'Lesson',
    ),
    'rewrite'      => true,
    // ...other args here...
) );

add_rewrite_rule( 'lesson/?$', 'index.php?post_type=memory-cards', 'top' );
add_rewrite_rule( 'lesson/page/(\d+)/?$', 'index.php?post_type=memory-cards&paged=$matches[1]', 'top' );

2番目の書き換え規則はexample.com/lesson/page/2/のような paged リクエストを処理します。

1
Sally CJ