WordPress.org

Ready to get started?Download WordPress

Forums

Quick way to do alphabetical category archive? (15 posts)

  1. Roy Tanck
    Member
    Posted 9 years ago #

    With almost 300 movie reviews on our website now we're running into trouble. I've use a simple "cat=" switch to generate a page with all the reviewed titles. That list is getting way too long.
    What I'd like is for a way to call all entries within a category, starting with a specific letter. That way I could have a clickable alphabet at the top of the page that call a nice short page with all titles starting with the clicked letter.
    Does anybody know whether the search functionality can be made to look for starting letters? Or is there a plugin that will do this? If not, I'll try and do a plugin, but I'm not really a SQL wizard... only so-so in PHP as well...

  2. OperaManiac
    Member
    Posted 9 years ago #

  3. Roy Tanck
    Member
    Posted 9 years ago #

    Thanks, I'll have a look at that.

  4. Roy Tanck
    Member
    Posted 9 years ago #

    I had a try at the PHP and it now works nicely. I'm using the following code:

    <ul class="alphabet">
    <?php
    // build menu
    echo "

  5. #
  6. ";
    $tempstr = "abcdefghijklmnopqrstuvwxyz";
    for( $i = 0; $i < strlen($tempstr); $i++ ){
    $l = substr( $tempstr, $i, 1);
    echo "
  7. ".$l."
  8. ";
    }
    echo "
  9. all
  10. ";
    ?>

    <ul class="contentlisting">
    <?php
    // get current selection
    global $wpdb, $tableposts, $tablepost2cat;
    $letter = $_GET['letter'];
    if( $letter == '0' ){
    $query = "SELECT post_title, ID FROM $tableposts, $tablepost2cat WHERE left( post_title, 1 ) BETWEEN '0' AND '9' AND (post_id = ID AND category_id = '2') ORDER BY post_title ASC";
    } elseif( $letter == 'all' ) {
    $query = "SELECT post_title, ID FROM $tableposts, $tablepost2cat WHERE post_id = ID AND category_id = '2' ORDER BY post_title ASC";
    } else {
    $query = "SELECT post_title, ID FROM $tableposts, $tablepost2cat WHERE ( left( post_title, 1 ) = '".$letter."' OR left( post_title, 5 ) = 'the ".$letter."') AND (post_id = ID AND category_id = '2') ORDER BY post_title ASC";
    }
    $results = $wpdb->get_results( $query );
    // display selection
    if ($results) {
    foreach ($results as $result) {
    echo "

  11. ID."'>".stripslashes($result->post_title)."
  12. ";
    }
    } else {
    echo '
  13. No articles found
  14. .';
    }
    ?>


    If anyone wants to convert this into a nice plugin, be my guest :)
    Have a look at it here.

  • timothyb
    Member
    Posted 9 years ago #

    Where did you plug that code into? into the narchives.php page or your index pages? I'm lost..

  • Roy Tanck
    Member
    Posted 9 years ago #

    Sorry I didn't check back on this thread before. The code is in the index.php, but I have switch that tells the page what type of layout I want. If the URL has "action=archives", I do a PHP include to insert this code into the posts-loop. For other page types I have other code bits to include.
    Actually, having page types could be a WP feature...

  • nateomedia
    Member
    Posted 9 years ago #

    This is worth a bump. I just put this to work and it's brilliant. I don't completely understand the MySQL stuff (I'm a PHP newb), but I did hack this code a bit so that the category is automatically pulled from url. I figured the code might be worth a repost since it's a little mangled up above anyway (this may take two posts -- I'm still new at posting code myself):

    <ol class="alphabet">
    <?php
    $tempstr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for ( $i = 0; $i < strlen ( $tempstr ); $i++ ) {
    $l = substr ( $tempstr, $i, 1 );
    echo "<li";
    if ( $_GET['letter'] == $l ) { echo " class="active""; }
    echo "><a href="index.php?cat=".$_GET['cat']."&letter=".$l."">".$l."</a></li>";
    } ?>
    </ol>

    <div class="someclass">
    <ul class="letter">
    <?php
    global $wpdb, $tableposts, $tablepost2cat;
    $letter = $_GET['letter'];
    $category = $_GET['cat'];
    if( $letter == '0' ) {
    $query = "SELECT post_title, ID FROM $tableposts, $tablepost2cat WHERE left( post_title, 1 ) BETWEEN '0' AND '9' AND (post_id = ID AND category_id = '".$category."') ORDER BY post_title ASC";
    } elseif( $letter == 'all' ) {
    $query = "SELECT post_title, ID FROM $tableposts, $tablepost2cat WHERE post_id = ID AND category_id = '".$category."' ORDER BY post_title ASC";
    } else {
    $query = "SELECT post_title, ID FROM $tableposts, $tablepost2cat WHERE ( left( post_title, 1 ) = '".$letter."' OR left( post_title, 5 ) = 'the ".$letter."') AND (post_id = ID AND category_id = '".$category."' ) ORDER BY post_title ASC";
    }
    $results = $wpdb->get_results ( $query );
    // display selection
    if ($results) {
    foreach ($results as $result) {
    echo "<li><a href="#">".stripslashes($result->post_title)."</a></li>";
    }
    } else {
    echo 'No articles found.';
    } ?>
    </ul>
    </div>

  • msmeltem
    Member
    Posted 8 years ago #

    I'm a total newb, although I did manage to get a lot of the stuff I want working, as much as I tried I cannot get this one to work. I searched all over the internet, and this is exactly what I want, but I can't get it to work!!! Could somebody pls help? Exactly where in the index page I should insert the above code? Wherever I inserted it, the page shows up blank!
    Thanks..

  • poing
    Member
    Posted 8 years ago #

    Sorry, but in which file do I have to insert those code snippets?

    Thanks,
    /Frank

  • nateomedia
    Member
    Posted 8 years ago #

    To anyone in need of an alphabet-based post navigation menu, I have transformed this code into a plugin.

    http://www.nateomedia.com/wordpress/wp-snap

  • scottwblack
    Member
    Posted 8 years ago #

    Like weefselkweekje, I have a movie review site and want to implement this on my WordPress 1.5 weblog. I'm a total PHP newb, though, and can't figure out where to insert the aforementioned code. I'd like my archive page to look exactly like the one on the Choking on Popcorn site. Any thoughts? Suggestions?

  • nateomedia
    Member
    Posted 8 years ago #

    Use my plugin? The only difference between it and Choking on Popcorn is that it has an "all" and "#" category -- and I've already noted to put something like that in the next version.

    Try my plugin and, if you cannot figure out how to get it to work, leave a comment on my web page noting the specific steps that you performed and I'll help you get it to work.

  • scottwblack
    Member
    Posted 8 years ago #

    Thanks.

    I would love to use your plugin, but unfortunately I am still using WordPress 1.5. Guess I should just attempt to upgrade and hope I don't mess things up.

  • nateomedia
    Member
    Posted 8 years ago #

    Give the plugin a shot in 1.5. It might work. I just haven't tested it in that environment. But there's nothing that the plugin could really do to damage your database or anything -- either it will work or it won't.

  • mikesmullin
    Member
    Posted 8 years ago #

    If you just want to sort posts in category view by title rather than by date, then here's a quick and easy way to do that:

    http://www.mikesmullin.com/2006/05/23/wordpress-plugin-sort-category-posts-by-title/

  • Topic Closed

    This topic has been closed to new replies.

    About this Topic

    Tags