Intereting Posts
Импортировать демо-данные в шаблон wordpress Почему я не могу добавить этот фид в RSS-виджет? Подготовить meta_value к постоянной ссылке Многоязычный многоуровневый> настраиваемый нижний колонтитул на разных сайтах с виджетами? Время выполнения WP_Query Постоянная ссылка изменяется при редактировании опубликованной публикации в пользовательском типе сообщения WordPress изменить Настройки> Постоянная ссылка (options-permalink.php) Добавить параметры CPT Permalink WP_Query hit max присоединяется … Как еще я могу создать функцию поиска, которая использует пользовательские поля? Добавить пункт меню профиля BuddyPress Как я могу правильно помещать теги <link> в WordPress для использования с веб-компонентами? Индивидуальная компоновка страницы после листинга пользовательского типа сообщения shortcode_unautop shortcode не работает Какие фильтры применяются к функции_content? Inherit Featured Image From Page to Media Связать изображения с различными объектами, в зависимости от режима просмотра (домашняя страница, полная статья)

Самые комментируемые / популярные сообщения и смещение

Я использую этот код, чтобы показать 3 наиболее популярных сообщения, основанных на количестве комментариев:

<?php $pop_posts = 3; $popularposts = "SELECT $wpdb->posts.ID, $wpdb->posts.post_title, COUNT($wpdb->comments.comment_post_ID) AS 'stammy' FROM $wpdb->posts, $wpdb->comments WHERE comment_approved = '1' AND $wpdb->posts.ID=$wpdb->comments.comment_post_ID AND post_status = 'publish' AND comment_status = 'open' GROUP BY $wpdb->comments.comment_post_ID ORDER BY stammy DESC LIMIT ".$pop_posts; $posts = $wpdb->get_results($popularposts); if($posts){ foreach($posts as $post){ $post_title = stripslashes($post->post_title); $guid = get_permalink($post->ID); $thumb = get_post_meta($post->ID,'_thumbnail_id',false); $thumb = wp_get_attachment_image_src($thumb[0], 'popular-posts-image', false); $thumb = $thumb[0]; ?> <?php if ($thumb) { ?> <img src="<?php echo $thumb; ?>" width=80 height=80 /> <?php } ?> <h4><a href="<?php echo $guid; ?>" title="<?php echo $post_title; ?>"><?php echo $post_title; ?></a></h4> <div class="clear"></div> <?php } } ?> 

но я хочу использовать этот код в двух разных местах, поэтому я хочу компенсировать первые 3 сообщения. Есть ли способ компенсировать три сообщения? благодаря

Вот ваш код, завернутый в плагин. Важно то, что он prepare() к вводу, поэтому запрос безопасен. Вы можете определить 2 аргумента: Offset & Limit. В основном это просто SQL LIMIT .

Если у вас нет пользы для плагина, просто отключите его, так как он ничего не сделает – его выход подключен к фильтру …

 $most_commented = apply_filters( 'wpse70027_display_comments', 0, 3 ); // Now process the result in your template... 

