0

I have created a custom sidebar widgets using below code :

register_sidebar(array(
        'id' => 'sidebar-widget-1',
        'name' => 'Sidebar Widget 1',
        'before_widget' => '',
        'after_widget' => '',
        'before_title' => '',
        'after_title' => '',

    ));

and it is showing in Appearance -> Widgets and it is also showing content on frontend using dynamic_sidebar('Sidebar Widget 1').

But I want to get content of this register_sidebar by using its id into a variable.

How to get sidebar content by using its id?

2 Answers 2

0

In your sidebar.php or any other custom sidebar file call by ID like this

<?php get_sidebar('sidebar-widget-1'); ?>

Not like this

<?php get_sidebar('Sidebar Widget 1'); ?>

See the difference, I used ID in get_sidebar() function instead of name.

Now where ever you want sidebar appear in front-end, there call it like this

<?php get_sidebar('sidebar-widget-1'); ?>
2
  • Hello @Rishabh, I want to get sidebar content one by one with all options in a variable. Commented Dec 28, 2016 at 8:57
  • @Vinaya Maheshwari Sorry, Didn't get your point. What u mean by one by one and options of what variable?
    – Rishabh
    Commented Dec 28, 2016 at 9:26
0

From your question you have already registered the sidebar.

To get the content of the sidebar into a variable, i think you can use php buffering :

   // ob_start - Turn on output buffering
   // ob_get_contents - Return the contents of the output buffer
   // ob_end_clean - Clean (erase) the output buffer and turn off output buffering

Such as this :

   // Turn on output buffering
   ob_start();
   // Specify the sidebar using its [id]
   dynamic_sidebar('sidebar-widget-1');
   // Store the return contents of the output buffer in a variable
   // in this case $sidebar_content
   $sidebar_content = ob_get_contents();
   // Clean (erase) the output buffer and turn off output buffering
   ob_end_clean();

if you need to get more than one sidebar content, like you need the get the content of several sidebars at once then you can:

    // Get the list of all registered sidebars using wp_registered_sidebars
    foreach ( $GLOBALS['wp_registered_sidebars'] as $sidebar ) :
        // Turn on output buffering
        ob_start();
        // This will get all the sidebars
        dynamic_sidebar($sidebar['id']);
        // Store the return contents of the output buffer in a variable
        // in this case $sidebars_content
        $sidebars_content = ob_get_contents();
        // Clean (erase) the output buffer and turn off output buffering
        ob_end_clean();
    endif;

OR

    // Get the global registered sidebars
    global $wp_registered_sidebars;
    // Loop through each content in $wp_registered_sidebars array
    foreach($wp_registered_sidebars as $sidebar_id => $sidebar) :
        ob_start();
        // This will get all the sidebars
        dynamic_sidebar($sidebar['id']);
        // Store the return contents of the output buffer in a variable
        // in this case $sidebars_content
        $sidebars_content = ob_get_contents();
        // Clean (erase) the output buffer and turn off output buffering
        ob_end_clean();
    endforeach;

Hope one on this helps you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.