我有一个简短的查询,应该从用户在后端选择的页面加载ID。目前,它确实在frontpage上显示一个带有ID的数组,但在第一个数组之后,它将停止显示帖子。
用于从字段中获取ID的代码:
<?php
$value = get_field(\'event_hotels\', false);
var_dump($value);
$print = implode(\',\', $value);
echo $print;
?>
在我的示例中,这将输出“158,67136153”。
接下来,我将其加载到WP查询中:
$args = array(\'post_type\' => \'hotel\', \'p\' => $print, \'posts_per_page\' => 20, \'orderby\' => \'title\', \'order\' => \'ASC\');
var_dump($args);
$loop = new WP_Query($args);
输出如下:
数组(6){[“post\\u type”]=>string(5)“hotel”[“p”]=>string(14)”15867136153“[“posts\\u per\\u page”]=>int(20)[“orderby”]=>string(5)“title”[“order”]=>string(3)“ASC”}
所以“p”中填充了4个页面ID,就像我想要的一样,除了。。。只有1个出现。如果我更改了类别的页面ID,就不会有问题,我会看到更多。
我做错了什么?
最合适的回答,由SO网友:Pieter Goosen 整理而成
这个p
parameter 接受单个整数值,而不是字符串或整数数组。
您可能想使用post__in
参数,该参数允许一个post id数组。请注意以下几点:
在将post ID传递给之前,您需要检查您是否确实拥有有效的post ID数组post__in
. 如果传递了空数组,WP_Query
失败的关键在于它会返回所有帖子。所以要小心点
post__in
也会返回粘性帖子,因此您需要考虑添加\'ignore_sticky_posts\' => 1
到您的查询参数您需要使用wp_parse_id_list()
在将ID传递给之前post__in
您可能可以尝试以下方法:
$value = get_field( \'event_hotels\', false );
// Check if we have a valid string
if ( $value ) {
$post_id_array = wp_parse_id_list( $value );
// Make sure we have a valid array of ID\'s
if ( $post_id_array ) {
$args = [
\'post__in\' => $post_id_array,
\'ignore_sticky_posts\' => 1,
// REST OF YOUR ARGS
];
$loop = new WP_Query( $args );
// Your loop
wp_reset_postdata(); // After your loop, VERY IMPORTANT
}
}