在模板中显示下级类别的帖子

时间:2014-06-06 作者:Owl

我有一个自定义的帖子类型,叫做freebies。我想使用档案免费赠品。php也用于子类别。我在我的函数中添加了。php如下所示:

function inherit_template() {
    if (is_category()) {
        $catid = get_query_var(\'cat\');
        $cat = &get_category($catid);
        $parent = $cat->category_parent;
        $cat = &get_category($parent);
        if ($cat->cat_ID == 45){
            include (TEMPLATEPATH . \'/archive-freebies.php\');
            exit;
        }
    }
}
add_action(\'template_redirect\', \'inherit_template\', 1);
到目前为止,它工作正常,加载了正确的存档模板,但向我显示没有帖子。我必须改变什么?我想模板也显示类别名称。我查看了条件标签,但没有自定义帖子类型的标签?

这是我的免费赠品。php

<?php get_header(); ?>   
    <section id="main">
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <article>
            <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>" data-lightbox-type="ajax"><?php the_title(); ?></a></h2>
            <div class="entry">
                <?php the_content(); ?>
            </div>
            <?php do_quickshare_output(); ?> 
        </article>
    <?php endwhile; ?>

    <div class="nav-previous alignleft backlink"><?php next_posts_link( \'Older posts\' ); ?></div>
    <div class="nav-next alignright rightlink"><?php previous_posts_link( \'Newer posts\' ); ?></div>

    <?php else : ?>

        <p><?php _e(\'Sorry, no posts matched your criteria in freebies.\'); ?></p>

    <?php endif; ?>
    </section>
    <?php get_sidebar(\'2\'); ?>
    <br style="clear:both;" />
<?php get_footer(); ?>
我还尝试了另一个模板加载功能

add_filter( \'template_include\', \'freebie_page_template\', 99 );

function freebie_page_template( $template ) {

    if ( is_post_type_archive( \'freebies\' )  ) {
        $new_template = locate_template( array( \'archive-freebies.php\' ) );
        if ( \'\' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}
但这根本不起作用

2 个回复
最合适的回答,由SO网友:Owl 整理而成

好了,我终于明白了。问题是,默认情况下,查询中不包括自定义帖子类型。这意味着,自定义帖子显示在类别和归档页面上,但不再显示在子类别上。这个have_posts() 只是空的。

要包含这些,我必须在php函数中添加以下解决方案:http://css-tricks.com/snippets/wordpress/make-archives-php-include-custom-post-types/

(如果您的菜单不见了,请参考Jon B的评论:)

这样,我就有了自定义的帖子类型的免费赠品,它们显示在存档免费赠品上。php。免费赠品子类别中的帖子显示在免费赠品类别中。将此代码添加到函数时的php模板。php

// make category use parent category template
function load_cat_parent_template($template) {

    $cat_ID = absint( get_query_var(\'cat\') );
    $category = get_category( $cat_ID );

    $templates = array();

    if ( !is_wp_error($category) )
        $templates[] = "category-{$category->slug}.php";

    $templates[] = "category-$cat_ID.php";

    // trace back the parent hierarchy and locate a template
    if ( !is_wp_error($category) ) {
        $category = $category->parent ? get_category($category->parent) : \'\';

        if( !empty($category) ) {
            if ( !is_wp_error($category) )
                $templates[] = "category-{$category->slug}.php";

            $templates[] = "category-{$category->term_id}.php";
        }
    }

    $templates[] = "category.php";
    $template = locate_template($templates);

    return $template;
}
add_action(\'category_template\', \'load_cat_parent_template\');
我不完全理解为什么会这样,因为我没有将子类别帖子显示在与父类别相同的位置,并且从模板层次结构来看,类别应该放在存档之前,但帖子现在位于自己的模板中,所以也可以。如果有人能建议一个更正确的方法,请!

我以前曾尝试将此功能更改为与存档一起使用,但没有成功。

希望这对某人有帮助

SO网友:hardik

我找了,找了,试了,终于找到了。。。。。。。。

<?php
global $wpdb;
$categories = $wpdb->get_results("SELECT $wpdb->terms.term_id AS id, name, description from $wpdb->terms INNER JOIN $wpdb->term_taxonomy ON $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id WHERE parent = \'$cat\' ORDER BY name ASC");
foreach($categories as $category) :
?>

<h2><?php echo $category->name; ?></h2>
    <ul>
    <li><a href="<?php echo get_category_link($category->id);?>"><b><?php echo $category->description; ?></b></a>
Posts on this campaign:
<?php global $post;
$myposts = get_posts("category=$category->id");
foreach($myposts as $post) : setup_postdata($post);
?>
- <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php endforeach; ?>
    </li>
    </ul> 

<?php endforeach; ?>

结束

相关推荐

Custom post types templates

我已经注册了一个名为“Services”的自定义帖子类型,但当我给这篇帖子提供模板“single Services.php”时,它不接受这个,而是选择了“homepage.php”模板,你能告诉我这个问题吗?它也没有使用“archive services.php”模板,而是使用blog模板(index.php)使现代化代码如下:add_action(\'init\', \'services_register\'); function services_register() { $