0

プラグイン内にショートコードを作成しましたが、うまく機能しています。ショートコードは、いくつかのパラメーターを取り、出力を含むカスタム ループを作成する必要があります。

パラメーターの 1 つは、ループを出力する投稿の数です ($markers)

$args=array(
                'meta_key'=>'_mykey',
                'post_status'=>'publish',
                'post_type'=>'post',
                'orderby'=>'date',
                'order'=>'DESC',
                'posts_per_page'=>$markers,

);

  $wp_query = new WP_Query();
           $wp_query->query($args);

if ($wp_query->have_posts()) : while (($wp_query->have_posts()) ) : $wp_query->the_post();

// do the loop using get_the_id() and $post->id

endwhile;endif;
wp_reset_query();//END query

場合によっては、すべての投稿からのデータが必要に($markers = '-1' )なり、場合によっては 1 つ($markers = '1' )または複数のデータが必要になり($markers = 'x')ます。

これらはすべて単一のページ/投稿でうまく機能しますが、私の問題は、この関数が複数の投稿 (!is_single) と ( $ markers = '1') がある場所にある場合、常に最新の投稿のデータを返し、そうではないことです。正しいものについて..(たとえば、デフォルトのワードプレステーマでは、10件の投稿が表示されます-それらはすべて同じデータになります)

これは明らかに$post->ID- の問題ですが、 wp ループの外側でカスタム ループを実行するときに正しい投稿 ID を取得するにはどうすればよいですか?

私は問題を覆そうとしました

global $post;
 $thePostIDtmp = $post->ID; //get the ID before starting new query as temp id
 $wp_query = new WP_Query();
 $wp_query->query($args);
// Start Custom Loop

if (!is_single()){
$post_id_t = $thePostIDtmp;}
else {
$post_id_t = $post->ID;}

そして使用 $post_id_t- しかし、うまくいかなかったようです。 get_the_id() を使用しない方がよいですか? または、クエリを使用しない (および get_posts を使用する) べきですか??

アイデア/解決策/考えはありますか??

4

2 に答える 2

1

$ wpオブジェクトをオーバーライドするのではなく、query_posts(http://codex.wordpress.org/Function_Reference/query_posts)を使用します。これにより、ページに必要な数のループを含めることができるはずです。これに問題がある場合は、呼び出す直前にhttp://codex.wordpress.org/Function_Reference/wp_reset_queryを使用できます。

私はこれを見つけます: http: //blog.cloudfour.com/wordpress-taking-the-hack-out-of-multiple-custom-loops/ も少しの苦痛を取り除きます。

于 2012-04-22T08:39:40.637 に答える
0

WordPress には基本的に 2 種類のクエリ投稿があります。メイン ループを変更するものと変更しないものです。カテゴリのアーカイブ ページを表示するために使用されるようなメイン ループを変更する場合は、query_postsを使用します。まさにそれができます。既定のクエリのパラメーターを削除、変更、および追加して、通常のページの結果を変更します。ただし、 query_posts にはいくつかの欠点があります。

次に、データベースから何かを取得して遊んでみるためだけに使用されるクエリがあります。たとえば、サイドバーに最新の投稿タイトルを表示したり、現在の投稿の添付ファイルを表示したりします。

これを行うには、次のようにメイン ループから独立してカスタム ループを構築する新しい WP_Query オブジェクトを作成します。

// The Query
$the_query = new WP_Query( $args );

// The Loop
while ( $the_query->have_posts() ) : $the_query->the_post();
    echo '<li>';
    the_title();
    echo '</li>';
endwhile;

// Reset Post Data
wp_reset_postdata();

次に、WP_Query の弟分のようなget_posts()があります。私の意見では、より簡単なインターフェイスを備えており、操作しやすい結果を含む配列を返します。次のようになります。

$myposts = get_posts( $args );
foreach($myposts as $post) : setup_postdata($post);
     echo "<li>";
     the_title();
     echo "</li>";
endforeach;

get_the_id() のような foreach テンプレート タグ内で機能します。

于 2012-04-22T15:49:46.450 に答える