Мне нужно получить идентификаторы почтовых сообщений из пользовательского типа сообщений случайным образом, а сообщения будут опубликованы в течение 30 дней.
Но я не могу найти решение. Как мне это сделать?
Это мой запрос.
query_posts("post_type='random_posts'&order='DESC'&posts_per_page=10"); //shuffle(query_posts())
Две заметки заранее:
Нет (если вы не создали CPT) post type random_posts
.
Не используйте query_posts
.
При этом следующее будет делать то, что вы хотите:
$args = array( 'posts_per_page' => '10', 'orderby' => 'rand' ); $random_posts = get_posts( $args ); foreach( $random_posts as $random_post ) { // do something echo $random_post->ID . '<br />\n'; // access Post ID, for instance }
Ссылка: get_posts
До сих пор ваше 30-дневное ограничение по возрасту было невозможно достичь в одном запросе. Вы можете легко получать сообщения с текущего месяца только так:
$args = array( 'posts_per_page' => '10', 'orderby' => 'rand', 'monthnum' => intval( date( 'n' ) ) ); // rest same as above
Что будет хорошо работать для вас в конце данного месяца, но возвращать плохие результаты (то есть ничего) в первый день месяца.
Другой вариант заключался бы в том, чтобы запрашивать гораздо больше сообщений, чем требуемые 10, и проверять даты, пока они проходят через результаты. Также чувствует себя взломанным.
К счастью, WP 3.7 не за горами …
WordPress 3.7 представит параметр date_query
. (Это потрясающе.)
-> Использование
Это сделает ваше требование простым, как пирог:
$args = array( 'posts_per_page' => '10', 'orderby' => 'rand', 'date_query' => array( array( 'column' => 'post_date_gmt', 'after' => '1 month ago' ) ) ); // rest same as above