I’m using 2.8.6 and the solution above, using query_posts(), didn’t work for me. I got the same result that henkholland got. Finally I used the following solution, after adding a new option to the wp_option table, “posts_per_archive_page”.
In query.php, I changed this…
if ( !isset($q['posts_per_page']) || $q['posts_per_page'] == 0 ) $q['posts_per_page'] = get_option('posts_per_page');
to this…
if ( !isset($q['posts_per_page']) || $q['posts_per_page'] == 0 ) {
if ($this->is_archive || $this->is_search || $this->is_category) {
$q['posts_per_page'] = get_option('posts_per_archive_page');
}
else {
$q['posts_per_page'] = get_option('posts_per_page');
}
}