在我的相关帖子上得到相同的帖子

时间:2020-09-27 作者:user9437856

我正在我的单曲上展示相关产品。php页面。

我有两个问题。

当我在一个页面上时,我会在我的相关帖子上看到相同的帖子

$post_id = get_the_ID();
    $cat_ids = array();
    $categories = get_the_category($post_id);
    if(!empty($categories) && is_wp_error($categories)):
        foreach ($categories as $category):
            array_push($cat_ids, $category->term_id);
        endforeach;
    endif;
    $current_post_type = get_post_type($post_id);
    $query_args = array( 
        \'taxonomy\' => \'blogs_cat\',
        \'category__in\'   => $cat_ids,
        \'post_type\'      => $current_post_type,
        \'post_not_in\'    => array($post_id),
        \'posts_per_page\'  => \'4\',
        \'order\' => \'DEC\',
     );
    $related_cats_post = new WP_Query( $query_args );
    if($related_cats_post->have_posts()):
        echo \'<div class="relatedPostWrapper"><ul>\';
         while($related_cats_post->have_posts()): $related_cats_post->the_post();
          echo \'<li>
                    <a href="\'.get_permalink($related_cats_post->ID).\'">
                        <div class="d-table">
                            <div class="relatedpost-img d-table-cell">
                            <img src="\'.get_the_post_thumbnail_url($related_cats_post->ID).\'">
                            </div>
                            <div class="relatedpost-title d-table-cell">
                                 \'.get_the_title($related_cats_post->ID).\'
                            </div>
                        </div>
                    </a>
                </li>\';
        endwhile;
        echo \'</ul></div>\';
        wp_reset_postdata();
     endif;

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

        \'post_not_in\'    => array($post_id),
这是您的问题,其中有两个:

参数键错了,使用正确的键可以很容易地避免巨大的性能损失post__not_inpost_not_in. 这将恢复所需的行为,但随着posts表大小的增加,会对性能造成巨大的影响。

这是因为你应该总是向数据库询问你想要什么,而不要问它你不想要什么。MySQL将对此做出回应,创建一个全新的posts表副本,该表没有该post,然后对新表执行查询,然后丢弃它。

但有一个简单的选择

解决方案很简单,要求5篇文章而不是4篇,跳过你不想要的文章。相比之下,在PHP中排除帖子几乎是即时的。

例如:

$q = new \\WP_Query( [ \'posts_per_page\' => 5 ] );
$counter = 0;
$post_to_skip = 1;
if ( $q->have_posts() ) {
    while ( $q->have_posts() {
        $q->the_post();
        if ( get_the_ID() === $post_to_skip ) {
            continue; // skip
        }
        if ( ++$counter === 4 ) {
            break; // only 4 posts
        }
        // ... display post
    }
    wp_reset_postdata();
}

相关推荐

Get post categories

我想根据帖子类别做一个过滤器。我试图在数据类别属性中添加类别名称,但似乎不起作用。这就是我所尝试的:<article id=\"post-<?php the_ID(); ?>\" <?php post_class(); ?> data-category=\"<?php $category_detail=get_the_category(); foreach($category_detail as $cd){ $cd->cat_name;}?>\">&#