web-dev-qa-db-ja.com

$ _GETを使ってランダムなクエリボタンを作る

私は$ _GETを使って自分のボタンをなめたとき私の投稿をランダムにしようとしていますが、それはただランダムな投稿で更新するのではなく私のページを更新し続けます。

    <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「非オブジェクトのメンバ関数have_posts()への呼び出し」

1
Jeremy Love

メインクエリを操作しているのでない限り、直接クラスメソッドhave_posts()またはthe_post()を使用することはできません。メインクエリを変更するためには、query_postsを使用しなければなりません。

新しいクエリオブジェクトを作成したい場合は、Rarstが彼の例で示したように、新しいクエリオブジェクトからそれらのメソッドを呼び出す必要があります。

だからあなたはどちらかになるはずです...

  • メインクエリを変更する

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

注:このクエリに他の目的がある場合は、配列マージまたは条件付きquery_postsロジックを使用して、既存のクエリパラメータを保持する必要があります。

  • または、新しいクエリを作成する

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

もっと多くのコードを見たり、それをどこに置いているのかわからずに言うのは難しいです。assumeあなたはクエリパラメータを保持する必要があるでしょう。 query_posts行のサンプルと条件付け。

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

それが役立つことを願っています。

2
Mark Duncan

新しいWP_Queryオブジェクトを使用していますが、メインクエリにラッパー関数が使用されています。

試してください:

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