0

ループの注文で困っています!投稿をカウントダウン スタイル (5、4、3、2、1) で表示したいのですが、メタデータとユーザー入力データを使用しています。

私はこのデータを持っています:

Post A with meta data (score = 2)
Post B with meta data (score = 4)
Post C with meta data (score = 6)
Post D with meta data (score = 8)
Post E with meta data (score = 10)

例のユーザーは、上位 3 つのカウントダウンを表示したいので、$user_input = 3 です。

ページには、投稿 C、投稿 D、投稿 E が表示されます (メタ スコアの順に並べられ、最高のスコアが最後に表示されます)。

私は wp_query ループを持っています:

   $args = array('meta_key' => 'score', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'posts_per_page' => $user_input);
   $qry= new WP_Query( $args );
        $count_posts = $qry->post_count; 
        $offset = $count_post - $user_input
        while ( $qry->have_posts()  ) : $qry->the_post();
              // echo stuff

order=ASC に設定され、ページあたりの投稿数が 3 に設定されているため (カテゴリに 5 つの投稿がある場合)、投稿 A、投稿 B、投稿 C が表示されることを除いて、機能します。 C、D、Eであることを除いて表示します。

wp_query をオフセットする必要があると思ったのですが、カテゴリ内の投稿数がわからないため、args 配列に「オフセット」を追加できません。WP_Query の後に post_count を実行し、user_input を減算して、オフセットする必要がある数を知る必要があります。そのため、$offset の計算を入れています。

私の質問はです。WP_query を正しい方法で変更するにはどうすればよいですか? です

 query_posts('offset'.$offset.'&showposts'.$user_input)

別のクエリを実行しているため、オフセットが計算された後、それを行うのは悪い方法ですか?

wp_query にパラメーターを設定した後で簡単にパラメーターを追加する方法はありますか?

みんなありがとう

4

1 に答える 1

0

クイックフィックスは、クエリの順序を「ASC」ではなく「DESC」に変更することです。これにより、3 つの最大のスコアが得られます。次に、を使用して配列内の投稿を取得できますが$qry->get_posts()、それらはまだ間違った順序になります。aを実行して、array_reverse()必要な順序で並べ替えるだけです。ループの唯一の違いは、配列のようなアイテムを通常どおりループし、代わりにsetup_postdata()関数を使用することです。$qry->the_post()

<?php

// Set order to DESC
$args = array('meta_key' => 'score', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'posts_per_page' => $user_input);

$qry = new WP_Query( $args );

// Fetch the posts and reverse it to get the wanted order
$posts = array_reverse( $qry->get_posts() ); 

foreach ( $posts as $post ) : setup_postdata( $post ); // sets up postdata in the same way as $qry->the_post();

    // ... 

endforeach; 

wp_reset_postdata(); // reset postdata after the loop

?>
于 2013-02-21T12:40:25.737 に答える