Display Editable Text Above CPT Archive Listings

I have two custom post types (Authors and Partners). I display their archive page’s in the main navigation and use archive-authors.php and archive-partners.php to make a couple small tweaks to the display of posts in each.

Now, my client would like to display some text before the archive’s post listing. So far I can think of the following ways to do that:

  1. Save the text as the post type’s description and display that.
  2. Create a separate page and hard code a custom WP_Query() loop for just that page (by ID) above the archive.
  3. Write a custom loop with WP_Query() to produce the CPT archive for each CPT and setup “Author Archive” and “Partner Archive” templates that can be used on static, editable pages.

However, all of these solutions seem suboptimal for one or more of the following reasons:

  • They require technical knowledge to update (#1, #2)
  • It’s not abstracted (e.g. the solution has to be custom-coded for each archive) (#2, #3)
  • Updating the text requires technical knowledge (#1)
  • The solution essentially duplicates the template hierarchy (#3).

I’m looking for a solution that’s WordPress friendly, abstracted, and easy-to-update for the client.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

One of the easiest (although not the only) of ways to achieve this is by creating a custom options panel in the WP dashboard that will allow your client to create and update information that can be used through out your template files with no technical knowledge being necessary.

You can either paste the following directly into your functions.php file or you can save it in a file i.e. config-menu.php (within your theme directory) and then include it into your functions.php file – the choice is yours however the code is;

// create config menu in dashboard
add_action('admin_menu', 'config_menu');

function config_menu() {

    //create a menu in the dashboard
    add_menu_page('Website Custom Settings',
                  'Configure Site', 
                  'administrator',
                  __FILE__,
                  'custom_settings_page',
                  ''.get_bloginfo('template_directory').'/images/your_icon.png', 4);

}

//register settings
add_action( 'admin_init', 'register_settings' );

function register_settings() {

    register_setting(   'my-settings-group', 'partners');
    register_setting(   'my-settings-group', 'authors');
}

function my_settings_page() {
?>

<div class="wrap">

    <form method="post" action="options.php">

    <?php settings_fields('my-settings-group'); ?>

    Enter your Partner description here <br/>
    <textarea  name="partners"><?php echo get_option('partners');?></textarea>

    <br />

    Enter your Author description here <br/>
    <textarea  name="authors"><?php echo get_option('authors');?></textarea>
    <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />

    </form>

</div>

<?php } ?>

Then in your archive template files for each post type you can do the following;

<?php echo wpautop(get_option('partners');?>

and

<?php echo wpautop(get_option('authorss');?>

This will call the respective values (text entered) into the textarea fields you have created in the dashboard area for the client.

NOTE: The example code above is very rudementary and its stripped down to provide you a basic example. No CSS styling provided which I’ll leave up to you. But this will get the job done.

Method 2

There is now a plugin CPT Descriptions that does this.

As of v0.1, the plugin is pretty buggy (editors can’t save descriptions), but most of the stuff is taken care of on the GitHub repository version of the plugin and you can find some other changes/improvements amongst the one existing fork and pull requests. Hopefully those will be integrated into the WordPress repo version of the plugin, but for now they’re up and tested on GitHub.

To use the plugin, simply install it, fill out the “Description” fields for each post type you desire and then output the description on an archive page with:

the_post_type_description();

or get a specific post type’s description with:

the_post_type_description('my_post_type');

or save it to a variable with:

$description = get_post_type_description();


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x