it-swarm.com.de

es ist einfach nicht möglich, datumsbasierte Archivierung pro Beitragstyp zum Laufen zu bringen

Ich hatte erwartet, dass wp3.1 mit der Unterstützung für archive- {post_type} .php meine Probleme lösen würde. Ich kämpfe jedoch immer noch darum, es zum Laufen zu bringen.

Was ich möchte, ist: eine benutzerdefinierte datumsbasierte Archivseite pro Beitragstyp, auf der Jahre und Monate angezeigt werden. Wenn Sie auf ein Jahr eines Monats klicken, gelangen Sie zu einer anderen Archivseite, auf der die relevanten Beiträge ausgegeben werden.

Zuallererst: Ich bin mir nicht sicher, wie ich eine datumsbasierte Archivseite für bestimmte Post-Typen erstellen soll. Gibt es eine bestimmte Seitenvorlage, die beim Aufrufen von {post-type}/archive automatisch aufgerufen wird? <?php wp_get_archives(); ?> scheint keine Post-Type-Erkennung zu haben.

Zweitens funktionieren meine datumsbasierten Permalinks nicht. Eine einfache {post-type}/2010/01 gibt einen Fehler404. Ich habe alle meine Archiv-.php-Seiten mit einfachem Inhalt erstellt:

get_header(); ?>

        <section id="content" class="hfeed">
<?php get_template_part('posts'); ?>
        </section>

<?php get_footer(); ?>

Irgendeine Ahnung?

1
grrrbytes

Haben Sie 'has_archive => 'my_slug' zu Ihren register_post_type()-Argumenten hinzugefügt? Das sollte dir zumindest bei deinem zweiten Problem helfen.

1
wyrfel

Das Problem, von dem ich denke, dass Sie es haben, ist, dass WordPress die eingebauten Tags wie Datum und Postname nicht berührt, wenn Sie benutzerdefinierte Post-Typen verwenden. Versuchen Sie es mit diesem Code, den Sie hier finden :

/ Add filter to plugin init function
add_filter('post_type_link', 'translate_permalink', 10, 3); 
// Adapted from get_permalink function in wp-includes/link-template.php
function translate_permalink($permalink, $post_id, $leavename) {
    $post = get_post($post_id);
    $rewritecode = array(
        '%year%',
        '%monthnum%',
        '%day%',
        '%hour%',
        '%minute%',
        '%second%',
        $leavename? '' : '%postname%',
        '%post_id%',
        '%category%',
        '%author%',
        $leavename? '' : '%pagename%',
    );

    if ( '' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft')) ) {
        $unixtime = strtotime($post->post_date);

        $category = '';
        if ( strpos($permalink, '%category%') !== false ) {
            $cats = get_the_category($post->ID);
            if ( $cats ) {
                usort($cats, '_usort_terms_by_ID'); // order by ID
                $category = $cats[0]->slug;
                if ( $parent = $cats[0]->parent )
                    $category = get_category_parents($parent, false, '/', true) . $category;
            }
            // show default category in permalinks, without
            // having to assign it explicitly
            if ( empty($category) ) {
                $default_category = get_category( get_option( 'default_category' ) );
                $category = is_wp_error( $default_category ) ? '' : $default_category->slug;
            }
        }

        $author = '';
        if ( strpos($permalink, '%author%') !== false ) {
            $authordata = get_userdata($post->post_author);
            $author = $authordata->user_nicename;
        }

        $date = explode(" ",date('Y m d H i s', $unixtime));
        $rewritereplace =
        array(
            $date[0],
            $date[1],
            $date[2],
            $date[3],
            $date[4],
            $date[5],
            $post->post_name,
            $post->ID,
            $category,
            $author,
            $post->post_name,
        );
        $permalink = str_replace($rewritecode, $rewritereplace, $permalink);
    } else { // if they're not using the fancy permalink option
    }
    return $permalink;
}

Dies ist ein Filter, der normalerweise in Wordpress integriert ist und beim Bearbeiten von Posts aufgerufen wird, jedoch nicht für benutzerdefinierte Post-Typen aufgerufen wird. Grundsätzlich behandelt es Tags, die mit Permalinks verwendet werden. Mit diesem Code sollten Sie Daten für Ihr CPT verwenden können.

1
Manny Fleurmond