web-dev-qa-db-ja.com

query_posts()とget_posts()の多重ループ

最初は単一のループを持ち、query_postsを使用していたテンプレートがあり、同じメソッドを使用してさらに2つのループを追加しました。

オリジナルのquery_postsループ(最新の投稿)

<?php if ( !is_front_page() && tfuse_options(PREFIX.'_pagination_portfolio') ){
    $cat = get_query_var( 'cat' );
    query_posts( array ( 'posts_per_page' => -1, 'cat'=>$cat ) );
}
while (have_posts()) : the_post(); ?>
    //blah posts here
<?php endwhile; ?>

2番目のカスタムget_postsループ(ランダム投稿)

<?php if ( !is_front_page() ){
    //$cat = get_query_var( 'cat' );
    $args = array( 'numberposts' => 10, 'orderby' => 'Rand' );
    $Rand_posts = get_posts( $args );
}
foreach( $Rand_posts as $post ) : ?>
    //blah posts here
<?php endforeach; ?>

3番目のカスタムget_postsループが機能していません(最も閲覧されている投稿)

if ( !is_front_page() ){
    $cat = get_query_var( 'cat' );
    $args = array( 'v_sortby' => 'views', 'v_orderby' => 'DESC', 'numberposts' => 10, 'cat'=> $cat);
    $most_viewed_posts = get_posts( $args );
}
foreach( $most_viewed_posts as $post ) : 
    //blahblah
<?php endforeach; ?>

問題は、3番目のループが投稿のメタを認識していないかのように、正しい投稿を表示しないことです。

ビューv_sortby、v_orderby

任意の助けは大歓迎です、私はこれにはかなり新しいです。

更新この サイト で同様の質問をしました。下記は、メタキーを持つquery_postsを使ってそれを達成するもう一つの方法です。誰かが気にかけているメタキー+ wp_queryまたはget_postsを使うようにコードを書き直すより良い方法があると思いますか?私はこれに非常に新しいです、あまりにも分厚く見えますか? :S

<?php $posts_per_page = get_query_var('posts_per_page'); ?>
<?php $paged = intval(get_query_var('paged')); ?>
<?php $paged = ($paged) ? $paged : 1; ?>
<?php $args = array(
'posts_per_page' => $posts_per_page,
'paged' => $paged,
'more' => $more = 0,
'meta_key' => 'views',
'orderby' => 'meta_value_num',
'order' => 'DESC',
); ?>
<?php query_posts($args); ?>
<?php if (have_posts()) : while (have_posts()) : the_post() ;?>
<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
1
David Garcia

コメンテーターによって与えられたヒントのおかげで私はこれを達成することができました:)

    <?php 
if ( is_front_age() ){
                    $most_viewed_posts = new WP_Query( array('v_sortby' => 'views', 'v_orderby' => 'DESC', 'showposts' => 10, 'cat'=> 3) );
                    }
                    while ( $most_viewed_posts->have_posts() ) : $most_viewed_posts->the_post(); ?>

//post structure

 <?php wp_reset_postdata(); ?>
0
David Garcia