Wordpress:如何在一个页面上创建多个(自定义)循环?

时间:2014-06-17 11:36:01

标签: php wordpress loops wp-query

首先,抱歉我的英语不好。

我在我的主页上使用此代码来显示特定类别的评论最多的帖子:

<?php $popular_restaurants = new WP_Query( array( 'post_type' => 'restaurant', 'posts_per_page' => 5, 'category_name' => 'restaurants', 'ignore_sticky_posts' => true, 'orderby' => 'comment_count', 'order' => 'DESC', 'date_query' => array( array( 'after' => '0', ), ), ) ); ?> <?php if ( $popular_restaurants->have_posts() ) : ?> <?php while ( $popular_restaurants->have_posts() ): $popular_restaurants->the_post(); ?> <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a> (<?php comments_number( 'Nu stemmen!', '1', '%' ); ?>)</li> <?php endwhile; ?> <?php wp_reset_postdata(); ?> <?php else: ?> <p><?php _e( 'Sorry, er gaat even iets fout. We hebben niets kunnen vinden.' ); ?></p> <?php endif; ?>

现在我希望,而不是评论最多的帖子,循环显示最高投票的帖子。

通常我会使用此代码来显示帖子分数:

$counts = aigoo_get_score();
extract( $counts );  //restores compacted variables
<span>+'.$score.'</span>

这是我的functions.php:

/* Display likes/unlikes */
function aigoo_get_score() {
   $comments = get_comments( array('post_id' => get_the_ID(),) );
            $likes = array();
            $unlikes = array();
            foreach( $comments as $comment ) {
                if('unlike' == $comment->comment_content ) $unlikes[] = $comment;
                    else $likes[] = $comment;
            }
    $likescore = count( $likes );
    $unlikescore = count( $unlikes );
    $score = count($likes) - count($unlikes);
    $totalvotes = count($likes) + count($unlikes);
    return compact('likes', 'unlikes', 'likescore', 'unlikescore', 'score', 'totalvotes');
}

如何才能实现,而不是显示评论最多的帖子,而不是显示我主页上投票率最高的帖子?

我不知道它是否可能。希望有人可以帮助我。

提前多多感谢!

2 个答案:

答案 0 :(得分:0)

编辑:回答问题的第二部分。 这段代码是未经测试的,我只是写出了我认为它应该如何工作,可能存在错误。

<?php $popular_restaurants = new WP_Query( array(
            'post_type'             => 'restaurant',
            'posts_per_page'        => 5,
            'category_name'         => 'restaurants',
            'ignore_sticky_posts'   => true,
            'orderby'               => 'comment_count',
            'order'                 => 'DESC',
            'date_query' => array(
                array(
                    'after' => '0',
                ),
            ),
        ) );
    $like_count_array = array();  ?>
    <?php if ( $popular_restaurants->have_posts() ) : ?>
    <?php while ( $popular_restaurants->have_posts() ): $popular_restaurants->the_post(); 
 //Call your function inside the loop to get the like count, and assign the value to an array with the post id as the key.      
            $like_count = igoo_get_score();
            $id = get_the_ID();
            $like_count_array[$id] = $like_count['totalvotes']; ?>
        <?php endwhile; ?>
        <?php endif; ?>
//run the loop four times to print the four highest values
            <?php if (is_array( $like_count_array ) ) {
    for ($i = 1; $i <= 4; $i++) {
            //Get the post id with the highest vote value
            $post_id = array_search(max($like_count_array),$like_count_array);
            //Remove this value from the array
            unset($like_count_array[$post_id]); ?>
            <li><a href="<?php echo get_permalink( $post_id ); ?>">
                <?php echo get_the_title($post_id); ?></a></li>
         <?php   }
        }; ?>

答案 1 :(得分:0)

有时wp_reset_postdata()似乎不像我期望的那样工作。通常我通过在循环之前将我的帖子数据保存到变量来解决任何wp_reset_postdata()问题。然后,将全局$ post变量重置回已保存的帖子。这样的事情。

    $saved_post = $post;
    <?php
            $popular_restaurants = new WP_Query( array(
                'post_type'             => 'restaurant',
                'posts_per_page'        => 5,
                'category_name'         => 'restaurants',
                'ignore_sticky_posts'   => true,
                'orderby'               => 'comment_count',
                'order'                 => 'DESC',
                'date_query' => array(
                    array(
                        'after' => '0',
                    ),
                ),
            ) );
        ?>
        <?php if ( $popular_restaurants->have_posts() ) : ?>
        <?php while ( $popular_restaurants->have_posts() ): $popular_restaurants->the_post(); ?>
            <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a> (<?php comments_number( 'Nu stemmen!', '1', '%' ); ?>)</li>
        <?php endwhile; ?>
        <?php $post = $saved_post; ?>
        <?php else:  ?>
        <p><?php _e( 'Sorry, er gaat even iets fout. We hebben niets kunnen vinden.' ); ?></p>
        <?php endif; ?>

这样你肯定知道你在拯救和放弃。重置回原来的$ post数据。