The main problem is the AND logic that wordpress uses when creating a sql query.
This query will look for posts that have both author = 2
and meta query, additional_author that is LIKE 2.
Your best bet is to create your own query to achive this result.
I have created a static query for you to try
global $wpdb;
$sql="SELECT *";
$sql .= " FROM {$wpdb->prefix}posts AS p";
$sql .= " JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id";
$sql .= ' WHERE (p.post_author = 2';
$sql .= ' OR (pm.meta_key = \'additional_author\' AND pm.meta_value LIKE \'%2%\'))';
$sql .= ' AND p.post_type = \'post\'';
$sql .= ' AND p.post_status = \'publish\'';
$sql .= ' GROUP BY p.ID';
$sql .= ' ORDER BY p.post_date DESC';
$sql .= ' LIMIT 5';
$results = $wpdb->get_results($sql);
print_r($results);
This is almost an exact copy of the query WordPress has built but with a small change, OR
instead of AND
.
Its a bit resource pricy because OR logic will create two tables to search in but it will do the work.
We don’t have to use $wpdb->prepare
because all the sql is hardcoded by us, if you would like this query to be dynamic let me know and ill update the answer.