Вопрос или проблема
У меня есть PHP-код, как показано ниже, в котором я хочу отсортировать массив WP_Post Object
по полю объекта post_date
.
if ( $search ) {
$area_query = new \WP_Query( [
's' => $search,
'post_type' => 'abc-xyz',
'post_status' => 'publish'
] );
}
Вот что я пытался сделать, чтобы отсортировать массив WP_Post object
, но это, похоже, не работает.
if ( $search ) {
$area_query = new \WP_Query( [
's' => $search,
'post_type' => 'abc-xyz',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'ASC',
] );
}
Описание проблемы:
Интересно, какие изменения мне следует внести в PHP-код выше, чтобы он сортировал массив объектов WP_Post
по дате.
Интересно, какие изменения мне следует внести в PHP-код выше, чтобы он сортировал массив объектов WP_Post по дате.
WordPress/PHP не сортирует объекты, это не так работает. Более того, аргумент sort
не принимает имя полей объекта. Эти два понятия не связаны. Порядок постов определяется результатами строк из таблицы постов, возвращаемыми SQL-запросом.
Вместо этого, sort
— это параметр, используемый для составления SQL-запроса. Если мы посмотрим на документацию, мы увидим допустимые значения, так что вы уже используете правильные параметры порядка:
$area_query = new \WP_Query( [
's' => $search,
'post_type' => 'abc-xyz',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'ASC',
] );
Вышеуказанный код запрашивает у базы данных посты, отсортированные по дате в порядке возрастания (например, 1AD, 2AD, 500AD, 1000AD, 2000AD и т.д.). Возможно, вы хотели обратный порядок.
Заметьте, что если вы храните данные в пост мета, это не сработает, date
здесь — это дата публикации поста.
Ответ или решение
Для правильной сортировки массива объектов WP_Post
по полю post_date
в PHP вам необходимо воспользоваться возможностями класса WP_Query
, который отвечает за выполнение SQL-запросов к базе данных WordPress. Вот шаги, которые помогут вам реализовать эту задачу:
Контекст проблемы
Вы уже используете класс WP_Query
для выполнения запроса, и ваш основной целью является сортировка результатов по дате публикации (post_date
). Однако возникают проблемы с применением параметров сортировки.
Четкий план действий
-
Убедитесь в корректности параметров:
Ваш текущий набор параметров дляWP_Query
уже содержит правильные настройки для сортировки:$area_query = new \WP_Query([ 's' => $search, 'post_type' => 'abc-xyz', 'post_status' => 'publish', 'orderby' => 'date', 'order' => 'ASC' // Или 'DESC' для обратного порядка ]);
Эти параметры гарантируют, что запрос к базы данных сортирует посты по дате их публикации.
-
Проверьте правильность использования аргументов:
Убедитесь, что вы используете корректные слэш-коды в PHP, так как в приведенном примере используется=>
вместо=>
. Это важно при копировании кода из HTML-документов. -
Понимание работы WordPress:
Параметрыorderby
иorder
контролируют сортировку непосредственно на уровне запроса SQL. Обратите внимание, чтоorderby
поддерживает множество значений помимоdate
, таких какtitle
,name
,modified
и другие. Это поможет, если в будущем потребуется другая сортировка. -
Убедитесь в отсутствии мета-полей:
Еслиpost_date
— часть мета-полей поста, а не стандартное поле, вы не сможете прямо использоватьorderby
сdate
. В этом случае потребуется использовать дополнительные параметры и функции, такие какmeta_key
иmeta_value_num
. -
Дополнительные проверки:
Проверьте, что никакие фильтры или хуки не изменяют результаты запроса в другом коде темы или плагинах, что может повлиять на сортоировку.
Заключение
Если вы хотите гарантировать корректность запроса, всегда изучайте документацию WordPress и следуйте соответствующим рекомендациям. Это не только сэкономит время, но и позволит быстрее достичь ожидаемых результатов.
Эта информация направлена на решение вашей задачи с использованием существующих возможностей WordPress, что минимизирует необходимость в повторном написании кода и обеспечивает его надежность.
Эти простые шаги помогут вам правильно сортировать массив объектов WP_Post
по дате публикации. Если какие-то аспекты остались неясными, рекомендуется обратиться к документации WordPress или специализированным форумам для получения дополнительной информационной поддержки.