循环在查询中5次显示POST

时间:2016-08-01 作者:Filip

我正在根据当前的分类法获取所有父帖子的列表。这似乎有效,但列表又重复了5次。

这意味着,当一个列表中应该有3个帖子时,我会得到15个帖子。我的线圈有什么地方做错了吗?

    <ul>
<?php 
$terms = get_terms(\'taxonomy-name\');
foreach($terms as $term) {
$posts = get_posts(array(
\'numberposts\' => -1,
\'post_type\' => get_post_type(),
\'post_parent\' => 0,
\'tax_query\' => array(
                array(
                    \'taxonomy\' => \'taxonomy-name\',
                    \'field\' => \'slug\',
                    \'terms\'    => \'term-name\',
                )
            ),
           ));

    foreach($posts as $post) : ?>
  <li>
  <?php the_title(); ?>
  </li>


  <?php endforeach; wp_reset_postdata();?>
  <?php } ?>
</ul>
谢谢大家!

2 个回复
SO网友:Rarst

the_title() 是依赖于全局状态的模板标记。明确地$post 全局变量,保存当前post实例。

当您查询一组帖子时,您从未设置模板标记要使用的全局状态。

如果你一开始get_posts() 完全不干涉全局状态,只使用全局状态可能更方便get_the_title(), 它可以根据需要检索特定职位的标题。

SO网友:Filip

感谢您的支持和推荐。我做了一些代码生成。我使用的是dreamweaver,在使用PHP时似乎总是有点凌乱。

如果我使用the_post(); 相反,我得到了一个循环,它只重复两次。比以前好多了,但我觉得我做错了什么。你到底是什么意思$post 变量重命名post变量以排除其他冲突是否更好?

<ul>
        <?php
$terms = get_terms($taxonomy);
foreach($terms as $term)
    {
    $posts = get_posts(array(
        \'numberposts\' => -1,
        \'post_type\' => get_post_type() ,
        \'post_parent\' => 0,
        \'tax_query\' => array(
            array(
                \'taxonomy\' => $taxonomy,
                \'field\' => \'slug\',
                \'terms\' => custom_taxonomies_terms_links() ,
            )
        ) ,
    ));
    foreach($posts as $post): ?>
        <li><!--Content here--></li>

        <?php endforeach; 
        the_post(); ?>
        <?php } ?>

这个custom_taxonomies_terms_links() 是获取当前分类法的当前术语的一种方法。

<?php

function custom_taxonomies_terms_links()
    {
    global $post, $post_id;
    $post = & get_post($post->ID);
    $post_type = $post->post_type;

    $taxonomies = get_object_taxonomies($post_type);
    foreach($taxonomies as $taxonomy)
        {
        $terms = get_the_terms($post->ID, $taxonomy);
        if (!empty($terms))
            {
            foreach($terms as $term) $out.= $term->name;
            }
        }

    return $out;
    } ?>
实际上,我不确定这样做是最好的还是优雅的。