Wordpress post 分两类。如何在家展示一次?
Wordpress post in two categories. How to show once in home?
我有一个循环,按类别显示来自 Wordpress 的 posts,但有些 posts 属于两个类别,所以在主页上所有 posts 都是显示,这些 post 出现了两次。
示例:
- "Example Post" 在 "Category One" 和 "Category Two"
中
- 当您看到 "Category One" 的 post 时,"Example Post" 就在那里。当您看到 "Category Two" 的 post 时,也会发生同样的情况。
- 但是当您点击 "see all posts" 时,"Example Post" 显示两次(因为它在两个类别中)
有谁知道如何 "hide" 这个重复的 post 吗?
这是循环:
<?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();
?>
此代码将获取所有 post 并在该片段中添加类别名称:<?php echo $childcat->cat_name; ?>
然后在主页上我创建了一个按类别筛选的过滤器,它会根据 $childcat->cat_name;
使用 post,但是当您单击 "All posts" 时,它会得到 posts 两次,因为它有两个类别
您可以将每个 post 名称存储在一个数组中,然后仅在尚未显示时才输出它。像这样:
<?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();
?>
您可能需要调整代码以满足您的需要,但这段代码的作用实际上是获取 post 的 name/title 并将其存储在数组中:
$array[] = get_the_title();
然后在后续循环中检查当前循环的标题 post 是否在数组中:
if ( has_post_thumbnail() && !in_array(get_the_title(), $array) )
如果是,则不应输出任何内容。如果不是那么我们输出相关内容并将 post 的标题存储到数组中。
如果有人还在寻找如何删除重复的 post 的答案。首先你需要创建空数组,然后在第一个循环中添加 post 的所有 id。在第二个循环中,检查 post id 是否在数组中,并且它的真实性比从数组中删除当前 post id。有代码
<?php
$do_not_duplicate = array(); //CREATE EMPTY 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 $do_not_duplicate[] = $post->ID; //FILL ARRAY?>
<?php
$my_post_child_cats = array();
foreach((get_the_category()) as $childcat) {
if (cat_is_ancestor_of(3, $childcat)) { ?>
<?php if ( in_array( $post->ID, $do_not_duplicate ) ) {
do_not_duplicate = array_diff($do_not_duplicate, array($post->ID)); // CHECK ARRAY AND REMOVE ID
?>
<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();
?>
我有一个循环,按类别显示来自 Wordpress 的 posts,但有些 posts 属于两个类别,所以在主页上所有 posts 都是显示,这些 post 出现了两次。
示例:
- "Example Post" 在 "Category One" 和 "Category Two" 中
- 当您看到 "Category One" 的 post 时,"Example Post" 就在那里。当您看到 "Category Two" 的 post 时,也会发生同样的情况。
- 但是当您点击 "see all posts" 时,"Example Post" 显示两次(因为它在两个类别中)
有谁知道如何 "hide" 这个重复的 post 吗?
这是循环:
<?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();
?>
此代码将获取所有 post 并在该片段中添加类别名称:<?php echo $childcat->cat_name; ?>
然后在主页上我创建了一个按类别筛选的过滤器,它会根据 $childcat->cat_name;
使用 post,但是当您单击 "All posts" 时,它会得到 posts 两次,因为它有两个类别
您可以将每个 post 名称存储在一个数组中,然后仅在尚未显示时才输出它。像这样:
<?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();
?>
您可能需要调整代码以满足您的需要,但这段代码的作用实际上是获取 post 的 name/title 并将其存储在数组中:
$array[] = get_the_title();
然后在后续循环中检查当前循环的标题 post 是否在数组中:
if ( has_post_thumbnail() && !in_array(get_the_title(), $array) )
如果是,则不应输出任何内容。如果不是那么我们输出相关内容并将 post 的标题存储到数组中。
如果有人还在寻找如何删除重复的 post 的答案。首先你需要创建空数组,然后在第一个循环中添加 post 的所有 id。在第二个循环中,检查 post id 是否在数组中,并且它的真实性比从数组中删除当前 post id。有代码
<?php
$do_not_duplicate = array(); //CREATE EMPTY 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 $do_not_duplicate[] = $post->ID; //FILL ARRAY?>
<?php
$my_post_child_cats = array();
foreach((get_the_category()) as $childcat) {
if (cat_is_ancestor_of(3, $childcat)) { ?>
<?php if ( in_array( $post->ID, $do_not_duplicate ) ) {
do_not_duplicate = array_diff($do_not_duplicate, array($post->ID)); // CHECK ARRAY AND REMOVE ID
?>
<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();
?>