Multiple filter conditions for WP_Query

Run first query las 10 posts, than use array_rand PHP function on posts array:

$args = array(
    'posts_per_page' => 10,
    'post__not_in' =>array( $post->ID ),
    'orderby' => 'post_date',
    'order' => 'DESC'
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {

  if ( $query->post_count > 4 ) {

    $query->posts = array_rand( $query->posts, 4 ); // get 4 random posts

    $query->post_count = 4; // update post count

    // for pagination, if you need it
    $query->max_num_pages = (int) ceil( $query->found_posts / 4 ); 
  }

  // After that loop as usual
  while ( $query->have_posts() ) : $query->the_post();

    // loop here

  endwhile;
  wp_reset_postdata();

}