Как вывести заголовок и ссылку рандомной страницы wp опубликованную за сегодня?
Ребята подскажите пожалуйста, как вывести заголовок и ссылку на рандомную страницу:
1. У которой родительская страница с ID 22
2. Страница которая была опубликована за сегодня
Дополнительно:
Как вывести заголовок и ссылку рандомной страницы wp опубликованную за сегодня?
Изучить документацию и написать код. Покажите, что Вы уже сделали?
Ответы:
get_posts с требуемыми критериями
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Чтобы вывести случайную опубликованную сегодня страницу с родителем ID 22, используйте
WP_Queryсpost_type => page,post_parent,date_queryиorderby => rand.Пример:
$today_page = new WP_Query([ 'post_type' => 'page', 'post_status' => 'publish', 'post_parent' => 22, 'posts_per_page' => 1, 'orderby' => 'rand', 'date_query' => [ [ 'year' => (int) current_time('Y'), 'month' => (int) current_time('m'), 'day' => (int) current_time('d'), 'inclusive' => true, ], ], ]); if ($today_page->have_posts()) { while ($today_page->have_posts()) { $today_page->the_post(); echo '<a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a>'; } wp_reset_postdata(); }
Если нужны не только прямые дочерние страницы, а все вложенные потомки родителя 22,
post_parentне хватит. Тогда сначала получите ID всех дочерних страниц:$children = get_pages([ 'child_of' => 22, 'fields' => 'ids', ]);
И передайте их в
post__in:'post__in' => $children,
Учитывайте, что
orderby => randна больших объёмах может быть тяжёлым. Если страниц мало — нормально. Если тысячами, лучше кэшировать результат на день через transient.Пример кэша:
$cache_key = 'random_today_page_' . current_time('Ymd'); $html = get_transient($cache_key); if ($html === false) { // выполнить WP_Query и собрать HTML set_transient($cache_key, $html, HOUR_IN_SECONDS); } echo $html;
Если вывод вставляется в шаблон, shortcode или виджет, обязательно экранируйте ссылку и заголовок, как в примере выше. Не выводите
post_titleнапрямую безesc_html(), особенно если материал могут редактировать разные пользователи.Также проверьте часовой пояс сайта.
current_time()берёт настройки WordPress, а не системное UTC-время сервера. Это важно, если “сегодня” должно считаться по локальному времени сайта.Если сегодня подходящих страниц нет, лучше вывести запасной текст или ничего не выводить, чтобы не получить пустой блок:
if (!$today_page->have_posts()) { echo '<p>Сегодня новых страниц нет.</p>'; }
Итог: для прямых дочерних страниц используйте
post_parent, для всех уровней вложенности —get_pages(['child_of' => 22])+post__in. Не забудьтеwp_reset_postdata(), иначе следующий цикл на странице может начать выводить не те данные.