我正在我的单曲上展示相关产品。php页面。
我有两个问题。
当我在一个页面上时,我会在我的相关帖子上看到相同的帖子我必须在我的相关部分显示max 4帖子。如果我有3篇与同一类别相关的帖子,那么只显示3篇,我尝试了以下代码。
$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;
最合适的回答,由SO网友:Tom J Nowell 整理而成
\'post_not_in\' => array($post_id),
这是您的问题,其中有两个:
参数键错了,使用正确的键可以很容易地避免巨大的性能损失post__not_in
不post_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();
}