If you sort by menu_order you can get duplicated posts if you use pagination and not all posts have a order value. You can fix this like so:
/**
* Post types
*/
class PostType {
/**
* Construct
*/
public function __construct() {
add_filter( 'pre_get_posts', array( $this, 'archive_query' ) );
}
/**
* Archive query
*/
public archive_query( $query ) {
if ( is_admin() ) {
return;
}
if ( ! $query->is_main_query() ) {
return;
}
if ( ! $query->is_post_type_archive( 'some_post_type' ) ) {
return;
}
$query->set(
'orderby',
array(
'menu_order' => 'DESC',
'date' => 'ASC',
)
);
$query->set( 'posts_per_page', 16 );
}
}