web-dev-qa-db-fra.com

faire un bouton de requête aléatoire en utilisant $ _GET

J'essaie de rendre mon message aléatoire lorsque je clique sur mon bouton à l'aide de $ _GET, mais l'actualisation de ma page se poursuit, au lieu de l'actualisation aléatoire.

    <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(); ?>

j'obtiens cette erreur maintenant "Appel à une fonction membre have_posts () sur un non-objet dans"

1
Jeremy Love

Vous ne pouvez pas utiliser les méthodes de classe directes have_posts() ou the_post() si vous ne travaillez pas avec la requête principale. Afin de modifier la requête principale, vous devez utiliser query_posts.

Si vous souhaitez créer un nouvel objet de requête, vous devez appeler ces méthodes à partir du nouvel objet de requête, comme Rarst l'a montré dans son exemple.

Donc, vous devriez être soit ...

  • Changer la requête principale

    <?php query_posts('orderby=Rand'); ?>
    
    <div id="front-video-container">
    
    <?php if( have_posts() ) : ?>           
    <?php while( have_posts() ) : the_post(); ?>
    

REMARQUE: Si cette requête a d'autres objectifs, vous devrez peut-être conserver les paramètres de requête existants, à l'aide d'une fusion de tableaux ou d'une logique query_posts conditionnelle.

  • Ou créer une nouvelle requête

    <?php $my_query = new WP_Query('orderby=Rand'); ?>
    
    <div id="front-video-container">
    
    <?php if( $my_query->have_posts() ) : ?>           
    <?php while( $my_query->have_posts() ) : $my_query->the_post(); ?>
    

Il est difficile de dire sans voir plus de code et savoir où vous le placez, je suppose supposer que vous devrez conserver les paramètres de requête, auquel cas je suggérerais en utilisant le premier échantillon et en conditionnant la ligne query_posts .. par exemple.

<?php 
if( isset( $_GET['p'] ) && 'random' == $_GET['p'] ) {
    query_posts('orderby=Rand');
}
?>

J'espère que cela pourra aider.

2
Mark Duncan

Vous utilisez un nouvel objet WP_Query, mais des fonctions d'encapsulation pour la requête principale.

Essayer:

<?php if ($my_query->have_posts()) : ?>           
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
1
Rarst