Static page with formatted post list

The only way I can think of to achieve this without any custom coding is if your theme already displays Category descriptions. When you edit a Category, there is a “description” field where you would place the static information. However, many themes don’t display this information. So, if you try adding a Category Description in wp-admin and it doesn’t appear on the Category front end, you would need to create a child theme, which basically means adding a very simplified “style.css” file into a new folder, copying your theme’s “category.php” into your child theme folder, and then adding a call to display the Description in that file in the child theme.

A different approach would be to use a plugin to create a custom post type for each set of posts. So for example, if your categories are Apples and Bananas, you would create an “apple” CPT and a “banana” CPT. Make sure they are set up not to have an archive, and to use a rewrite. The “apple” CPT would need a rewrite of array('slug' => 'apples') so that the URLs of all of these appear to be “under” the URL http://example.com/apples/.

Here’s the part where you need a bit of code. You would then need to create a child theme, which is as simple as making a directory inside /wp-content/themes/ – let’s call it /wp-content/themes/wpse/ – and creating a file called style.css inside that folder:

/*
Theme Name: WPSE Starter
Template: twentytwenty
*/

The catch is, you’ll need to change “twentytwenty” to the folder name of whatever theme you are actually using. So if you’re using, say, the Ocean WP theme, its folder name (and the name you need to put in your file) is “oceanwp”. Adjust as needed for your site.

Now for each category, you need to create a PHP file in your theme called “page-name.php”. Instead of “name” though you need to use the CPT name. So in our Apples example, your file name will be “page-apples.php”. Copy your own theme’s page.php file contents and paste it into this file. Each theme uses whatever HTML it wants, so you can’t use this code exactly as-is, you’ll need to adjust it for your theme. But basically, what you need to achieve is:

<?php
// Get the sitewide header
get_header(); ?>
<main>
    <div class="static">
        <!-- Get the static content for this particular Page -->
        <?php if ( have_posts() ) :
        while ( have_posts() ) : the_post();
            the_content();
        endwhile;
        endif; ?>
    </div>
    <div class="posts">
        <!-- Get a few of the posts in this particular CPT -->
        <?php
        $args = array(
            'post_type' => 'apple',
            'posts_per_page' => 5,
        );
        $myposts = new WP_Query($args);
        // If any were found, output them
        if($myposts->have_posts()) {
            while($myposts->have_posts()) : $myposts->the_post();
                // You may be able to copy from your theme here
                // to output posts the same way your Categories do.
                // This will make an HTML article with just the
                // title of each post as a link to the full post.
                echo '<article><a href="' . get_the_permalink() . '">';
                the_title();
                echo '</a></article>';
            endwhile;
        }
        ?>
    </div>
</main>
<?php
// Get the sitewide footer
get_footer(); ?>

A third approach, using regular Posts, would be to use a custom field plugin such as ACF. With this approach, you’d create Posts and assign them to Categories, then create an ACF fieldset for each individual category, and that fieldset is where you would actually enter the data. But, you would still need to create a child theme to be able to actually display this information, and it wouldn’t really have any advantages over using WP’s built-in Category Description unless you have structured data.