Делал как-то для вывода праздников на сегодня и ближайшие праздники.
Скрипт сначала выбирает вообще все праздники из БД и потом уже на уровне php выбирает будущие праздники от сегодняшней даты вместе с сегодняшней.
<?php
$args = array(
'numberposts' => -1,
'post_type' => 'post'
);
$posts = get_posts($args);
//список записей без года
foreach ($posts as $post) {
$md[$post->ID]['date'] = date("m-d", strtotime($post->post_date));
$md[$post->ID]['id'] = $post->ID;
$md[$post->ID]['post_title'] = $post->post_title;
}
//группировка по дате
$resultArray = array();
array_walk($md, function($item, $key) use (&$resultArray)
{
$resultArray[$item['date']][] = $item;
});
//сортировка в порядке возрастания записей от текущей даты(на ближайшие 20 дней)
$new_posts = array();
for ($i = 0; $i < 20; $i++) {
$nd = date('m-d', strtotime(date('Y-m-d') . '+' . $i . 'day'));
if (!empty($resultArray[$nd])) {
$new_posts[$nd] = $resultArray[$nd];
}
}
в результате в массиве за одну дату может быть несколько записей
Array
(
[09-21] => Array
(
[0] => Array
(
[date] => 09-21
[id] => 83
[post_title] => праздник 1
)
[1] => Array
(
[date] => 09-21
[id] => 122
[post_title] => праздник 2
)
[2] => Array
(
[date] => 09-21
[id] => 167
[post_title] => праздник 3
)
)
[09-29] => Array
(
[0] => Array
(
[date] => 09-29
[id] => 357448
[post_title] => праздник 1
)
[1] => Array
(
[date] => 09-29
[id] => 357445
[post_title] => праздник 2
)
)
)
если записей много, то результат можно на время кэшировать
-
Ответ изменён 4 года, 6 месяцев назад пользователем qwert555.
-
Ответ изменён 4 года, 6 месяцев назад пользователем qwert555.
Спасибо большое.
Теперь остается понять как из массива вывести post_title. Пробовал через foreach, но как то грустно получилось.
Хотя через print_r видно, что массив тот что нужен.
Для вывода получилась такая конструкция
foreach ($new_posts as $value_key => $value) {
foreach ($value as $value_key1 => $value1) {
foreach ($value1 as $value_key2 => $value2) {
echo $value2; //выводит все переменные
echo $value2[‘post_title’]; //а вот одну по ключу выводить никак не желает
echo ‘<br />’;
}
}
}
Понятно, что где то ошибся. А вот где понять не могу. Был бы очень благодарен за помошь.
Все записи выводятся сгруппированные по дате.
foreach($new_posts as $key=>$val) {
echo '<b>'.$key.'</b><br>';
foreach($val as $nm) {
echo '<a href="'.get_the_permalink($nm['id']).'">'.$nm['post_title'].'</a><br>';
}
}
И если нужно ограничить количество выводимых записей, то нужно добавить счетчик и условие, чтобы прекратить цикл.
-
Ответ изменён 4 года, 6 месяцев назад пользователем qwert555.
qwert555, Огромное Вам спасибо за помощь. Остальное, вроде бы все понятно. Большое, человеческое СПАСИБО, очень выручили 🙂