2013-11-28 2 views
0

Я пытаюсь сделать wp_query, чтобы получить последний порядок сообщений x с помощью meta_value и ID. Значение prop_featured может быть 1 или 0. Я хочу получить список сообщений с теми, у кого prop_featured = 1 как первые, а затем остальные, заказанные по ID. Вот мой аргумент массив:WP_Query orderby meta_key и id

  $args = array(
      'post_type'   => $type, 
      'post_status'  => 'publish', 
      'paged'    => 0, 
      'posts_per_page' => 10, 
      'meta_key'   => 'prop_featured', 
      'orderby'   => 'meta_value ID', 
      'order'    => 'DESC' 

     ); 

Я также попробовать использовать фильтры

  function my_order($orderby) { 
     global $wpdb; 
     $orderby = 'wp_postmeta.meta_value, wp_posts.ID DESC'; 
     return $orderby; 
     } 

    add_filter('posts_orderby', 'my_order'); 
    $recent_posts = new WP_Query($args); 
    remove_filter('posts_orderby', 'my_order'); 

ответ

0

Решение было работать с фильтрами. Моя ошибка в том, что я не поставил порядок после каждого параметра Вместо wp_postmeta.meta_value, wp_posts.ID DESC 'должно быть' wp_postmeta.meta_value DESC, wp_posts.ID DESC ';

Вот правильный код:

 add_filter('posts_orderby', 'my_order'); 
     $recent_posts = new WP_Query($args); 
     remove_filter('posts_orderby', 'my_order'); 

    function my_order($orderby) { 
     global $wpdb; 
     $orderby = 'wp_postmeta.meta_value DESC, wp_posts.ID DESC'; 
    return $orderby; 
     } 

Надеется, что это помогает.

0

Попробуйте заменить 'orderby' => 'meta_value ID', с 'orderby' => 'meta_value_num ID',

+0

я сделал - тот же результат – Crerem

0

На мой взгляд, самое простое решение, чтобы заменить ваш первоначальный orderby массивом, например:

$args = array(
    'post_type'  => $type, 
    'post_status' => 'publish', 
    'paged'   => 0, 
    'posts_per_page' => 10, 
    'meta_key'  => 'prop_featured', 
    'orderby'  => array('meta_value_num' => 'DESC', 'ID' => 'DESC') 
); 
Смежные вопросы