wordpress - Wp_Query 中的最大数组长度 post__not_in 参数
问题描述
我正在使用 WordPress 上的页面向本地 php 文件发出发布请求,以促进无限滚动。WP_query 每次的参数如下:
$args = array(
'post_status' => 'publish',
'post_type' => array( 'post'),
'post__not_in' => $_POST["LoadedIDs"],
'posts_per_page' => $numberofResources,
'orderby' => 'rand',
'meta_query' => array(
array(
'key' => 'shares',
'value' => 100,
'compare' => '>=',
'type' => 'numeric',
),
)
);
LoadedIDs 是已经获取的 ID 列表,因此在每次请求之后自然会变长。最终我注意到我得到了重复。我认为这是由于 post__not_in 数组长度的限制。请问有人知道那是什么吗?
解决方案
您应该对此进行概要分析以查看需要多长时间。如果您有大量的帖子(比如说 5-50k),那么查询可能需要一些时间来执行,而且针对已经加载的帖子进行测试也可能很耗时。
另外,我假设加载的 ID 是从客户端发送的。如果是这种情况,并且帖子数量非常多,那么您可能会遇到与将数据从客户端获取到服务器有关的问题。您应该检查 $_POST 以确保所有 ID 都存在。如果你有太多的 ID,那么你可能不得不求助于将加载的 ID 存储在会话中,但如果做得不好,这可能会变得混乱。
无论如何,这个尝试:
$exclude = is_array( @$_POST['LoadedIDs'] ) ? $_POST['LoadedIDs'] : [];
// use array keys for faster lookup
$_exclude = array_flip( $exclude );
$all_posts = get_posts( [
'post_status' => 'publish',
'post_type' => [ 'post' ],
'posts_per_page' => - 1,
'orderby' => 'rand',
'meta_query' => array(
array(
'key' => 'shares',
'value' => 100,
'compare' => '>=',
'type' => 'numeric',
),
)
]);
// get the next X number of posts.
$next_posts = array_slice( array_filter( $all_posts, function ( $p ) use( $_exclude ){
return ! isset( $_exclude[$p->ID] );
} ), 0, $numberofResources );
推荐阅读
- python - 字典条目被覆盖?
- reactjs - 如何在 Azure 中托管的 React 应用程序中使用环境变量
- python - 如何用 Unicode 值替换 Python 关键字
- php - PHP SQL表,同一行中具有相同ID的值
- python - HackerRank、Python、gradingStudents、nonetype 对象不可迭代
- sql - Rails 5 - 对急切加载的集合子应用限制
- java - java中两个列表的交集
- r - Rstudio - 如何编写更小的代码
- python - 如何在python中将图像写为dicom?
- pandas - 一个系列的熊猫真值不明确