0

I'm trying to get my sidebar to change when a user is logged in and i'm using the is_user_logged_in function. Here is the code -

<!-- BEGIN sidebar -->

<?php
/**
 * The Sidebar containing the primary and secondary widget areas.
 *
 * @package WordPress
 * @subpackage Twenty_Ten
 * @since Twenty Ten 1.0
 */
?>

        <div id="primary" class="widget-area" role="complementary">
            <ul class="xoxo">

<?php
    /* When we call the dynamic_sidebar() function, it'll spit out
     * the widgets for that widget area. If it instead returns false,
     * then the sidebar simply doesn't exist, so we'll hard-code in
     * some default sidebar stuff just in case.
     */
    if ( ! dynamic_sidebar( 'primary-widget-area' ) ) : ?>


<li class="widget-container">
<h3 class="widget-title">Sign In / Register</h3>
<ul>    
<?php if ( is_user_logged_in() ) { echo 'Welcome, registered user!';} else { echo 'Welcome, unregistered user!';} ?>
</ul>
</li>


    <li id="meta" class="widget-container">
                <h3 class="widget-title"><?php _e( 'Meta', 'twentyten' ); ?></h3>
                <ul>
                    <?php wp_register(); ?>
                    <li><?php wp_loginout(); ?></li>
                    <?php wp_meta(); ?>
                </ul>
            </li>

        <?php endif; // end primary widget area ?>
            </ul>
        </div><!-- #primary .widget-area -->



<!-- END sidebar -->

When the user is logged in the sidebar shows what it's supposed to. When the user logs out, it disappears completely. What am I doing wrong?

2
  • <ul> needs to be followed by a <li>, but besides that the code looks fine, maybe the problem is in another place. Commented Jan 25, 2011 at 0:52
  • Eh maybe. The UL and LI tags are like that... because that's the default twentyten code. I fixed it and everything went wonky. I can't find the problem, guessing this function just doesn't work on widgetized sidebars.
    – Lynne
    Commented Jan 25, 2011 at 1:56

1 Answer 1

1

you warped your code inside

 if ( ! dynamic_sidebar( 'primary-widget-area' ) ) : ?>
     // code here

 ?php endif;

witch means that if you have any widgets on that sidebar the the code within the IF will not work. its basically using the code inside the if to use as default widgets and once you have a widget on the sidebar it ignores it.

so if your sidebar does have any widgets you need to run your is_user_logged_in function inside a PHP capable widget.

hope this helps

3
  • There were no widgets on the sidebar
    – Lynne
    Commented Jan 25, 2011 at 5:25
  • @Lynne - are you sure? because i just ran your code and it didn't work the first time, i looked at my sidebar, there were some widgets there by default, i removed them and it show's up fine. and yes i was using the 2010 theme.
    – Bainternet
    Commented Jan 25, 2011 at 5:43
  • ahh, ok one quick question, do you have any kind of cache running?
    – Bainternet
    Commented Jan 25, 2011 at 11:21

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.