Надеюсь, я понимаю проблему:
- У вас есть post_type "services" (или это ваши стандартные сообщения)
- каждая из этих служб имеет уровень подписки, например, «бесплатный», «премиум» или «полный», хранящиеся в настраиваемом поле
Итак, первое, что нужно сделать, - это классифицировать посты по этим уровням.
Впоследствии внутри этих уровней посты должны быть упорядочены в соответствии с их названием (или другим).
Я не уверен, что это легко сделать с помощью одного пользовательского SQL-запроса. Предполагается, что это будет что-то вроде этого:
SELECT * FROM wp_posts,wp_postmeta.meta_value INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id WHERE wp_posts.post_status='publish' AND wp_postmeta.meta_key = "service" ORDER BY wp_postmeta.meta_value, wp_posts.post_title, ASC
Но если это усложняется, вы можете выбрать другой способ достижения этой цели. Соберите идентификаторы всех сообщений «Полный сервис», идентификаторы всех сообщений «Премиум сервис» и идентификаторы всех сообщений «Бесплатный сервис», например
SELECT wp_posts.post_ID FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id WHERE wp_postmeta.meta_key = "service" and wp_postmeta.meta_value="premium"
(сделать это для каждого вида услуг)
После этого вы запускаете WP_QUERY с массивом 'posts_in' или другим настраиваемым SQL-запросом, где вы упорядочиваете собранные посты по названию или по новому значению.
В зависимости от того, какой тип пейджинга вы хотите использовать, есть запись в блоге о том, как вы можете легко интегрировать пользовательский пейджинг:
http://www.blackbam.at/blackbams-blog/2011/07/18/implementing-a-simple-and-flexible-paging-algorithm-using-php/
Надеюсь, это поможет.