就是不能让每个帖子类型的基于日期的档案工作

时间:2011-02-25 作者:grrrbytes

我原以为是wp3。1,支持归档{post\\u type}。php可以解决我的问题。然而,我仍在努力让它工作。

我想要的是:每个帖子类型都有一个自定义的基于日期的归档页面,其中显示年份和月份。单击一年或一个月后,您将转到另一个归档页面,该页面将输出相关帖子。

首先:无论如何,我不知道如何为某些帖子类型创建基于日期的归档页面。是否有某个页面模板在转到{post type}/archive时自动被调用?<?php wp_get_archives(); ?> 似乎不了解post类型。

其次,我所有的约会型永久链接都不起作用。一个简单的{post type}/2010/01给出了一个错误404。我已经创建了所有存档-。内容简单的php页面:

get_header(); ?>

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

<?php get_footer(); ?>
有什么线索吗?

2 个回复
SO网友:wyrfel

您添加了吗\'has_archive => \'my_slug\' 到您的register_post_type() 争论?这至少可以帮助你解决第二个问题。

SO网友:Manny Fleurmond

我想你现在的问题是,当你使用自定义帖子类型时,WordPress没有触及它的内置标签,如date和postname。尝试使用以下代码here:

/ 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的日期。

结束

相关推荐