When you give the player a rare but powerful item which can only be used once but is never really required to proceed, most players will not use it at all, because they are waiting for the perfect moment. But even when this moment comes, they will still be reluctant to use it, because there might be an even better moment later. So they keep hoarding it for a moment which will never come. 

In the end, they will carry the item around until it is outclassed by other, more readily available resources, or even until the very end of the game. That means that such one-shot items don't provide any gameplay-value at all. They are simply too awesome to use.

What can you do to encourage the player to make use of their one-shot items and not hoard them?


Question: Looping through posts per category gives same posts for each category
Answer: Your category is ID being changed at every loop iteration and you are setting a common transient, which gives the same result every time even if category ID has been changed.  

So you need to save transient for every category.

set_transient( 'category_posts_' . $category-&gt;cat_ID, $category_posts_query, 36 * HOUR_IN_SECONDS );


Try this solution

&lt;?php $categories = get_categories(array('exclude' =&gt; '1, 4, 9, 10, 2899')); ?&gt;

&lt;?php foreach ($categories as $category) : ?&gt;
    &lt;div class="subject"&gt;
        &lt;h3&gt;&lt;?php echo $category-&gt;cat_name; ?&gt;&lt;/h3&gt;
        &lt;ul&gt;
            &lt;?php $args = array(
                'cat' =&gt; $category-&gt;cat_ID,
                'posts_per_page' =&gt; 3
            ); ?&gt;
            &lt;?php if (false === ( $category_posts_query = get_transient( 'category_posts_' . $category-&gt;cat_ID ) ) ) {
                $category_posts_query = new WP_Query($args);
                set_transient( 'category_posts_' . $category-&gt;cat_ID, $category_posts_query, 36 * HOUR_IN_SECONDS );
            }
            ?&gt;
            &lt;?php while($category_posts_query-&gt;have_posts()) : ?&gt;
                &lt;?php $category_posts_query-&gt;the_post(); ?&gt;
                &lt;li&gt;&lt;a href="&lt;?php the_permalink(); ?&gt;" title="&lt;?php the_title(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/li&gt;
            &lt;?php endwhile; ?&gt;
        &lt;/ul&gt;
    &lt;/div&gt;
&lt;?php wp_reset_postdata(); ?&gt;
&lt;?php endforeach; ?&gt;