В чем разница между "получать сообщения" и "wp получать последние сообщения" при использовании с "настройкой постданных"?
Это может быть полностью вопрос типа "Я все еще новичок в WP", но я столкнулся с некоторыми интересными выводами при использовании get_posts()
и wp_get_recent_posts()
в пользовательской функции, которую я написал с setup_postdata()
. Вот что у меня было в моем functions.php файл:
<?php
function getRecentPosts($total_posts = 2)
{
$total_posts = intval($total_posts);
global $post;
$args = array(
'posts_per_page' => $total_posts,
'post_type' => 'post',
'post_status' => 'publish'
);
$posts = get_posts($args);
foreach ($posts as $post)
{
setup_postdata($post);
echo '<div>';
the_title();
echo '</div>';
}
wp_reset_postdata();
}
Просто, верно? И эта функция отлично работает, отлично отбрасывая теги заголовка внутри div
. Но когда я заменяю строки 7-12 следующим:
...
$args = array(
'posts_per_page' => $total_posts,
//'post_type' => 'post',
'post_status' => 'publish'
);
$posts = wp_get_recent_posts($args);
...
...затем функция похоже, что он неправильно "перебирает" сообщения, снова и снова выбрасывая заголовок первого найденного сообщения, как если бы вы не использовали global $post
в начале функции.
Почему это так? Есть ли что-то другое, что wp_get_recent_posts()
делает, чего я еще не понимаю.
1 answers
Если вы посмотрите на источник setup_postdata()
, вы обнаружите, что для передачи требуется объект ($post
), а не массив.
wp_get_recent_posts()
( источник), по умолчанию (для обратной совместимости до версии 3.1) возвращает каждую запись в виде массива. Второй, необязательный аргумент, который может быть передан wp_get_recent_posts()
, может предотвратить это:
$posts = wp_get_recent_posts( $args, OBJECT_K )
(хотя подойдет любое значение, отличное от ARRAY_A
во втором аргументе).