查询仅显示一个page_id

时间:2016-06-07 作者:Danny

我有一个简短的查询,应该从用户在后端选择的页面加载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,就不会有问题,我会看到更多。

我做错了什么?

1 个回复
最合适的回答,由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
    
        }
    }
    

  • 相关推荐

    WordPress Custom Post Loop

    我正在尝试循环浏览自定义WordPress帖子,遇到了一个问题,比如我添加了自定义字段并想在中显示它<li> 使用循环。我成功地完成了操作,但数据/链接/类别正在重复,如果类别与以下内容相同,我希望只显示一次:如果我有2篇带有data1类别的帖子,那么链接将只显示data1once 但我有2个不同类别的帖子,然后它会分别显示每个帖子。Sample Code:<ul class="filter filter-top"> <li cla