Question

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?

Was it helpful?

Solution

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 );

OTHER TIPS

With the new WP editor that uses blocks the second code block in the accepted answer won't render the blocks. To get them to render use the following.

$page_for_posts_id = get_option( 'page_for_posts' );
echo apply_filters( 'the_content', get_post_field( 'post_content', $page_for_posts_id ) );

The first code-block in the accepted answer will still work.

Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top