2

I have the following code that is creating a and A-Z listing of my Posts in a Custom post type. I'd like to somehow create a A-Z menu at the top which links down to its respective anchor. I just can't seem to get this part to work. Any help much appreciated?

    <?php
   $args = array(
    'post_type' => bha_issues, 
    //'post_status' => 'bha_issues',
     'orderby' => 'title',
     'order' => 'ASC',
     'caller_get_posts' => 1,
     'posts_per_page' => 40,
                 );
query_posts($args);





if (have_posts()) {
    $curr_letter = '';
    while (have_posts()) {
        the_post();
        $this_letter = strtoupper(substr($post->post_title,0,1));

        if ($this_letter != $curr_letter) {
          echo "<div id='$this_letter' class='hidden'><a name='$this_letter'></a><h2>$this_letter </h2></div>";
          $curr_letter = $this_letter;
        }


    ?>

        <div id='$this_letter' class='hidden'><a href='<?php the_permalink() ?>'><?php the_title(); ?></a></div>
    <?php 
    }
}
?>

1 Answer 1

1

I've done something similar before, for a glossary page. My code is below. Hopefully you can extrapolate from this. Note that I';m using WP_Query not query_posts, as this is best practice.

<?php
    $args = array(
        'post_type' => 'my_glossary_term',
        'orderby' => 'title',
        'order' => 'ASC',
        'posts_per_page' => -1
    );

    $query = new WP_Query( $args );

    $dl = '';
    $glossary_letter = '';
    $active_letters = array( );

    while ( $query->have_posts() ) {
        $query->next_post();
        $term_letter = strtoupper( substr( $query->post->post_title, 0, 1 ) );
        if ( $glossary_letter != $term_letter ) {
            $dl .= (count( $active_letters ) ? '</dl>' : '') . '<li id="' . $term_letter . '"><span class="subheading">' . $term_letter . '</span><dl>';
            $glossary_letter = $term_letter;
            $active_letters[] = $term_letter;
        }
        $dl .= '<dt>' . $query->post->post_title . '</dt>';
        $dl .= '<dd>' . $query->post->post_content . '</dd>';
    }
    $dl .= '</dl></li>';

    $ul = '<ul class="letters">';
    foreach ( array( 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ) as $letter ) {
        $ul .= '<li>' . (in_array( $letter, $active_letters ) ? '<a href="#' . $letter . '">' . $letter . '</a>' : $letter) . '</li>';
    }
    $ul .= '</ul>';

    echo '<div id="glossary">' . $ul . '<ul class="definitions">' . $dl . '</ul></div>';
    ?>

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.