首先,抱歉我的英语不好。
我在我的主页上使用此代码来显示特定类别的评论最多的帖子:
<?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');
}
如何才能实现,而不是显示评论最多的帖子,而不是显示我主页上投票率最高的帖子?
我不知道它是否可能。希望有人可以帮助我。
提前多多感谢!
答案 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数据。