Wordpress帖子分为两类。如何在家中展示一次?

时间:2017-04-25 14:14:20

标签: php wordpress post filter categories

我有一个循环,按类别显示Wordpress中的帖子,但有些帖子分为两个类别,所以在主页上显示所有帖子,这些帖子出现两次。

示例:

  • “示例帖子”在“第一类”和“第二类”
  • 当您看到“第一类”的帖子时,“示例帖子”就在那里。当您看到“第二类”的帖子时也会发生同样的情况。
  • 但是当您点击“查看所有帖子”时,“示例帖子”会显示两次(因为它分为两类)

有谁知道如何“隐藏”这些重复的帖子?

这是循环:

<?php 

    $loop = new WP_Query( array( 'post_type' => 'products', 'posts_per_page' => -1 ) );

    if ( $loop->have_posts() ) :
        while ( $loop->have_posts() ) : $loop->the_post(); ?>


        <?php 
          $my_post_child_cats = array();
            foreach((get_the_category()) as $childcat) { 
                if (cat_is_ancestor_of(3, $childcat)) { ?>


                <div class="item"  data-groups='["all", "<?php echo $childcat->cat_name; ?>"]'>
                    <div class="pindex">
                        <?php if ( has_post_thumbnail() ) { ?>
                            <a href="<?php the_permalink(); ?>">
                            <div class="pimage">
                                <?php the_post_thumbnail(); ?>
                                <div class="pro-title">
                                    <h4><?php echo get_the_title(); ?></h4>
                                    <p>Read more</p></a>
                                </div>
                            </div>
                        <?php } ?>

                    </div>
                </div>

        <?php } } ?>

        <?php endwhile; ?>

    <?php endif;
    wp_reset_postdata();
    ?>

此代码将获取所有帖子,并使用此片段添加类别名称:<?php echo $childcat->cat_name; ?>

然后在主页中我按类别创建了一个过滤器,该过滤器将按$childcat->cat_name;列出帖子,但是当您点击“所有帖子”时,它会获得两次的帖子,因为它有两个类别

2 个答案:

答案 0 :(得分:0)

您可以将每个帖子名称存储在一个数组中,然后只有在它尚未显示时才输出。像这样:

<?php 
$array[];
$loop = new WP_Query( array( 'post_type' => 'products', 'posts_per_page' => -1 ) );

if ( $loop->have_posts() ) :
    while ( $loop->have_posts() ) : $loop->the_post(); ?>


    <?php 
      $my_post_child_cats = array();
        foreach((get_the_category()) as $childcat) { 
            if (cat_is_ancestor_of(3, $childcat)) { ?>


            <div class="item"  data-groups='["all", "<?php echo $childcat->cat_name; ?>"]'>
                <div class="pindex">

                    <?php if ( has_post_thumbnail() && !in_array(get_the_title(), $array) ) { ?>
                        <a href="<?php the_permalink(); ?>">
                        <div class="pimage">
                            <?php the_post_thumbnail(); ?>
                            <div class="pro-title">
                                <h4><?php echo get_the_title();
                                 $array[] = get_the_title();
                                 ?></h4>
                                <p>Read more</p></a>
                            </div>
                        </div>
                    <?php } ?>

                </div>
            </div>

    <?php } } ?>

    <?php endwhile; ?>

<?php endif;
wp_reset_postdata();
?>

您可能需要调整代码以满足您的需要,但此代码的作用主要是抓取帖子的名称/标题并将其存储在数组中:

$array[] = get_the_title();

然后在后续循环检查以查看当前循环帖子的标题是否在数组中:

if ( has_post_thumbnail() && !in_array(get_the_title(), $array) )

如果是,则不应输出任何内容。如果不是,那么我们输出相关内容并将帖子的标题存储到数组中。

答案 1 :(得分:0)

如果有人仍在寻找如何删除重复帖子的答案。首先你需要创建空数组,而不是在第一个循环中添加post的所有id。在第二个循环中检查post id是否在数组中,并且它的真实性是从数组中删除当前的post id。有代码

<($i | sed 's/fastq.gz/sai/g')