Dica de PHP · publicada em
wp_parse_args($args, $defaults) é o idiomático no WordPress: mescla arrays associativos, com $args vencendo. Ele é raso, então array aninhado é substituído inteiro, não mesclado — o que pega muita gente em meta_query.
O spread [...$a, ...$b] também mescla, mas trata chave numérica de forma diferente: em vez de sobrescrever pelo índice, ele reindexa e concatena. Para lista isso é o que você quer; para array associativo com chaves numéricas, é surpresa.
Regra prática: array de opções nomeadas, use wp_parse_args. Concatenar listas, use spread. E quando precisar de mesclagem profunda, escreva a função recursiva — nenhum dos dois faz isso.
$defaults = ['post_type' => 'post', 'posts_per_page' => 10];
$args = wp_parse_args($args, $defaults); // associativo
$todos = [...$ids_a, ...$ids_b]; // listas concatenadas
// atencao: nenhum dos dois faz merge profundo
// $args['meta_query'] substitui o default inteiro
Na prática: opções nomeadas: wp_parse_args. Listas: spread. Aninhado: escreve merge recursivo.