it-swarm.com.de

Taxonomieseite gibt 404-Seite nicht gefunden zurück

Ich habe einen benutzerdefinierten Beitragstyp und eine benutzerdefinierte Taxonomie dafür registriert. Der benutzerdefinierte Post-Typ heißt "Speicherkarten" und die Taxonomie ist "Lektion". Für diese Taxonomie habe ich zwei Begriffe "Englisch" und "Französisch" erstellt.

Wenn ich zu dieser URL gehe:

example.com/lesson/english

oder

example.com/lesson/french

Alles läuft wie erwartet und es leitet mich zur Archivseite oder wenn ich taxonomy.php oder taxonomy-english.php erstelle.

Aber wenn ich es versuche

example.com/lesson

Ich erhalte den Fehler "Seite nicht gefunden".

Meine Frage ist, ob ich hier etwas falsch mache? Soll ich nicht für alle "Lektionen" auf die Archivseite kommen? Ich habe diese in meinem Register Taxonomie Argumente ausprobiert:

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

und

        'rewrite'           => true,

aber keiner hat funktioniert. Ich habe ähnliche Fragen gesehen, aber sie beschäftigen sich hauptsächlich mit den Begriffen Link und nicht mit dem Taxonomie-Link. Die meisten Tutorials behandeln auch die Hierarchie der Taxonomie und nicht die Verknüpfung der Taxonomie.

Dies ist der Code zum Erstellen der Taxonomie:

    $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

Aber wenn ich es versuche

example.com/lesson

Ich erhalte den Fehler "Seite nicht gefunden".

Wie ich in meinem Kommentar auf Ihre Frage hingewiesen habe, funktioniert das tatsächlich so, wobei der Begriff slug in der URL angegeben werden muss. Deshalb funktionieren example.com/lesson/english (Begriff Slug ist english) und example.com/lesson/french (Begriff Slug ist french), aber nicht example.com/lesson (Begriff Slug nicht angegeben).

Eine Möglichkeit, example.com/lesson zum Laufen zu bringen, besteht darin, den Parameter has_archive auf lesson zu setzen, wenn der CPT-memory-cards über register_post_type() registriert wird. Zum Beispiel:

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

Dies bedeutet jedoch auch, dass example.com/memory-cards, die Standard-Archiv-URL für Ihr memory-cards-CPT (wenn has_archive auf true gesetzt ist), das CPT-Archiv nicht mehr anzeigt.

Um dies zu beheben oder die Standard-Archiv-URL beizubehalten, können Sie mit add_rewrite_rule() die Umschreiberegeln für example.com/lesson wie folgt hinzufügen:

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' );

Die zweite Umschreiberegel behandelt paged Anforderungen wie example.com/lesson/page/2/.

1
Sally CJ