从分配给由wp_Query循环基于另一个分类显示的帖子链接的自定义分类中添加术语名称

时间:2014-08-18 作者:Sm00k

我已经注册了一个自定义帖子类型;“动物”;还有两种自定义分类法(“脊椎动物”和“类型”)分配给它,有自己的特定术语,用于;脊椎动物“;它将是“;哺乳动物“;和;爬行动物“;,“和”;“类型”;它将是“;“水类型”;和;接地类型;。

通过使用page。php我想显示所有自定义帖子(动物)的列表,这些帖子按照分配给“脊椎动物”自定义分类法的术语进行排序,在这里,我使用以下代码成功:

<?php
        $post_type = \'animals\';
        $tax = \'vertebrate\';
        $tax_terms = get_terms($tax);

        if ($tax_terms) {
          foreach ($tax_terms  as $tax_term) {
            $args=array(
              \'post_type\'       => $post_type,
              "$tax"            => $tax_term->slug,
              \'post_status\'     => \'publish\',
              \'posts_per_page\'  => -1,
              \'caller_get_posts\'=> 1,
              \'orderby\'         => \'title\',
              \'order\'           => \'ASC\'                    
            );

            $my_query = null;
            $my_query = new WP_Query($args);

            if( $my_query->have_posts() ) {

              echo \'<h2>\'. $tax_term->name .\'</h2>\';

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

                <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
                
<?php

              endwhile;
            }
            wp_reset_query();
          }
        }
?>
这给了我类似的东西:

哺乳动物:牛;狗;海豚;虎鲸;爬行动物:蜥蜴;海龟;但是,我也想在前面的列表中显示;“类型”;通过在帖子链接后简单地返回其名称,每个帖子都被分配到了分类法(脊椎动物分类法中的术语除外)。

我正在努力实现这样的目标:

哺乳动物:

  • 奶牛(地面型)
  • 狗(地面型)
  • 海豚(水型)
  • 虎鲸(水型)
  • 爬行动物:
    • 蜥蜴(地面型)
    • 海龟(水型)
      • 我完全被困于此,而且我对WordPress和PHP的知识几乎为零,所以我很乐意接受任何帮助这件事。

        更新我的朋友帮我解决了这个问题。它应该与此配合使用:

                    <?php
        
                $post_type = \'animals\';
                $tax = \'vertebrate\';
                $tax_terms = get_terms($tax);
                if ($tax_terms) {
                  foreach ($tax_terms  as $tax_term) {
                    $args=array(
                      \'post_type\' => $post_type,
                      "$tax" => $tax_term->slug,
                      \'post_status\' => \'publish\',
                      \'posts_per_page\' => -1,
                      \'caller_get_posts\'=> 1,
                      \'orderby\'        => \'title\',
                      \'order\'          => \'ASC\'                 
                    );
        
                    $my_query = null;
                    $my_query = new WP_Query($args);
                    if( $my_query->have_posts() ) {
                        
                      echo \'<h2>\'. $tax_term->name .\'</h2>\';
                      while ($my_query->have_posts()) : $my_query->the_post(); ?>
                        <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                        <?php 
                        setup_postdata( $post );
                        $terms = wp_get_post_terms( $post->ID, \'type\');
                        echo \'<span>\'. ($terms[0]->name) .\'</span></p>\'; ?>
                        
                        <?php
                      endwhile;
                    }
                    wp_reset_query();
                  }
                }
                ?>
        

1 个回复
SO网友:Krzysiek Dróżdż

像这样的事情应该会有帮助:

<?php
    $post_type = \'animals\';
    $tax = \'vertebrate\';

    $tax_terms = get_terms($tax);

    if ( $tax_terms ) {
        foreach ($tax_terms as $tax_term) {
            $args = array(
                \'post_type\' => $post_type,
                "$tax" => $tax_term->slug,
                \'post_status\' => \'publish\',
                \'posts_per_page\' => -1,
                \'caller_get_posts\' => 1,
                \'orderby\' => \'title\',
                \'order\' => \'ASC\'                 
            );

            // $my_query = null;  <- REMOVE THIS, YOU DON\'T NEED TO NULL VARIABLE BEFORE ASSIGNING IT\'S VALUE

            $my_query = new WP_Query($args);
        ?>

            <?php if ( $my_query->have_posts() ) : ?>
                <h2><?php echo esc_html($tax_term->name); ?></h2>\'; <?php // <- YOU SHOULD ESCAPE PRINTED VALUES ?>
                <ol>
                <?php while ($my_query->have_posts()) : ?>
                    $my_query->the_post(); ?>
                    <li>
                        <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                        <?php 
                            // setup_postdata( $post ); <- THERE IS NO NEED TO SETUP_POSTDATA HERE (YOU\'VE ALREADY CALLED the_post() ON QUERY
                            $type_terms = wp_get_post_terms( $post->ID, \'type\');
                            if ( $type_terms ) {
                                echo \'<span>(\'. esc_html($terms[0]->name) .\')</span>\';
                            }
                        ?>
                    </li>
                <?php endwhile; ?>
                </ol>
            <?php endif; ?>
        <?php
        // wp_reset_query(); <- YOU DON\'T CHANGE GLOBAL $wp_query, SO THERE IS NO NEED TO RESET QUERY (ESPECIALLY DON\'T DO THIS FOR EACH $tax_term
        }
    }
    // BUT YOU DO CHANGE GLOBAL $post, SO YOU SHOULD RESET IT\'S VALUE TO BE COMPATIBLE WITH PLUGINS AND SO ON
    wp_reset_postdata();
?>
在这种情况下,有序列表(OLs)比段落(P)要好得多(因为这些是按名称排序的动物列表)。

结束

相关推荐

Taxonomy term count

我有一个名为“资源”的自定义帖子类型,用于在我的网站上创建资源目录。该CPT具有称为“价格”的分类法。有三个术语因此,当有人在查看我的目录时,他们会在侧栏中看到“价格”以及下面的选项,他们可以单击(例如)免费并查看列出的18种不同的免费资源。我想要的是学期页面我的网站。com/价格/免费要有标题18免费资源我怎样才能做到这一点?