Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

The right method depends on your theme. In a classic theme, register an After Post Content sidebar, add widgets to it, and append that sidebar with the the_content filter. In a block theme, use the Site Editor—or create a dynamic block with a Block Hooks declaration targeting core/post-content with the position after.

First, identify your theme type

Go to Appearance in the WordPress dashboard. If you have Widgets (or a Customizer with widget controls), you are likely using a classic theme. If the main option is Editor and you edit templates visually, you are using a block theme.

  • Classic theme: widget areas are registered in PHP and managed from the Widgets screen or the Customizer.
  • Block theme: templates, template parts and patterns are edited in the Site Editor; a traditional widget area may not exist.

The block-based Widgets Editor was introduced for classic themes in WordPress 5.8. Block themes use the Site Editor as their primary layout system instead.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Choose the implementation that fits

Method Best for What you configure Important limitation
Registered sidebar and the_content Classic themes and reusable, admin-managed content PHP registration, a content filter, then widgets in Appearance → Widgets Requires PHP and narrowly scoped conditionals
Existing block or Legacy Widget Low-code setup in an already available widget area Appearance → Widgets Only works when the theme exposes that area; older third-party widgets may appear inside a Legacy Widget block
Block Hooks API Block themes and automatic placement after post content A dynamic block and blockHooks metadata The hooked block is front-end/template behavior, not a block inserted into each post in the editor
Template or template-part editing Visual control over a block-theme layout Site Editor templates, parts and patterns Traditional widget areas are not the primary block-theme model

Classic themes: create an After Post Content widget area

1. Add the sidebar registration

Put the following in a child theme’s functions.php or, preferably, a site-specific plugin. A parent-theme update can overwrite direct edits to its files.

<?php
add_action( 'widgets_init', function () {
    register_sidebar( array(
        'name'          => __( 'After Post Content', 'mytheme' ),
        'id'            => 'after-post-content',
        'description'   => __( 'Displayed after the main post content.', 'mytheme' ),
        'before_widget' => '<section id="%1$s" class="widget %2$s">',
        'after_widget'  => '</section>',
        'before_title'  => '<h2 class="widget-title">',
        'after_title'   => '</h2>',
    ) );
} );

register_sidebar() creates a named theme location. It does not display anything by itself.

2. Append the active sidebar after post content

add_filter( 'the_content', function ( $content ) {
    if ( ! is_singular( 'post' ) || ! is_main_query() || ! is_active_sidebar( 'after-post-content' ) ) {
        return $content;
    }

    ob_start();
    dynamic_sidebar( 'after-post-content' );
    return $content . ob_get_clean();
} );

The checks are deliberate. is_singular( 'post' ) limits output to individual blog posts rather than pages or every custom post type. is_main_query() prevents the widget from being appended to secondary loops, related-post queries or other content runs. is_active_sidebar() avoids producing an empty wrapper when no widget has been assigned.

3. Add and arrange the widgets

  1. Open Appearance → Widgets. If your classic theme uses the Customizer instead, open Appearance → Customize → Widgets.
  2. Find After Post Content.
  3. Add a Paragraph, Image, Navigation, HTML or other available widget. On WordPress installations using the block-based Widgets Editor, older third-party widgets can be added through the Legacy Widget block.
  4. Save, then view an individual post on the front end. The output should appear after the post’s rendered content.

Adjust before_widget, after_widget, before_title and after_title to match the markup and CSS conventions of your active theme.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Block themes: use the Site Editor or a block hook

Visual placement with the Site Editor

Open Appearance → Editor, then edit the relevant single-post template or a template part. Place a Group, Paragraph, Query Loop, or another block after the Post Content block. Save the template. This is the simplest approach when the content and layout should be controlled visually by site editors.

Because block themes may not expose Appearance → Widgets, do not send block-theme users looking for a traditional sidebar unless the theme explicitly provides one.

Automatic placement with the Block Hooks API

When a plugin supplies a dynamic block that should be inserted after every instance of the core Post Content block on the front end, declare the hook in the block’s metadata:

{
  "blockHooks": {
    "core/post-content": "after"
  }
}

This declaration belongs in the dynamic block’s block.json. The block must be dynamic; static blocks are not supported by this hook mechanism. A hook targeting core/post-content with after places the block after that block in the rendered template. It does not add an editable block to every post’s content in the post editor.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep the output from appearing in the wrong places

  • Use is_singular( 'post' ) when the feature is specifically for blog posts.
  • Keep is_main_query() so archives, related-content loops and secondary queries are not modified.
  • Do not filter feeds or REST responses unintentionally; a narrowly scoped front-end condition is safer.
  • Check that the sidebar is active before buffering and rendering it.
  • Use a child theme or site-specific plugin for PHP customizations so theme updates do not erase them.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting

The widget area is missing

Confirm that the registration code loaded without a PHP error, that the sidebar ID is exactly after-post-content in both functions, and that you are viewing the correct theme. Block themes may not show a Widgets screen at all.

The area exists but nothing appears

Assign at least one widget, verify that it is saved in After Post Content, and check the three conditional tests in the filter. A page, archive, feed or secondary loop will intentionally fail those tests.

The widget appears multiple times

Look for another the_content filter, a theme’s built-in after-content call, or a plugin performing the same insertion. Remove the duplicate integration rather than weakening the main-query guard.

The block hook does not run

Verify that the target template actually contains the core Post Content block, that the hooked block is dynamic, and that the metadata is valid JSON in the loaded block’s block.json. The result is expected on the front end, not as a new block inside the post editor.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.