Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I created a category-list to show them in a way, my accordion can use. (Custom in the sidebar) I want to add a class named "current" for the currently viewed post and the viewed category should be opened. Do you have any ideas to integrate this in the code? It was hard work to get this to work and now I dont know how to integrate it...

Link: http://www.davidgoltz.de/2011/anna-bederke-actor/ (after you click "Portfolio", the menu appears and should show the opened tree with a highlighted post.

Here is the code:

<div id="category-list">
    <ul class="topnav"> 
        <?php
        $kategorien = get_categories(array(
        'child_of' => 0,
        'exclude_tree' => 15,
        'exclude' => 16,
        'orderby' => 'slug',
        'order' => 'ASC')); 
            foreach($kategorien as $kategorie) { 
            echo '<li><a href="#" class="category-title">'; echo ($kategorie->name); echo '</a>';
                echo '<ul>';
                    $cat = $kategorie->cat_ID;
                    $posts = get_posts('category='. $cat .'&posts_per_page=-1');
                        foreach($posts as $post) { ?>
                        <li>
                            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                        <li>
                    <? }
                echo '</ul>';
        echo '</li>';
            } 
        ?>                  
    </ul>
</div>
share|improve this question
add comment

1 Answer

up vote 0 down vote accepted

Try this:

<div id="category-list">
    <ul class="topnav"> 
        <?php
        if (is_single()){
            global $post;
            $pid = $post->ID;
            $post_categories = wp_get_post_categories( $post->ID );
            $cats = array();
            foreach($post_categories as $c){
                $cat = get_category( $c );
                $cats[] = $cat->ID;
            }
            $active_cat_count = true;
            $cat_count = 0;
        }

        $kategorien = get_categories(array(
        'child_of' => 0,
        'exclude_tree' => 15,
        'exclude' => 16,
        'orderby' => 'slug',
        'order' => 'ASC')); 
            foreach($kategorien as $kategorie) { 
            if (isset($active_cat_count) && $active_cat_count){
                if (in_array($kategorie->ID,$cats){
                    $active_cat_count = false;
                }else{
                    $cat_count = $cat_count + 1;
                }
            }
            echo '<li><a href="#" class="category-title">'; echo ($kategorie->name); echo '</a>';
                echo '<ul>';
                    $cat = $kategorie->cat_ID;
                    $posts = get_posts('category='. $cat .'&posts_per_page=-1');
                        foreach($posts as $post) { ?>
                        <li>
                            <a <?php if ($post->ID == $pid){echo 'class="current"';} ?> href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                        <li>
                    <? }
                echo '</ul>';
        echo '</li>';
            } 
        ?>                  
    </ul>
</div>
<?php
if (is_single()){
?>
<script>
jQuery(document).ready(function(){
    $( ".topnav" ).accordion( "option", "active", <?php echo $cat_count; ?> );
});
</script>
<?php
}
share|improve this answer
    
Link: davidgoltz.de/2011/anna-bederke-actor Mh, doesnt work! Whats this at the end? <?php } –  juliusk Aug 9 '11 at 10:54
    
the <?php } at the end is to close the final if statement, as for why its not working' i can't see the code there so i can't tell. let me know when you use that code and i'll take a look. –  Bainternet Aug 9 '11 at 13:06
    
Its online now (previous link)! –  juliusk Aug 9 '11 at 15:05
    
I don't see the JavaScript is this a custom post type or a regular single post view? –  Bainternet Aug 9 '11 at 15:39
    
Its a custom post type: Heres the javascript $(document).ready(function() { $(".topnav").accordion({ header: 'a.category-title', accordion:true, speed: 500, closedSign: '+', openedSign: '-' }); }); –  juliusk Aug 10 '11 at 11:44
show 8 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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