我希望每次有人访问时,我的主页上都会出现5条随机评论。
我找到了一些代码来获取所有评论:
//add get product reviews to homepage function get_woo_reviews() { $count = 0; $html_r = ""; $title=""; $args = array( 'post_type' => 'product' ); $comments_query = new WP_Comment_Query; $comments = $comments_query->query( $args ); foreach($comments as $comment) : $title = ''.get_the_title( $comment->comment_post_ID ).''; $html_r = $html_r. "" .$title.""; $html_r = $html_r. "" .$comment->comment_content.""; $html_r = $html_r."Posted By".$comment->comment_author." On ".$comment->comment_date. ""; endforeach; return $html_r; } add_shortcode('woo_reviews', 'get_woo_reviews');
当我将简短代码添加[woo_reviews]到此测试页时,它的工作原理就很好。
[woo_reviews]
如何更改此设置,以仅获得5条随机评论?
另外,我现在该如何格式化该页面以使其仅包含5条评论,并且能够更改页面上评论的外观(间距,字体等)?
使用评论时WP_Comment_Query, 评论不能随意排列 。因此,您需要使用专用的WordPressWPDB类来使用简单的轻量级SQL查询。
WP_Comment_Query
WPDB
在下面的代码中,您可以更改样式和html结构以获得所需的输出。您还可以使用可用的短码参数 “ limit ” _(默认设置为 5 )设置_要以随机顺序显示的评论数:
add_shortcode('woo_reviews', 'get_random_woo_reviews'); function get_random_woo_reviews( $atts ){ // Shortcode Attributes $atts = shortcode_atts( array( 'limit' => '5', // <== Set to 5 reviews by default ), $atts, 'woo_reviews' ); global $wpdb; // The SQL random query on product reviews $comments = $wpdb->get_results( $wpdb->prepare(" SELECT * FROM {$wpdb->prefix}comments c INNER JOIN {$wpdb->prefix}posts p ON c.comment_post_ID = p.ID WHERE c.comment_type = 'review' AND p.post_status = 'publish' ORDER BY RAND() LIMIT %d ", intval( esc_attr($atts['limit']) ) ) ); ob_start(); // Start buffering ## CSS applied styles ?> <style> ul.product-reviews, ul.product-reviews li { list-style: none; margin:0; padding:0; line-height: normal;} ul.product-reviews li { display:block; max-width: 200px, padding: 10px; display:inline-block; vertical-align: text-top;} ul.product-reviews li .title {font-size: 1.2em;} ul.product-reviews li .content {max-width: 180px; font-size: 0.9em; margin-bottom: 6px;} ul.product-reviews li .author, ul.product-reviews li .date {display: block; font-size: 0.75em;} </style> <?php ## HTML structure ?> <ul class="product-reviews"><?php foreach ( $comments as $comment ) { ?> <li> <h4 class="title"><?php echo get_the_title( $comment->comment_post_ID ); ?></h4> <div class="content"><?php echo $comment->comment_content; ?></div> <span class="author"><?php printf( __("Posted By %s") . ' ', '<strong>' . $comment->comment_author . '</strong>' ); ?></span> <span class="date"><?php printf( __("On %s"), '<strong>' . date_i18n( 'l jS \of F Y', strtotime( $comment->comment_date) ) . '</strong>' ); ?></span> </li> <?php } ?></ul><?php return ob_get_clean(); // Return the buffered output }
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。
用法: [woo_reviews]或在php中:echo do_shortcode( "[woo_reviews]" );
echo do_shortcode( "[woo_reviews]" );