Wordpress - сортировка сообщений в зависимости от значения настраиваемого поля и по алфавиту - PullRequest
0 голосов
/ 31 августа 2011

У моего клиента есть веб-сайт с перечнем различных услуг парусного спорта. Эти сервисы имеют разные уровни подписки:

  • Free
  • Premium
  • Полное

В серверной части я настроил некоторые пользовательские поля, используя расширенные пользовательские поля (которые отлично работают как обычные пользовательские поля WP). Настраиваемое поле для этой службы называется «subscription_level», и это выпадающий список с опциями, упомянутыми выше.

Чего я пытаюсь добиться, так это отображать посты в порядке уровня подписки и в алфавитном порядке. Итак, сначала у вас будут все «Полные» услуги, отсортированные по названию, затем «Премиум» и затем «Бесплатные».

Как:

---- Полный ---

Полный сервис A

Полный сервис B

Полный сервис C

---- Премиум ---

Премиум Сервис А

Премиум Сервис B

Премиум Сервис C

---- Бесплатно ---

Бесплатный сервис A

Бесплатный сервис B

Бесплатный сервис C

В идеале это также должно иметь нумерацию страниц, но если это невозможно, это не конец света.

Я безуспешно пытался выполнить несколько пользовательских запросов на выбор, взглянув на инструкции Кодекса. Моя проблема в том, что мне нужно два способа «заказа»? Тот, который делит посты в соответствии с meta_value моего настраиваемого поля «subscription_level», и в то же время тот, который упорядочивает каждый уровень подписки по названию ... и я просто не могу найти способ достичь этого. 1043 *

Любые идеи, указывающие мне правильное направление, были бы потрясающими!

Заранее спасибо

1 Ответ

0 голосов
/ 31 августа 2011

Надеюсь, я понимаю проблему:

  • У вас есть 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/

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...