結論
get_posts()を使い、setup_postdata()し、wp_reset_postdata()する。
書き比べ
query_posts()版
<?php
query_posts('category_name=' . $category->slug . '&orderby=title&order=ASC');
if(have_posts()):
while(have_posts()):
?>
<h4><?php the_title(); ?>"></h4>
<?php the_contents(); ?>
<?php
endwhile;
endif;
?>
get_posts()版
<?php
$post_args = array(
'category' => $category->cat_ID
,'orderby' => 'title'
,'order' => 'ASC'
,'post_type' => 'post'
);
$shohin_posts = get_posts( $post_args );
foreach($shohin_posts as $post) :
setup_postdata( $post );
?>
<h4><?php the_title(); ?>"></h4>
<?php the_contents(); ?>
<?php
endforeach;
wp_reset_postdata();
?>
参考
テンプレートタグ/query posts - WordPress Codex 日本語版
query_postsを捨てよ、pre_get_postsを使おう【追記あり】【報告あり】 | notnil creation weblog
テンプレートタグ/get posts - WordPress Codex 日本語版