WordPress заказ постов по собственной мета в нумерации страниц - PullRequest
2 голосов
/ 23 февраля 2012

Я упорядочиваю свои посты по пользовательскому мета-значению с именем "size".

$querystr = "
    SELECT $wpdb->posts.* 
    FROM $wpdb->posts, $wpdb->postmeta
    WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
    AND $wpdb->postmeta.meta_key = 'size'
    AND $wpdb->posts.post_status = 'publish' 
    AND $wpdb->posts.post_type = 'post'
    AND $wpdb->posts.post_date < NOW()
    ORDER BY $wpdb->postmeta.meta_value DESC
 ";

 $pageposts = $wpdb->get_results($querystr, OBJECT);

if ($pageposts):
  global $post; 
  foreach ($pageposts as $post):      
  setup_postdata($post);     
      the_title();      
  endforeach;    
endif; 

wp_pagenavi(); //creates page navigation

В то же время я использую плагин WP-pagenavi для навигации по постам по страницам.У меня есть 10 сообщений на каждой странице.

Проблема: посты заказываются отдельно на каждой странице.Как заказать записи в порядке убывания на всех страницах?

Обновление: Возможно, я нашел решение, но не уверен, как реализовать его в своем коде

http://scribu.net/wordpress/wp-pagenavi/wpn-2-74.html

$my_query = new WP_Query( array( 'tag' => 'foo', 'paged' => get_query_var('paged') ) );

while ( $my_query->have_posts() ) : $my_query->the_post();
    the_title();
    // more stuff here
endwhile;

wp_pagenavi( array( 'query' => $my_query ) );

wp_reset_postdata();    // avoid errors further down the page

1 Ответ

1 голос
/ 24 февраля 2012

Я нашел ТАК сообщение, которое может решить вашу проблему:

Как отсортировать функцию query_posts по настраиваемому полю, при этом ограничение сообщений другим настраиваемым полем

Там вы найдете пользовательский класс, расширяющий WP_Query и позволяющий вам сделать запрос, упорядоченный по настраиваемому полю, а также включить запрос paged var.

Итак, шаги:

  1. Прошёл код class PostsOrderedByMetaQuery где-нибудь как в вашем functions.php

  2. Замените ваш запрос на:

    // Retrieve `paged` in URL
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    
    // Make the query like in WP_Query but with our custom class
    $query = new PostsOrderedByMetaQuery(array(
      'post_type'   => 'post',
      'post_status' => 'publish',
      'paged'       => $paged,
      'orderby_meta_key' => 'size',
      'orderby_order'    => 'DESC'        
    ));
    
  3. Используй это!

    while ( $query->have_posts() ) : $query->the_post();
        the_title();
        // more stuff here
    endwhile;
    
    wp_pagenavi( array( 'query' => $query ) );
    
    wp_reset_postdata();    // avoid errors further down the page
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...