… который можно просто поместить в любой файл шаблона.

 <?php /** * Plugin Name: (#70027) »kaiser« Get Most Commented. * Description: Just place the filter in your themes template file and you're ready to go. */ function wpse70027_get_comments( $offset = 0, $limit = 10 ) { global $wpdb; static $instance; // Validate input $offset = absint( $offset ); $limit = absint( $limit ); // Prevent wrong user input 0 > $offset AND $instance['offset'] = 0; // Setup offset/limit as 0/10 on the 1st run ! isset( $instance['offset'] ) AND $instance['offset'] = $offset; ! isset( $instance['limit'] ) AND $instance['limit'] = $limit; // Setup the query string ! isset( $instance['query'] ) AND $instance['query'] = " SELECT $wpdb->posts.ID, $wpdb->posts.post_title, COUNT($wpdb->comments.comment_post_ID) AS cmt FROM $wpdb->posts, $wpdb->comments WHERE comment_approved = '1' AND $wpdb->posts.ID = $wpdb->comments.comment_post_ID AND post_status = 'publish' AND comment_status = 'open' GROUP BY $wpdb->comments.comment_post_ID ORDER BY cmt DESC LIMIT %d, %d "; ! isset( $instance['posts'] ) AND $instance['posts'] = array(); // Three conditions trigger a new query: # A) Plugin is running the first time and 'posts' isn't set # B) The input offset is below the default offset # C) The input limit is above the default limit if ( ! isset( $instance['posts'] ) OR ! in_array( $offset, range( $instance['offset'], $instance['limit'] ) ) OR ! in_array( $limit, range( $instance['offset'], $instance['limit'] ) ) ) { // Adjust the range $instance['offset'] = $instance['offset'] > $offset ? $offset : $instance['offset']; $instance['limit'] = $instance['limit'] < $limit ? $limit : $instance['limit']; $instance['posts'] = $wpdb->get_results( $wpdb->prepare( $instance['query'] ,$instance['offset'] ,$instance['limit'] ) ); } // Only return what was requested return array_intersect_key( $instance['posts'] ,range( $offset, $limit ) ); } add_filter( 'wpse70027_display_comments', 'wpse70027_get_comments', 10, 2 ); , <?php /** * Plugin Name: (#70027) »kaiser« Get Most Commented. * Description: Just place the filter in your themes template file and you're ready to go. */ function wpse70027_get_comments( $offset = 0, $limit = 10 ) { global $wpdb; static $instance; // Validate input $offset = absint( $offset ); $limit = absint( $limit ); // Prevent wrong user input 0 > $offset AND $instance['offset'] = 0; // Setup offset/limit as 0/10 on the 1st run ! isset( $instance['offset'] ) AND $instance['offset'] = $offset; ! isset( $instance['limit'] ) AND $instance['limit'] = $limit; // Setup the query string ! isset( $instance['query'] ) AND $instance['query'] = " SELECT $wpdb->posts.ID, $wpdb->posts.post_title, COUNT($wpdb->comments.comment_post_ID) AS cmt FROM $wpdb->posts, $wpdb->comments WHERE comment_approved = '1' AND $wpdb->posts.ID = $wpdb->comments.comment_post_ID AND post_status = 'publish' AND comment_status = 'open' GROUP BY $wpdb->comments.comment_post_ID ORDER BY cmt DESC LIMIT %d, %d "; ! isset( $instance['posts'] ) AND $instance['posts'] = array(); // Three conditions trigger a new query: # A) Plugin is running the first time and 'posts' isn't set # B) The input offset is below the default offset # C) The input limit is above the default limit if ( ! isset( $instance['posts'] ) OR ! in_array( $offset, range( $instance['offset'], $instance['limit'] ) ) OR ! in_array( $limit, range( $instance['offset'], $instance['limit'] ) ) ) { // Adjust the range $instance['offset'] = $instance['offset'] > $offset ? $offset : $instance['offset']; $instance['limit'] = $instance['limit'] < $limit ? $limit : $instance['limit']; $instance['posts'] = $wpdb->get_results( $wpdb->prepare( $instance['query'] ,$instance['offset'] ,$instance['limit'] ) ); } // Only return what was requested return array_intersect_key( $instance['posts'] ,range( $offset, $limit ) ); } add_filter( 'wpse70027_display_comments', 'wpse70027_get_comments', 10, 2 ); , <?php /** * Plugin Name: (#70027) »kaiser« Get Most Commented. * Description: Just place the filter in your themes template file and you're ready to go. */ function wpse70027_get_comments( $offset = 0, $limit = 10 ) { global $wpdb; static $instance; // Validate input $offset = absint( $offset ); $limit = absint( $limit ); // Prevent wrong user input 0 > $offset AND $instance['offset'] = 0; // Setup offset/limit as 0/10 on the 1st run ! isset( $instance['offset'] ) AND $instance['offset'] = $offset; ! isset( $instance['limit'] ) AND $instance['limit'] = $limit; // Setup the query string ! isset( $instance['query'] ) AND $instance['query'] = " SELECT $wpdb->posts.ID, $wpdb->posts.post_title, COUNT($wpdb->comments.comment_post_ID) AS cmt FROM $wpdb->posts, $wpdb->comments WHERE comment_approved = '1' AND $wpdb->posts.ID = $wpdb->comments.comment_post_ID AND post_status = 'publish' AND comment_status = 'open' GROUP BY $wpdb->comments.comment_post_ID ORDER BY cmt DESC LIMIT %d, %d "; ! isset( $instance['posts'] ) AND $instance['posts'] = array(); // Three conditions trigger a new query: # A) Plugin is running the first time and 'posts' isn't set # B) The input offset is below the default offset # C) The input limit is above the default limit if ( ! isset( $instance['posts'] ) OR ! in_array( $offset, range( $instance['offset'], $instance['limit'] ) ) OR ! in_array( $limit, range( $instance['offset'], $instance['limit'] ) ) ) { // Adjust the range $instance['offset'] = $instance['offset'] > $offset ? $offset : $instance['offset']; $instance['limit'] = $instance['limit'] < $limit ? $limit : $instance['limit']; $instance['posts'] = $wpdb->get_results( $wpdb->prepare( $instance['query'] ,$instance['offset'] ,$instance['limit'] ) ); } // Only return what was requested return array_intersect_key( $instance['posts'] ,range( $offset, $limit ) ); } add_filter( 'wpse70027_display_comments', 'wpse70027_get_comments', 10, 2 ); 

И нет, нет никакой разницы в производительности, когда вы помещаете его в свой файл functions.php. Единственное, что этот код уйдет на обновление или изменение темы, поэтому лучше оставить его внутри плагина.

Вы можете использовать запрос WordPress, чтобы иметь несколько циклов на одной странице и смещать счет во втором цикле.

 <?php $args = array( 'posts_per_page' => 3, 'orderby' => 'comment_count' ); $the_query = new WP_Query( $args ); ?> <?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> //Put what you want to output here <?php endwhile; endif; ?> <?php wp_reset_postdata(); ?> 

Затем вы просто компенсируете его во втором запросе.

 <?php $args = array( 'posts_per_page' => 3, 'orderby' => 'comment_count', 'offset' => 3 ); $the_query = new WP_Query( $args ); ?> <?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> //Put what you want to output here <?php endwhile; endif; ?> 

http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters