В чем разница между "получать сообщения" и "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() делает, чего я еще не понимаю.

Author: Mayeenul Islam, 2013-08-20

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 во втором аргументе).

 2
Author: Stephen Harris, 2013-08-20 11:50:33