Blogging, Wordpress

Edit sidebar content as a page in WordPress

I recently came across a situation where I needed to display the contents of a page in a WordPress sidebar.  Essentially, my client needed an easy way to edit a sidebar that appeared on multiple pages.  Editing a Text widget wasn’t an option: they needed the flexibility of editing a page.

It took a few tries/revisions to find the best way to do this, so I thought I’d share my solution.  All I did was create a page with a specific slug (“sidebarpage”) and echo its content.  I used it in a sidebar widget, but you could use this anywhere in your WordPress Theme if you’d like to have an additional editable area.

<?php
$sidebarpage = new WP_Query(“pagename=sidebarpage”);
while($sidebarpage->have_posts()) : $sidebarpage->the_post();
the_content();
endwhile;
?>

Be sure that you’re creating a seperate WP_Query object ($sidebarpage in this example) — otherwise you’ll modify the query on the page itself, and your sidebar content will show up in the main body of your posts/pages as well!

The down-side of having this content stored in a page is that the page will appear in page listings, so be sure to exclude it if these are used in your theme.

9 Comments

  1. Colin Temple Author

    Nothing. I just put that snippet of code into a sidebar widget (which I created via a plugin).

    You could put that code into any template file. It doesn’t modify WP_Query, it just creates a new instance of it. All the code really does is output the content of a specific page (by slug).

    Reply
  2. Thanks for this, it’s very helpful. Someday I would love to see the ability to manage sidebar specific content on a page by page basis in WordPress… but haven’t seen anything out there that can handle it just yet.

    Hopefully in the future!

    Reply
  3. Colin Temple Author

    For the moment, you’d have to either make a template file for each page that you wanted a unique sidebar for, or modify the “Page” template to pass some identifier to your dynamic_sidebar() function.

    Either way, you’d also have to initiate dynamic sidebars for each page.

    It would be neat to have a “Use this sidebar:” with a list of existing ones, and an option to make a new sidebar for the page within the UI.

    Reply
  4. Cynthia

    There is a great plug-in called “Display Widgets” that allows you to choose which page your widget shows up on. In combination with the above, it should be quite powerful!

    Reply
  5. Connor MacDonald

    Hi, Colin–

    Why do I get WP_Query errors on any of the scripts I try to use WP_Query on, regardless of what theme I use?

    Best Regards

    Reply
  6. Colin Temple Author

    I’m not sure, Connor. What’s the error you’re getting.

    One thing that may be an issue — WordPress changes my code here in the snippet above. My quotes before and after the pagename query are transformed to the fancy before and after “curly” quotes – rsquo and lsquo. You’ll want to replace them with straight quotes from your keyboard: “

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *