这个答案只是解释了一种可能的方法,没有提供详细的代码。
以下方法更多地依赖PHP过滤结果,而不是多个WP\\U查询,它使用单个WP\\U查询以及多个get\\u post\\u meta()调用。
步骤1:
对于当前post,请使用get\\u field()或get\\u post\\u meta()以及所有必要的键和值构建一个数组:
$current_post = array(
k1 => v1,
k2 => v2,
k3 =>v3
);
第2步:
使用至少有一个匹配键、值对的WP\\u查询(meta\\u查询)获取所有帖子ID。
WP_Query[
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'k1\',
\'value\' => \'v1\',
\'compare\' => \'=\'
),
array(
\'key\' => \'k2\',
\'value\' => \'v2\',
\'compare\' => \'=\'
),
array(
\'key\' => \'k3\',
\'value\' => \'v3\',
\'compare\' => \'=\'
)
)
]
步骤3:
对于以上结果中的所有post ID;迭代并构建一个与所有键、值匹配的数组;
$matching_posts = array(
post_id_1 => array (
k1 => v1,
k2 => v2,
k3 =>v3
),
post_id_2 => array (
k1 => v1,
k2 => v2,
k3 =>v3
)
.
.
.
);
步骤4:
4.1:
使用php数组函数[array_intersect]获取$current_post[]的相关帖子ID;
从$matching\\u posts[]中删除相关post id
4.2删除最后一个键=>;来自$current\\u post[]的值;并重复4.1
重复4.2
这将为您提供3组阵列:
使用所有键发布ID=>;共有值(3),然后是2个相同的键;值,然后只有单键的帖子=>;共同价值对于问题的另一部分:至少n
对于当前帖子,您可以通过一个简单的查询n - x
不包括上述所有职位的职位。其中x是所有匹配帖子的总和。