循环访问多个自定义分类术语并显示自定义帖子类型的帖子

时间:2013-02-10 作者:Nubster

我正在使用主题中骨骼主题中的自定义帖子类型。在那里,我想创建一个链接列表,因此我创建了一个自定义的帖子类型,称为links。

此自定义帖子类型具有自定义分类法,称为links\\u categories。现在,我想在一个页面上显示所有链接,如下所示:

链接类别1

第1篇第2篇

第1篇第2篇

Loop through custom taxonomies and display posts

Custom post type multiple loop by taxonomy term

奇怪的是,我对这两个版本都有同样的问题。看起来WP\\u Query没有得到任何帖子-我只得到了自定义类别术语的slug。

以下是我目前的情况:

<?php get_header(); ?>

        <div id="content">

            <div id="inner-content" class="wrap clearfix">

                <div id="main" class="eightcol first clearfix" role="main">

                    <h1 class="archive-title h2"><?php post_type_archive_title(); ?></h1>

                    <?php
                        $post_type = \'links\';

                        // Get all the taxonomies for this post type
                        $taxonomies = get_object_taxonomies( (object) array( \'post_type\' => $post_type ) );

                        foreach( $taxonomies as $taxonomy ) : 

                            // Gets every "category" (term) in this taxonomy to get the respective posts
                            $terms = get_terms( $taxonomy );

                            foreach( $terms as $term ) : 

                                $wp_query = new WP_Query( array(
                                    \'taxonomy\' => $taxonomy,
                                    \'term\' => $term->slug,
                                    \'posts_per_page\' => \'-1\'
                                    )
                                );

                                if( $wp_query->have_posts() ) :

                                    while( $wp_query->have_posts() ) : $wp_query->the_post(); ?>

                                        <article id="post-<?php the_ID(); ?>" <?php post_class(\'clearfix\'); ?> role="article">

                                            <header class="article-header">


                                            </header> <!-- end article header -->

                                            <section class="entry-content clearfix">

                                                <div class="threecol first">
                                                    <?php // show the post thumbnail
                                                    if ( has_post_thumbnail() ) { ?>

                                                        <a class="fadeit" href="<?php the_permalink(); ?>">
                                                            <?php the_post_thumbnail(); ?>
                                                        </a>

                                                    <?php } ?>
                                                </div>

                                                <div class="ninecol">
                                                    <strong><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></strong>
                                                    <?php the_content(); ?>
                                                </div>

                                            </section> <!-- end article section -->

                                            <footer class="article-footer">

                                            </footer> <!-- end article footer -->

                                        </article> <!-- end article --> <?php

                                    endwhile;

                                    else : ?>

                                        <article id="post-not-found" class="hentry clearfix">
                                            <header class="article-header">
                                                <h1><?php _e("Oops, Post Not Found!", "bonestheme"); ?></h1>
                                            </header>
                                            <section class="entry-content">
                                                <p><?php _e("Uh Oh. Something is missing. Try double checking things.", "bonestheme"); ?></p>
                                            </section>
                                            <footer class="article-footer">
                                                <p><?php _e("This is the error message in the custom posty type archive template.", "bonestheme"); ?></p>
                                            </footer>
                                        </article> <?php

                                endif;

                            endforeach;

                        endforeach;
                    ?>

                </div> <!-- end #main -->

                <?php get_sidebar(); ?>

            </div> <!-- end #inner-content -->

        </div> <!-- end #content -->

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

如果你看你的var_dump, 接近尾声时,您将看到正在使用的实际查询。

SELECT wp_posts.* 
FROM wp_posts 
INNER JOIN wp_term_relationships 
ON (wp_posts.ID = wp_term_relationships.object_id) 
WHERE 1=1 
AND ( wp_term_relationships.term_taxonomy_id IN (93) ) 
AND wp_posts.post_type IN (\'post\', \'page\', \'attachment\') 
AND (wp_posts.post_status = \'publish\' 
    OR wp_posts.post_author = 1 
    AND wp_posts.post_status = \'private\') 
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC
您尚未告知查询查看您的自定义帖子类型。请注意wp_posts.post_type IN (\'post\', \'page\', \'attachment\')? 这在您的代码中也很明显,但直到看到var_dump :(

您需要更改查询,以便搜索自定义类型,并且关闭“分类法”查询。

$wp_query = new WP_Query( 
    array(
       \'post_type\' => $post_type, // should be \'links\', correct?
       $taxonomy => $term->slug,
       \'posts_per_page\' => \'-1\'
    )
);
或。。。

$wp_query = new WP_Query( 
    array(
       \'post_type\' => $post_type, // should be \'links\', correct?
       \'tax_query\' => array(
          array (
            \'taxonomy\' => $taxonomy,
            \'field\' => \'slug\',
            \'term\' => $term->slug,
          )
       ),
       \'posts_per_page\' => \'-1\'
    )
);
我正在努力,但我想那会成功的。我必须在我的数据库中设置很多东西来实际测试它——post类型、术语、添加一些数据等等——但这看起来是对的。如果它关闭了,希望它不会太坏。

你知道这不会很好地扩展吗?对于嵌套循环和多个查询,这不是非常有效,如果分类法变得非常大,可能会变得非常缓慢。

参考号:http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

结束

相关推荐

Multiple loops are not reset

我可爱的同事们再次设计了一款让我很难在Wordpress中找到它的东西。令人惊讶的是,这是我以前做过多次的事情;在一个页面上有最近的帖子和页面内容。主页是一个页面。在页面内容上方有三篇最近的帖子。对于帖子,我需要在<!--more--> 标签这个循环似乎工作得很好。稍后,在模板中,我循环查看实际页面内容。无论我做什么,它总是给我不可靠的结果。这是我的索引的精简版本。php/页。php模板(它们恰好相同):<div id=\"content\"> <?php g