I have a function retrieving ID's of posts by very specific means.
I need to be able to set the global $post
in order to use functions like the_content()
, which does not allow an ID as a parameter.
How can I achieve this?
I have a function retrieving ID's of posts by very specific means.
I need to be able to set the global $post
in order to use functions like the_content()
, which does not allow an ID as a parameter.
How can I achieve this?
When your going through your loop add this:
global $post;
$post = get_post( $ID, OBJECT );
setup_postdata( $post );
//Do something
wp_reset_postdata();
To work with posts outta loop try using:
get_post(post_id)
to get a post with a specific ID out of the loop,when you do this,the global object $post will hold the post which you'v just selected.Now you can get the content using :
$post->post_content
.
You may use a one-liner to reset the global post object.
setup_postdata( $GLOBALS['post'] =& $custom_post_object );
When you finish your template or loop be sure to reset the global post so you won't break other templates further down the stack.
wp_reset_postdata();
Note: PHPCS with WordPress standards will complain about overriding the global post so if you're using the WordPress standards you'll need to disable it for the line like so:
setup_postdata( $GLOBALS['post'] =& $post ); //phpcs:ignore
A solution that works for me is:
global $post;
before the loopsetup_postdata($post);
inside the loopwp_reset_postdata();
after the loopTake into account that the name of the variable must be $post