Im trying to make my post random when i lick on my button using $_GET but it just keeps refreshing my page instead of refreshing with the random post.
<a href="<?php echo $my_query; ?>?p=random"><img src="<?php bloginfo('template_directory'); ?>/images/shakeup.png" alt="" /></a>
<?php if(isset($_GET['p']) && $_GET['p']=='random') {?>
<?php $my_query = new WP_Query('orderby=rand'); ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
im getting this error now “Call to a member function have_posts() on a non-object in”
You cannot use the direct class methods
have_posts()
orthe_post()
unless you’re working with the main query. In order to modify the main query you must usequery_posts
.If you want to create a new query object you need to call those methods from the new query object as Rarst showed in his example.
So you should be either…
Changing the main query
NOTE: If this query has other purposes you may need to retain existing query parameters, using an array merge or conditional
query_posts
logic.Or, creating a new query
It’s hard to say without seeing more of the code and knowing where you’re placing it, i’d assume you will need to retain query parameters, in which case i’d suggest using the first sample and conditionalising the
query_posts
line.. eg.Hope that helps.
You are using new
WP_Query
object, but wrapper functions for main query.Try: