Slug für benutzerdefinierte Post-Typ-Archiv

Ich habe einen neuen benutzerdefinierten Beitragstyp “Projekte” erstellt und möchte, dass das Archiv aller Beiträge dieses Typs unter mysite.com/projects verfügbar ist. Im Moment werden alle Projekt-Einzelposts mit einem Slug wie folgt angezeigt mysite.com/projects/project-title, aber wenn ich zu mysite.com/projects gehe, bekomme ich einen 404.

So habe ich den benutzerdefinierten Beitragstyp erstellt:

/* Create the Project Custom Post Type ------------------------------------------*/ function create_post_type_project() { $labels = array( 'name' => __( 'Projects' ), 'singular_name' => __( 'Project' ), 'add_new' => __('Add New'), 'add_new_item' => __('Add New Project'), 'edit_item' => __('Edit Project'), 'new_item' => __('New Project'), 'view_item' => __('View Project'), 'search_items' => __('Search Project'), 'not_found' => __('No project found'), 'not_found_in_trash' => __('No project found in Trash'), 'parent_item_colon' => '' ); $args = array( 'labels' => $labels, 'public' => true, 'exclude_from_search' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => null, // Uncomment the following line to change the slug; // You must also save your permalink structure to prevent 404 errors 'rewrite' => array( 'slug' => 'projects' ), 'has_archive' => true, 'supports' => array('title','editor','thumbnail'), ); register_post_type(__( 'project' ),$args); } 

Solutions Collecting From Web of "Slug für benutzerdefinierte Post-Typ-Archiv"

Nichts scheint falsch zu sein – (und ich nahm an, dass du deine Permalink-Struktur gespeichert hast, um die Rewrite-Regeln zu spülen, wie es in den Kommentaren heißt? :)).

Ich würde empfehlen, dieses Plug-In zu verwenden, um Probleme mit Ihrer URL-Umleitung zu ermitteln: http://wordpress.org/extend/plugins/monkeyman-rewrite-analyzer/ – aktualisieren Sie Ihre Frage mit Ihren Ergebnissen und jemand kann möglicherweise eine anbieten Lösung

Jedoch (aber das ist wahrscheinlich nicht die Ursache Ihres Problems)., Sollten Sie den Namen des Post-Typs nicht übersetzen, haben Sie:

 register_post_type('project',$args); 

Anstatt von

 register_post_type(__( 'project' ),$args); 

Übersetzungen sind zum Vorteil des Benutzers – und so sollte nur auf Etiketten sein – die WordPress internen Namen sollten nicht von der Übersetzung abhängen.

Der Code, den Sie eingefügt haben, scheint nicht falsch zu sein, aber das, wonach Sie fragen, funktioniert auch mit 'rewrite' => true

http://codex.wordpress.org besagt:

has_archive (boolean oder string) (optional) Aktiviert Post-Typ-Archive. Verwendet $ post_type standardmäßig als Archiv-Slug.

Standard: falsch

Hinweis: Generiert die richtigen Umschreibungsregeln, wenn das Umschreiben aktiviert ist. Verwenden Sie auch das Umschreiben, um den verwendeten Slug zu ändern.

Eine Lösung für Ihr Problem könnte darin bestehen, dass die Vorlage für den benutzerdefinierten Post-Typ nicht funktioniert oder nicht erstellt wurde. Sie können entweder den folgenden Code zu Ihrer function functions.php oder plugins hinzufügen:

 function _post_type_template_smart(){ global $post; $single_template_name = 'single-projects.php'; $archive_template_name = 'archive-projects.php'; if ( is_single() && 'projects' == get_post_type() ){ $template = locate_template(array($single_template_name), true); if(empty($template)) { include(PLUGIN_DIR . 'template/' . $single_template_name); exit(); } }else if( is_archive() && 'projects' == get_post_type() ){ $template = locate_template(array($archive_template_name), true); if(empty($template)) { include(PLUGIN_DIR . 'template/' . $archive_template_name); exit(); } } } add_filter('template_redirect', '_post_type_template_smart'); 

und erstellen Sie in Ihren ‘single-projects.php’ / ‘archive-projects.php’ Seiten eine loop / query / get_pages (was immer Sie bevorzugen), um den Inhalt einzubringen und anzuzeigen:

  $args = array( //'child_of' => 0, 'sort_order' => 'ASC', 'sort_column' => 'post_modified', 'hierarchical' => 1, 'parent' => 0, 'post_type' => 'projects', 'post_status' => 'publish' ); $pages = get_pages( $args ); foreach ( $pages as $project ){ $project_id = $project->ID; $project_link = get_page_link($project->ID); $project_title = $project->post_title; $content = $project->post_content; $author = $project->post_author; $posted_on = $project->post_date; if(empty($content)){ $content = 'There is no description for this package'; } echo '
'; echo $content; echo '
'; }

Hoffe das hilft!