I have a page that is assigned as the “Blog”. What I’d like to allow is the user to add content to this page then display it before the posts show up on index.php
. I thought I used to be able to do it using this method:
<?php
$blog = get_option('page_for_posts');
echo apply_filters('the_content', get_the_content($blog));
?>
For some reason it is deciding to pull the first post instead of actually pulling the page content. Is this a bug or is there another method to pull the blog page content?
2 Answers
You are using get_the_content()
wrong, it can’t take a ID, which is what get_option('page_for_posts')
does return, and generally gets the content of the current post inside the loop, in which it has to be used.
To get the actual content of that page you can do:
$page_for_posts_id = get_option( 'page_for_posts' );
$page_for_posts_obj = get_post( $page_for_posts_id );
echo apply_filters( 'the_content', $page_for_posts_obj->post_content );
Or:
$page_for_posts_id = get_option('page_for_posts');
echo get_post_field( 'post_content', $page_for_posts_id );