web-dev-qa-db-ja.com

投稿タイプごとに日付ベースのアーカイブを作成することはできません

私はアーカイブ - {post_type} .phpをサポートするwp3.1が私の問題を解決することを期待していました。しかし、私はまだそれを機能させるのに苦労しています。

欲しいのは、投稿タイプごとのカスタムの日付ベースのアーカイブページで、年と月が表示されます。月の年をクリックすると、関連する投稿を出力する別のアーカイブページに移動します。

まず第一に:私はとにかく特定の投稿タイプのための日付ベースのアーカイブページを作成する方法についてはわかりません。 {post-type}/archiveに移動したときに自動的に呼び出される特定のページテンプレートはありますか? <?php wp_get_archives(); ?>はポストタイプを意識していないようです。

私の日付ベースのパーマリンクの2番目にはうまくいきません。単純な{post-type}/2010/01ではエラー404が発生します。私はすべてのarchive-.phpページを単純な内容で作成しました。

get_header(); ?>

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

<?php get_footer(); ?>

どんな手掛かり?

1
grrrbytes

register_post_type()引数に'has_archive => 'my_slug'を追加しましたか?それは少なくともあなたの第二の問題を解決するのに役立つはずです。

1
wyrfel

私があなたが抱えていると思う問題は、あなたがカスタム投稿タイプを使っているとき、WordPressがそのような日付や名前などの内蔵タグに触れないことです。こちらのコード を使ってみてください

/ 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;
}

これは通常、投稿を処理するときにWordpressに組み込まれて呼び出されるフィルタですが、カスタムの投稿タイプに対しては呼び出されません。基本的には、パーマリンクで使われるタグを扱います。このコードを使用すると、CPTに日付を使用できます。

1
Manny Fleurmond