Custom per-page sidebar widgets .. possible?

Let’s say I’m doing a site about cars, and in the main content area of a Page (using a certain template), there are a few paragraphs about a particular car.

In the sidebar, are several standard widgets. But I also want a widget with an ‘info panel’ about the particular car.

Read More

So what’s the sanest way of putting in a per-page widget in WordPress? I guess ideally the info-panel could be entered via the standard page editing in WordPress .. perhaps via the Custom Fields, so you could enter “Volvo” for the Manufacturer field and it would show up in the sidebar. (or is this something a plug-in already covers?)

Related posts

Leave a Reply

4 comments

  1. You want the Widget Logic Plugin if you’re going to use widgets to do this. However, as you have guessed, this is not the best way to do this. I think the best way to achieve what you want to do is to create a custom widget that accesses the posts information if it detects that it’s on the correct page. Something like this:

    global $wp_query;
    $custom_data = get_post_meta( $wp_query->post->ID, 'your_custom_postmeta_key', true );
    if( is_page() && !empty( $custom_data ) ){
      echo $before_widget . $before_title . $title . $after_title;
      echo apply_filters( 'the_content', $custom_data );
      echo $after_widget;
    }
    

    If you stick that inside the normal widget structure, that would be pretty effective at creating a per-page widget that only appears if you’re on a page and that page has the meta content relevant to the widget. At that point, you could just use the custom fields that WordPress already provides on the pages to input the custom content.

  2. There are some plugins that enable you to do that. contextual-widgets for example.
    The other way is to create a different sidebar for the “page” /”post” template.

    A different way is to put a static code in your sidebar.php that checks if you’re in “page” or “single” and if so “prints” the info you’ve entered in the custom fields.