How can I get wp_head() as a string instead of echoing it?

You can use PHP’s output buffering. WIth this you can write a wrapper for the get_head() function

function wpse251841_wp_head() {
    ob_start();
    wp_head();
    return ob_get_clean();
}

You can then use this as

$data = array(
    'wpHead' => wpse251841_wp_head(),
    'postContent' => $post->post_content,
    'postContentFiltered' => apply_filters( 'the_content', $post->post_content )
);

Reference: Output Control Functions

Leave a Comment