Support » Fixing WordPress » Sort posts alphabetically

  • Resolved ShokAIM

    (@shokaim)


    Hello, i need a way to display posts in a category (ex. Uncategorized) sorted by title and with working pagination , i’ve tried a few methods but non of them seem to work…

    Anyone can help ?

Viewing 12 replies - 1 through 12 (of 12 total)
  • Michael

    (@alchymyth)

    Forum Moderator

    try to use 'pre_get_posts' http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

    add the code into functions.php of your theme;

    example:

    function category_archive_uncategorized_sort( $query ) {
        if ( is_admin() || ! $query->is_main_query() )
            return;
    
        if ( is_category('uncategorized') ) {
    		$query->set( 'orderby', 'title' );
    		$query->set( 'order', 'ASC' );
            return;
        }
    }
    add_action( 'pre_get_posts', 'category_archive_uncategorized_sort', 1 );

    hi, thanks for the quick replay , i tried adding the code to functions.php but nothing happens, no change and i’ve tried over 10 solutions to display posts sorted by title and I get the same result, nothing, any idea ?

    Michael

    (@alchymyth)

    Forum Moderator

    display posts in a category (ex. Uncategorized) sorted by title and with working pagination

    the suggested code only works on the ‘uncategorized’ category; do you need something different?

    nothing happens, no change

    does this mean that the ‘uncategorized’ category archive is still shown sorted by date?

    what theme are you using?

    does category.php or archive.php of your theme contain a custom query?

    yes i need it to work for Uncategorized category

    yes the uncategorized category is still shown sorted by date

    i’m using a modified theme, nothing to fancy here is the code for category.php

    <?php  if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div class="post">
    	<h2 class="storytitle"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?> </a></h2>
    	<div class="storycontent">
    		<?php the_excerpt(); ?>
    	</div>
    </div>
    <div class="meta">
    <span class="cat"><?php the_category(',') ?> <?php edit_post_link(__('Edit This')); ?></span>
    <span class="more"><a href="<?php the_permalink() ?>" title="View More">View More</a></span>
    </div>
    
    <?php endwhile; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>

    Michael

    (@alchymyth)

    Forum Moderator

    there is an alternative;
    before this line:
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    add:
    <?php global $query_string; query_posts( $query_string . '&orderby=title&order=ASC' ); ?>

    http://codex.wordpress.org/Function_Reference/query_posts#Preserving_Existing_Query_Parameters

    otherwise, try the standard troubleshooting:

    – temporarily deactivate all plugins; does this help to get the suggested code to work?
    if yes, re-activate one plugin at a time to find out which plugin was interfering;
    if not, reactivate all pugins again.

    – temporarily switch to the default theme Twenty Twelve, and temporarily add the suggested code into functions.php there; does this work?

    ok using
    <?php global $query_string; query_posts( $query_string . '&orderby=title&order=ASC' ); ?>
    i got some result but it’s not right, i mean i have the following posts in my category sorted by date ( WP default ):

    X-MEN (2000)
    Elizabeth (1998)
    Elizabeth: The Golden Age (2007)
    The Other Boleyn Girl (2008)
    The Duchess (2008)
    A Royal Affair (2012)
    Titanic (1997)
    One Piece (1999)
    101 Dalmatians (1996)
    Hello world!

    and after adding the above code i get :

    Elizabeth: The Golden Age (2007)
    The Duchess (2008)
    The Other Boleyn Girl (2008)
    101 Dalmatians (1996)
    A Royal Affair (2012)
    Elizabeth (1998)
    Hello world!
    One Piece (1999)
    Titanic (1997)
    X-MEN (2000)

    that’s wrong … any clue how to fix it ?

    Michael

    (@alchymyth)

    Forum Moderator

    did using the code in the default theme Twenty Twelve with all plugins deactivated change anything?

    yes, i get the same result

    Michael

    (@alchymyth)

    Forum Moderator

    based on advice from Chris Olbekson

    try:

    function wpsf_orderby( $query ) {
        if ( is_admin() || ! $query->is_main_query() )
            return;
     // do conditional checks here and return on false.?
    
        if ( is_category('uncategorized') ) {
    	remove_action( 'pre_get_posts', __FUNCTION__ );
    	add_filter( 'posts_orderby', function() { return ' post_title ASC'; } );
    	}
    }
    
    add_action( 'pre_get_posts', 'wpsf_orderby' );

    http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_orderby

    yesss ! Thank You alchymyth problem fixed !

    Michael

    (@alchymyth)

    Forum Moderator

    all thanks have to go to @chris Olbekson 😉

    if this is all for now, please mark the topic as ‘resolved’ – thanks.

    Thank You alchymyth and ShokAIM. This works on my localhost, but not when I try it on my live site. My live site is in development, and I use Maintenance Mode while I work on it. I have deactivated all my plugins on my live site, including Maint Mode, and I am getting the white screen on the live site. Exact same functions.php file on localhost and live site.
    Here’s how I used the code;

    function wpsf_orderby( $query ) {
        if ( is_admin() || ! $query->is_main_query() )
            return;
     // do conditional checks here and return on false.?
    
        if ( is_category('groups') ) {
    	remove_action( 'pre_get_posts', __FUNCTION__ );
    	add_filter( 'posts_orderby', function() { return ' post_title ASC'; } );
    	}
    	   if ( is_category('classes') ) {
    	remove_action( 'pre_get_posts', __FUNCTION__ );
    	add_filter( 'posts_orderby', function() { return ' post_title ASC'; } );
    	}
    }

    Hope you still can see this thread.

    I want to use this for a couple of categories in my Main Menu. In the category ‘Groups’ on localhost I can now list where all the pottery groups are in my region in alphabetical order. I simply use the name of the city as the first word of the post title. I added a second instance of this and for ‘Classes’ and now that category is alphabetical too. My thumbnails and excerpts remained exactly the same, just a different sort order. This makes it much easier for people to look for things in their area.

Viewing 12 replies - 1 through 12 (of 12 total)
  • The topic ‘Sort posts alphabetically’ is closed to new replies.