WordPress.org

Ready to get started?Download WordPress

Forums

[resolved] Sort posts alphabetically (13 posts)

  1. ShokAIM
    Member
    Posted 1 year ago #

    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 ?

  2. alchymyth
    Forum Moderator
    Posted 1 year ago #

    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 );
  3. ShokAIM
    Member
    Posted 1 year ago #

    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 ?

  4. alchymyth
    Forum Moderator
    Posted 1 year ago #

    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?

  5. ShokAIM
    Member
    Posted 1 year ago #

    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; ?>
  6. alchymyth
    Forum Moderator
    Posted 1 year ago #

    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?

  7. ShokAIM
    Member
    Posted 1 year ago #

    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 ?

  8. alchymyth
    Forum Moderator
    Posted 1 year ago #

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

  9. ShokAIM
    Member
    Posted 1 year ago #

    yes, i get the same result

  10. alchymyth
    Forum Moderator
    Posted 1 year ago #

    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

  11. ShokAIM
    Member
    Posted 1 year ago #

    yesss ! Thank You alchymyth problem fixed !

  12. alchymyth
    Forum Moderator
    Posted 1 year ago #

    all thanks have to go to @Chris Olbekson ;-)

    if this is all for now, please mark the topic as 'resolved' - thanks.

  13. markhem
    Member
    Posted 9 months ago #

    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.

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags

No tags yet.