РЕДАКТИРОВАНИЕ 2: вместо того, чтобы выяснять действительное решение, я решил использовать обходное решение, и просто устанавливаю значение по умолчанию для book_in_series к '0'. Благодаря @eddiemoya для всех его время он потратил рассмотрение этого со мной!
Править: У меня был другой вопрос с необходимой регистрацией полного кода для этой страницы архива / запрос, если требуется видеть, что это здесь.
Этот запрос работает отлично, но не включает сообщений, которые не имеют meta_key 'book_in_series' (который определяет значение вида). То, что я хотел бы иметь, происходят, - чтобы книги были отсортированы по этому значению, если оно существует, иначе возвратитесь неприказанные. Это возможно?
$args = array(
'post_type' => 'books',
'posts_per_page' => -1,
'nopaging' => true,
'surpress_filters' => true,
'orderby' => 'meta_value',
'meta_key' => 'book_in_series',
'order' => 'ASC',
'post_parent' => $current_series_id,
);
$books = new WP_Query( $args);
Кажется, что этот ответ от Rarst приближается, но я не уверен, как адаптировать его к моим обстоятельствам. Пользовательский запрос с query_posts не показывает сообщение без определенного meta_key
Заранее спасибо за Вашу справку!
Вместо того, чтобы выяснять действительное решение, я решил использовать обходное решение и просто устанавливаю значение по умолчанию для book_in_series к '0'.
Чтобы быть ясными, Вы означаете говорить, что любые объекты, которые не имеют book_in_series ключа, просто будут внизу и не заказаны, но те, которые действительно имеют его, будет в главном и заказанном ASC тем ключом.Правильно?
meta_query используется для определения, какие объекты Вы хотите быть возвращенными, orderby используется для определения, что отсортировать те объекты по. Однако meta_key (который удерживается от использования как средство указать, который сообщения добраться) необходим, если Вы хотите использовать orderby.
Необходимо добавить к тому запросу, meta_query, который указывает сообщения, которые Вы хотите. Я предлагаю удалить meta_key при тестировании его, так, чтобы Вы знали, что meta_key не возвращается к своему старому поведению. После того как Вы знаете, что у Вас есть сообщения, которые Вы хотите, откладываете meta_key и orderby в, и он должен отсортировать те сообщения соответственно.
http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
http://scribu.net/wordpress/advanced-metadata-queries.html
могу я orderby одно пользовательское поле и meta_query другой в том же запросе
Править: Грубая попытка того, на что должен быть похожим Ваш запрос, прочитай комментарии объяснения.
$meta_query = array(
'relation' => 'OR',
array(
'key' => 'book_in_series',
'compare' => 'IN'
),
array(
'key' => 'book_in_series',
'compare' => 'NOT IN'
)
);
$args = array(
'post_type' => 'books',
'posts_per_page' => -1,
'nopaging' => true,
'subpress_filters' => true,
'meta_query' => $meta_query,
//'orderby' => 'meta_value',
//'meta_key' => 'book_in_series',
//'order' => 'ASC',
'post_parent' => $current_series_id
);
$query = new WP_Query( $args );
Я прокомментировал объекты, связанные с сортировкой - если с этим запросом, Вы получаете сообщения, Вы хотите, затем пытаетесь удалить комментарии и видеть, сортирует ли это, не переопределяя meta_query
После поиска некоторое время я нашел по-видимому лучшее решение, чем необходимость в значении по умолчанию, к которому я собирался обратиться. Я хотел бы знать Ваши мысли. Я выполнил два запроса. Один для создания массива идентификаторов сообщений для исключения и другой для показывания сообщений. Базирующийся это на информации я нашел здесь: http://wordpress.org/support/topic/remove-single-post-from-query
$posts_to_exclude_args = array(
'cat' => '3772',
'post_status' => 'publish',
'orderby' => 'date',
'meta_value' => 'yes_exclude_this_post',
);
$posts_to_exclude = new WP_Query( $posts_to_exclude_args );
$to_exclude = array();
while ( $posts_to_exclude->have_posts() ) : $posts_to_exclude->the_post();
$to_exclude[] = $post->ID;
endwhile;
$posts_args = array(
'post__not_in' => $to_exclude,
'cat' => '-3772', //Exclude slideshow, video
'post_status' => 'publish',
'paged'=>$page,
'posts_per_page' => 10,
'orderby' => 'date',
);
$posts = new WP_Query( $posts_args );