При создании сайтов на 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