How to sort posts in archive loop

I need to sort posts using this loop, is an archive page (pc-archive.php) for a CTP named “PC”.

Tried with <?php while ( have_posts('order=desc') ) : the_post(); ?>

but no luck… i must be doing something badly.

then I have tried adding this filter, but i dont get it to work…

function my_custom_archive_order( $vars ) {
  if ( !is_admin() && isset($vars['post_type']) && is_post_type_hierarchical($vars['post_type']) ) {
    $vars['orderby'] = 'menu_order';
    $vars['order'] = 'DESC';
  }

  return $vars;
}
add_filter( 'request', 'my_custom_archive_order');

this is the loop:

             <?php while ( have_posts() ) : the_post(); ?>
      <div class="galleryphotos">
    <a target="_blank" href="https://wordpress.stackexchange.com/questions/185131/<?php echo types_render_field("pcurl", array("raw" => "true")); ?>">
              <img  class="pcimagestyle" src="https://wordpress.stackexchange.com/questions/185131/<?php echo types_render_field("pcimage", array("raw" => "true")); ?>">
</a>       

    <div class="icons">            <a target="_blank" href="https://wordpress.stackexchange.com/questions/185131/<?php echo types_render_field("pcurl", array("raw" => "true")); ?>"
                      <ul class="pcitems"> 
        <li><?php the_title(); ?> </li>
              <li>   <?php echo do_shortcode('[types field="pcpubname"][/types]'); ?>  </li>     
              <li>   <?php echo do_shortcode('[types field="pcdate" format="d/m/Y"][/types]'); ?></li>
                </ul>
              </a>
</div>
               </div>       <?php endwhile; // end of the loop. ?>

1 Answer
1

This filter has to be set in functions.php.
Your filter won’t work as expected because your condition is wrong.
The condition here imply that you try to order pages (hierarchical post) instead of regular posts-like entries.

You have to be careful using this filter as it has effect on your whole website.

function my_custom_archive_order( $vars ) {
  if ( !is_admin() && isset($vars['post_type']) && $vars['post_type'] == 'pc' ) {
    $vars['orderby'] = 'menu_order';
    $vars['order'] = 'DESC'; // you probably don't need this because that's the default behaviour
  }

  return $vars;
}
add_filter( 'request', 'my_custom_archive_order');

https://codex.wordpress.org/Plugin_API/Filter_Reference/request

Leave a Comment