WP_Query创建额外的空白结果

时间:2018-06-21 09:03:33

标签: php wordpress

我为我的Wordpress网站编写了以下功能:

add_shortcode('publish_party', 'party_contact_suppliers');

function party_contact_suppliers(){
    $alerts = new WP_Query (array (
        'post_type'    => 'alert',
        'post_status' => 'publish'));
    echo '<ol>';
    foreach($alerts as $alert) {
        echo '<li>'.$alert->ID.'</li>';
    }
    echo '</ol>';
}

我有两个已发布的警报。但这是我得到的输出:

  1. li>
  2. 600
  3. li>
  4. >
  5. < li>

我进入phpMyAdmin进行检查,并且数据库中只有3条警报,其中2条状态为“发布”。它们是帖子ID 600和帖子ID 599。

我原本希望看到两个项目,为什么会有44个,并且只显示一个ID?

2 个答案:

答案 0 :(得分:0)

您返回的$alert对象包含缺少的postdata作为属性。这意味着您应该尝试像$alert->post->ID;这样访问它,而不是$alert->ID;

遵循一般WP_Query docs的示例循环是一个更好的主意,方法是使用while循环并在循环内获取postdata(the_post()),然后再跟随wp_reset_postdata()。然后,您也可以使用get_the_ID()函数来访问ID。

add_shortcode('publish_party', 'party_contact_suppliers');
function party_contact_suppliers(){
    $alerts = new WP_Query (array (
        'post_type'    => 'alert',
        'post_status' => 'publish'));
    echo '<ol>';
    while($alerts->have_posts()) {
        $alerts->the_post();
        echo '<li>'.get_the_ID().'</li>';
    }
    echo '</ol>';
    wp_reset_postdata();
}

答案 1 :(得分:0)

{
  "success": true,
  "message": "It is done",
  "data": {
    "id": 123,
    "value": "string",
    "object":{
            "object_value":"I'm an object now"
             },
    "array_object":[ {"key1":"value1"},{"key2":"value2"},{"key3":"value3"} ]

  },
  "string": "Hello World"
}