如何显示显示嵌套在分类中的自定义帖子类型的列表?

时间:2012-01-12 作者:Uffo

所以我有一个自定义的帖子类型Video 还有一种分类法叫做category 我用来将视频分组,所以我想这样列出它们:

Taxonomy NAME 1
VIDEO 1
VODEO 2

Taxonomy NAME 2
Video 1
Video 2
所以我尝试了一些方法,但没有成功,问题是对于每个视频,我也会显示分类名称,如下所示:

Taxonomy Name 1
Video 1
Taxonomy Name 1
Video 2
所以这不是我想要的,也许你们能弄明白,我做错了什么:

<?php get_header();?>
<?php
    $args = array( \'post_type\' => \'Video\');
    $loop = new WP_Query( $args );
?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
        <?php $fg = get_the_terms(get_the_ID(),\'category\'); ?>
        <?php foreach($fg as $term): ?>
                <h2><?php echo $term->name; ?></h2>
                <?php wp_reset_postdata(); ?>
                <?php
                        $posts = new WP_Query(array(\'post_type\' => \'Video\', \'category\' => $term->name) );
                        while ( $posts->have_posts() ) : $posts->the_post();
                            the_post_thumbnail();
                            ?>
                            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                            <?php
                        endwhile;
                ?>
        <?php endforeach; ?>
<?php endwhile; ?>

<?php get_footer(); ?>
如果有人能帮忙,请帮我:(我弄不到这个

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

好的,首先,我要将你的视频类别重命名为video_category 因此它与内置category.

也就是说,我能想到的最简单的方法就是用一个短代码来证明这一点。

一些初始准备,设置帖子类型(为了演示,删除callas toregister_post_typeregister_taxonomy 如果要将其粘贴到函数中。php文件),并添加短代码。

<?php
add_action(\'init\', \'wpse28770_add_types\' );
function wpse28770_add_types()
{
    register_post_type( \'video\', array( \'public\' => true, \'label\' => \'Videos\' ) );
    register_taxonomy( \'video_category\', \'video\', array( \'label\' => \'Video Category\' ) );
    add_shortcode( \'wpse28770videos\', \'wpse28770_shortcode_cb\' );
}
我们有一个快捷码回调函数,它完成了所有的工作。首先,您需要在video_category 分类学

接下来,遍历每个术语,通过tax_query 在里面get_posts. 然后循环浏览帖子并将其添加到列表中。

<?php
function wpse28770_shortcode_cb()
{
    // get the terms
    $terms = get_terms( \'video_category\' );

    // no terms?  bail.
    if( ! $terms ) return \'\';

    $out = \'\';

    // loop through the terms
    foreach( $terms as $term )
    {
        // get videos in each term
        $videos = get_posts(array(
            \'post_type\' => \'video\',
            \'tax_query\' => array(
                array(
                    \'taxonomy\'  => \'video_category\',
                    \'field\'     => \'id\',
                    \'terms\'     => $term->term_id,
                    \'operator\'  => \'IN\'
                )
            )
        ));

        // no videos? continue!
        if( ! $videos ) continue;
        $out .= \'<h2>\' . esc_html( $term->name ) . \'</h2>\';
        $out .= \'<ul>\';
        // loop through the video posts
        foreach( $videos as $v )
        {
            $link = sprintf( 
                \'<a href="%s">%s</a>\', 
                esc_url( get_permalink( $v ) ),
                esc_html( $v->post_title )
            );
            $out .= \'<li>\' . $link . \'</li>\';
        }
        $out .= \'</ul>\';
    }
    return $out;
}
您只需在functions.php 文件,并调用任何你喜欢的模板。。。

<?php echo wpse28770_shortcode_cb(); ?>
这就是整件事as a plugin. 希望这至少能让你开始!

结束

相关推荐