获取自定义文章类型comics的随机孙级页面链接问题排查
问题分析与解决
原代码的错误点
array_rand($random_comic)返回的是数组的索引下标(比如0、1、2这类数字),而非帖子ID。直接把这个下标传给get_permalink(),WordPress会将其当作不存在的帖子ID处理,自然返回错误的随机链接。- 三次查询的逻辑冗余,多次调用
get_posts()会增加数据库查询次数,拖慢性能。
修复后的原代码
如果要保留原逻辑,只需修改最后两行:
// 从随机数组中获取真实的帖子ID $random_post_id = $random_comic[ array_rand($random_comic) ]; $random_post_url = get_permalink($random_post_id);
更简便的实现方法
直接用两次查询筛选出所有孙级漫画页面,再随机取一个结果,避免冗余操作:
// 先获取所有二级(章节)的ID $chapter_ids = get_posts(array( 'post_type' => 'comics', 'post_parent__not_in' => array(0), 'fields' => 'ids', 'posts_per_page' => -1 )); // 直接从二级的子级(孙级)里随机取1个 $random_comic_page = get_posts(array( 'post_type' => 'comics', 'post_parent__in' => $chapter_ids, 'posts_per_page' => 1, 'orderby' => 'rand' )); // 处理无结果的情况 $random_post_url = !empty($random_comic_page) ? get_permalink($random_comic_page[0]) : home_url();
这个方法减少了一次数据库查询,且直接只获取1个随机结果,节省内存的同时提升了效率。
内容的提问来源于stack exchange,提问作者BenCG
相关产品推荐
相关产品推荐

