WP 4.0: Решение проблем с параметром ORDERBY в WP_QUERY

WP 4.0: РЕШЕНИЯ ПРОБЛЕМ С ПАРАМЕТРОМ ORDERBY В WP_QUERY

В WordPress 4.0 были исправлены проблемы, связанные с сортировкой результатов запроса с помощью класса WP_Query, особенно при сортировке по нескольким столбцам одновременно.

Сортировка результатов в WP_Query

Сортировка результатов в WP_Query определяется параметрами orderby и order, которые отвечают за часть ORDER BY в SQL-запросе.

По умолчанию:

  • orderby = post_date
  • order = DESC

DESC (убывание) означает, что результаты сортируются по столбцу post_date в обратном порядке (самые свежие публикации первыми).

Указание столбца для сортировки

Параметр orderby принимает строковое значение — имя столбца, по которому будет проводиться сортировка:

$query = new WP_Query( [ 'orderby' => 'post_title' ] );

Либо вы можете использовать синоним для post_title, который звучит как title:

$query = new WP_Query( [ 'orderby' => 'title' ] );

В результате, SQL-запрос будет выглядеть следующим образом:

ORDER BY post_title DESC

Сортировка по нескольким столбцам

В параметре orderby вы также можете указать два столбца для сортировки, отделяя их пробелом. Тогда результат будет отсортирован по двум столбцам последовательно:

$query = new WP_Query( [ 'orderby' => 'title author' ] );

И SQL-запрос будет таким:

ORDER BY post_title, post_author DESC

Но стоит быть осторожными! В данном случае такой запрос может вернуть неожиданный результат. Это связано с тем, что порядок сортировки DESC применяется только к второму столбцу, а для первого используется порядок ASC. По умолчанию в MySQL столбцы сортируются по возрастанию — от меньшего к большему (ASC).

Исправления в WP 4.0

В WP 4.0 эта ошибка была исправлена. Теперь порядок сортировки устанавливается для всех указанных столбцов. То есть:

$query = new WP_Query( [ 'orderby' => 'title author' ] );

будет возвращать:

ORDER BY post_title DESC, post_author DESC

Кроме того, в WP 4.0 появилась возможность задавать порядок сортировки для каждого столбца отдельно. Для этого в параметре orderby нужно передать массив с необходимым синтаксисом:

$query = new WP_Query( [
    'orderby' => [ 'title' => 'DESC', 'menu_order' => 'ASC' ]
] );

И SQL-запрос будет выглядеть так:

ORDER BY post_title DESC, menu_order ASC

Заключение

Использование параметров orderby и order позволяет вам гибко управлять со��тировкой постов в WordPress. Теперь, благодаря исправлениям в WordPress 4.0, вы можете с лёгкостью сортировать результаты по нескольким столбцам с настройками порядка.

Leave a Reply

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