Я хочу получить последние 20 сообщений (в моем случае о продуктах WooCommerce) и показать 10 из них в случайном порядке.

На данный момент я получаю такие новые сообщения:

$args = array(
    'post_type'                     => 'product',
    'orderby'                       => 'date',
    'order'                         => 'DESC',
    'posts_per_page'                => 20,
);

Я знаю, что могу получать сообщения в произвольном порядке, например:

'orderby'                       => 'rand',
'posts_per_page'                => 10,

Но как можно совместить эти два? w Есть ли способ сохранить сообщения из первого цикла и использовать их во втором цикле?

2
Cray 6 Сен 2020 в 12:55

1 ответ

Лучший ответ

Есть несколько способов сделать это, это один из них.

  • wp_get_recent_posts (array $ args = array (), string $ output = ARRAY_A) - Получить несколько последних сообщений.
  • shuffle (array & $ array): bool - эта функция перемешивает ( рандомизирует порядок элементов в массиве. Он использует генератор псевдослучайных чисел, который не подходит для криптографических целей.
  • array_splice - удалите часть массива и замените ее на что-то другое
$recent_posts = wp_get_recent_posts( array(
    'numberposts' => 20, // Number of recent posts
    'post_status' => 'publish', // Show only the published posts
    'post_type'   => 'product'
));

// array_splice ( array, offset, length )
$sub = array_splice( $recent_posts, 10, 10 );

// Random
shuffle( $sub );

array_splice( $recent_posts, 10, 0, $sub );

// Loop
foreach( $recent_posts as $post ) {
    echo $post['ID'] . '<br>';
    //echo '<pre>', print_r( $post, 1), '</pre>';
}

wp_reset_query();
1
7uc1f3r 6 Сен 2020 в 10:27