3

I have an array from WordPress' get_posts() function.

$posts:

array(15) {
[0]=>
  object(WP_Post)#285 (24) {
    ["ID"]=>
    int(253)
    ["post_author"]=>
    string(1) "1"
    ["post_date"]=>
    string(19) "2014-04-17 18:36:27"
    ["post_date_gmt"]=>
    string(19) "2014-04-17 18:36:27"
    ["post_content"]=>
    string(8) "gsdljdkf"
    ["post_title"]=>
    string(10) "Shortcoded"
    ["post_excerpt"]=>
    string(0) ""
    ["post_status"]=>
    string(7) "publish"
    ["comment_status"]=>
    string(6) "closed"
    ["ping_status"]=>
    string(4) "open"
    ["post_password"]=>
    string(0) ""
    ["post_name"]=>
    string(12) "shortcoded-2"
    ["to_ping"]=>
    string(0) ""
    ["pinged"]=>
    string(0) ""
    ["post_modified"]=>
    string(19) "2014-04-17 18:36:27"
    ["post_modified_gmt"]=>
    string(19) "2014-04-17 18:36:27"
    ["post_content_filtered"]=>
    string(0) ""
    ["post_parent"]=>
    int(0)
    ["guid"]=>
    string(51) "http://XXX.0.0.1:4001/wordpress/board/shortcoded-2/"
    ["menu_order"]=>
    int(0)
    ["post_type"]=>
    string(10) "board_post"
    ["post_mime_type"]=>
    string(0) ""
    ["comment_count"]=>
    string(1) "0"
    ["filter"]=>
    string(3) "raw"
  }
  [1]=>
  object(WP_Post)#284 (24) {
    (so on and so forth for all posts)
}

And I have an array with ids of posts to exclude.

$ids_of_posts_to_exclude:

array(3) {
  [0]=> string(253)
  [1]=> string(456)
  [2]=> string(789)
}

How to delete the posts which ids are listed in $ids_of_posts_to_exclude from $posts?

Cœur
  • 37,241
  • 25
  • 195
  • 267
santa
  • 123
  • 9

2 Answers2

2

You can just do this using a foreach loop and an in_array() function. Like this:

foreach($posts as $key => $post) {
    // if post id is inside the ids of posts to be excluded
    if(in_array($post->ID, $ids_of_posts_to_exclude)) {
        unset($posts[$key]); // remove that key
    }
}
Kevin
  • 41,694
  • 12
  • 53
  • 70
1

another way using array_filter

$filtered_posts = array_filter($posts,function($post) use ($ids_of_posts_to_exclude) {
    return in_array($post->ID,$ids_of_posts_to_exclude);
});
FuzzyTree
  • 32,014
  • 3
  • 54
  • 85