The number of posts is set to 5 by default, so you have to set it to your liking. If you want to show all posts, then it's -1
, and the number you want otherwise.
You should also put functions out of loops (as in your second foreach
), so here is your code, optimized:
<?php
$args = array(
'child_of' => 1,
);
$categories = get_categories($args);
if (count($categories)) {
?>
<ul>
<?php
foreach ($categories as $category) {
<li><a><?php echo $category->name; ?></a>
<ul>
<?php
$args = array(
'posts_per_page' => -1, // query ALL posts
'post_status' => 'publish',
'cat' => $category->term_id,
);
$query = new WP_Query($args);
while ($query->have_posts()) {
$query->the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
}
wp_reset_postdata();
?>
</ul></li>
}
?>
</ul>
<?php
}
?>