it-swarm.com.de

Slug für benutzerdefiniertes Posttyp-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. Momentan werden alle Projekteinzelbeiträge wie folgt mit einem Slug angezeigt: mysite.com/projects/project-title, aber wenn ich zu mysite.com/projects gehe, erhalte 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);
    }
2
urok93

Nichts scheint falsch zu sein - (und ich nahm an, Sie haben Ihre Permalink-Struktur gespeichert, um die Umschreiberegeln zu löschen, wie in den Kommentaren vorgeschlagen? :)).

Ich würde empfehlen, dieses Plug-in zu verwenden, um Probleme mit Ihrer URL-Weiterleitung zu ermitteln: http://wordpress.org/extend/plugins/monkeyman-rewrite-analyzer/ - Aktualisieren Sie Ihre Frage mit Ihren Ergebnissen, und es kann sein, dass jemand sie aktualisiert in der Lage, eine Lösung anzubieten

Allerdings (aber dies ist wahrscheinlich nicht die Ursache für Ihr Problem). Sie sollten den Namen des Beitragstyps nicht übersetzen lassen:

register_post_type('project',$args);

anstatt

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

Übersetzungen sind zum Nutzen des Benutzers - und sollten daher nur auf Etiketten stehen - die internen Namen von WordPress sollten nicht von der Übersetzung abhängen.

3
Stephen Harris

Der Code, den Sie eingefügt haben, scheint nicht falsch zu sein. Was Sie jedoch verlangen, funktioniert auch mit 'rewrite' => true.

http://codex.wordpress.org heißt es:

has_archive (Boolescher Wert oder Zeichenfolge) (optional) Aktiviert Post-Type-Archive. Verwendet standardmäßig $ post_type als Archiv-Slug.

Voreinstellung: false

Hinweis: Erzeugt die richtigen Umschreiberegeln, wenn das Umschreiben aktiviert ist. Verwenden Sie auch Rewrite, um> den verwendeten Slug zu ändern.

Eine Lösung für Ihr Problem könnte sein, dass die Vorlage für den benutzerdefinierten Beitragstyp nicht funktioniert oder nicht erstellt wurde. Sie können entweder versuchen, den folgenden Code zu Ihrer functions.php- oder plugins-Funktion hinzuzufü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');

erstellen Sie auf Ihren Seiten 'single-projects.php'/'archive-projects.php' eine Schleife/query/get_pages (je nachdem, was Sie bevorzugen), um den Inhalt einzublenden 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 '<div class="content">';
        echo $content;
        echo '</div>';      

    }

Hoffe das hilft!

1
Terry Barriff