Сортировка по произвольному полю в WordPress

При создании сайтов на WordPress зачастую возникает необходимость максимального контроля над работой движка. Сортировка по произвольному полю одна из таких фишек.

К примеру, у Вас сайт-каталог на WordPress с различными товарами. У каждого товара вы сделали произвольное поле Цена, в котором хранится число — цена товара. А при выводе категории необходимо, чтобы товары выводились по возрастанию или убыванию цены. Логично, что вы организуете цикл WordPress в котором задаете нужные параметры. Это может выглядеть примерно так:


$posts = get_posts(array(

'cat' => 7,

'orderby' => 'meta_value',

'meta_key' => 'price',

'order' => 'ASC',

));

Здесь мы выводим товары из категории с ID = 4, сортируя их по полю price в порядке возрастания. Но на самом деле мы увидим не то, что ожидали. Товар с ценой 100р будет стоять выше, чем товар с ценой 97р. Потому, что сортировка будет происходить не для числовых, а для текстовых данных. А нам этого не нужно.

С подобным можно бороться разными способами — от помещения всех постов в массив с последующей правильной сортировкой  и выводом, то написания SQL запросов к БД вручную. Но как оказалось есть простой выход из это ситуации! Вместо ‘orderby’ => ‘meta_value’ нужно написать ‘orderby’  => ‘meta_value_num’. В этом случае все будет работать как задумано — сортировка будет происходить именно для числовых данных в нужном нам порядке.

Меток нет. Похожие записи
Запись опубликована в рубрике WordPress. Добавьте в закладки постоянную ссылку.

Один комментарий: Сортировка по произвольному полю в WordPress

  1. gru говорит:

    Очень не хватает реализации этой идеи в плагине или виджите. Править код не все могут.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>