Вывод записей по алфавиту и мета полю

есть тип записи product, есть мета поле vip, которое может быть равно 0 или 1, как сделать сортировку вот такого типа:

что б записи у которых в мета поле vip=1 сначала выводились по алфавиту, а потом vip=0 но тоже по алфавиту, и если vip=1 нет таких записей, выводились бы vip 0 по алфавиту.

и второй вопрос как реализовать смену цвета background-color если стоит vip=1?

Заметки к вопросу:
Kama 6 лет назад

Сделай запрос WP_Query с параметром метаполя vip и сюда покажи что находится в фильтре posts_clauses

add_filter( 'posts_clauses', 'filter_function_name_1687', 10, 2 );
function filter_function_name_1687( $clauses, $this ){
	// filter...

	die( print_r( $clauses ) );
}
jw 6 лет назад

не знаю то или нет, но вот что получилось. я не силен в познаниях вп

Array ( 
	[where] => AND ( wp_term_relationships.term_taxonomy_id IN (63) ) 
				AND ( wp_postmeta.meta_key = 'vip' ) AND wp_posts.post_type = 'company' 
				AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')

	[groupby] => wp_posts.ID 
	[join] => LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 
			   INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) 
	[orderby] => wp_posts.post_title ASC 
	[distinct] => 
	[fields] => wp_posts.* 
	[limits] => LIMIT 0, 10 
)
Kama 6 лет назад

Тут можно фильтрануть orderby, но тебе нужно будет прописать условия чтобы на другие запросы не повлияло. Поэтому лучше неверное попробовать через параметры запроса указать сортировку, там возможностей тоже хватает. Что-то я сразу об этом не подумал. Скинь сюда код самого запроса, вместе с параметрами как ты указываешь. Попробую поправить его.

Ну а через этот фильтр можно так сделать:

add_filter( 'posts_clauses', 'filter_function_name_1687', 10, 2 );
function filter_function_name_1687( $clauses, $this ){
	// ВАЖНО нужны проверки чтобы другие запросы не затронуть
	$clauses['orderby'] = 'wp_postmeta.meta_value DESC, wp_posts.post_title ASC';
	return $clauses;
}
jw 5.9 лет назад
<?php
global $query_string; // параметры базового запроса
query_posts( $query_string. '&orderby=title&order=ASC'); // базовый запрос + свои параметры
if( have_posts() ){ while( have_posts() ){ the_post(); ?>
	<?php } /* конец while */ ?>
<?php
} // конец if
else 
	echo "<h2>Записей нет.</h2>";?>

Сейчас у меня просто по алфавиту сортируются записи

jw 5.9 лет назад

Спасибо решил свою проблему, оказалось все очень элементарно и просто
изменил просто свой запрос.