百度
360搜索
搜狗搜索

WordPress多个分类文章重复和数量限制的解决方法详细介绍

问题主要是由于在处理文章时,从多个分类中获取的文章数量总和可能会超过设置的限制。虽然设置了每个分类下最多获取10篇文章,但这些文章可能在多个分类中重复出现,导致最终展示的文章总数超过了预期。
让我们分析一下代码的每一步:

1.获取所有分类:

$categories = get_the_category();

2.从每个分类中获取前10篇文章:

$rank_posts = get_posts(array(
    "orderby"        => "meta_value_num",
    "meta_key"       => "views",
    "numberposts"    => 10,
    "category"       => $category->term_id,
    "post_status"    => "publish"
));

3.将文章ID存储在数组中以去重:

foreach ($rank_posts as $rank_post) :
    $unique_post_ids[$rank_post->ID] = true;
endforeach;

4.从唯一的文章ID中获取所有文章:

$args = array(
    "post__in"       => $unique_post_ids,
    "post_status"    => "publish",
    "orderby"        => "post__in",
    "posts_per_page" => -1
);
$unique_posts = get_posts($args);

5.展示文章:

foreach ($unique_posts as $unique_post) :
    setup_postdata($unique_post);
    // 输出文章
endforeach;

问题所在:
每个分类中获取的文章是独立的,且可能有重复。如果一篇文章在多个分类中被选中,它只会在unique_post_ids数组中出现一次,但由于从不同分类中获取的文章总数可能达到或超过13篇(如你所见),因此最终展示的文章数量也会超过10篇。
解决方案:
为了确保最终展示的文章数量不会超过10篇,可以在将所有唯一文章存储到数组后,再对它们进行限制。这可以通过在获取所有文章之前对$unique_post_ids数组进行限制来实现。
更新代码如下:

<?php
global $post;
// 获取当前文章的所有分类
$categories = get_the_category();
// 用于存储唯一文章ID的数组
$unique_post_ids = array();
foreach ($categories as $category) :
    // 获取当前分类下按“views”排序的前10篇文章
    $rank_posts = get_posts(array(
        "orderby"        => "meta_value_num",
        "meta_key"       => "views",
        "numberposts"    => 10,
        "category"       => $category->term_id,
        "post_status"    => "publish"
    ));
    foreach ($rank_posts as $rank_post) :
        // 将文章ID添加到数组中
        $unique_post_ids[$rank_post->ID] = true; // 使用键值对来去重
    endforeach;
endforeach;
// 限制唯一文章ID的数量为10
$unique_post_ids = array_slice($unique_post_ids, 0, 10, true);
// 将唯一的文章ID从键名数组中提取出来
$unique_post_ids = array_keys($unique_post_ids);
// 获取所有唯一文章的信息
$args = array(
    "post__in"       => $unique_post_ids,
    "post_status"    => "publish",
    "orderby"        => "post__in",
    "posts_per_page" => -1 // 确保获取所有文章
);
$unique_posts = get_posts($args);
foreach ($unique_posts as $unique_post) :
    // 设置文章数据
    setup_postdata($unique_post);
    ?>
    <li><a href="<?php echo get_permalink($unique_post->ID); ?>" title="<?php echo esc_attr(get_the_title($unique_post->ID)); ?>"><?php echo get_the_title($unique_post->ID); ?></a></li>
    <?php
endforeach;
// 重置文章数据
wp_reset_postdata();
?>

这个更新通过array_slice函数限制了$unique_post_ids数组的大小,确保最终展示的文章数量不会超过10篇。

,

网站数据信息

"WordPress多个分类文章重复和数量限制的解决方法"浏览人数已经达到49次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:WordPress多个分类文章重复和数量限制的解决方法的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!