O exemplo acima está próximo o suficiente, mas ainda não está correto. A idéia é que você precise criar seu próprio ID da instância do bloco (no meu caso devel_execute_php_1112 (talvez porque tentei fazê-lo funcionar 1112 vezes, ele permanecerá um mistério)) e, em seguida, o ID do bloco real (aquele que é declarado para os blocos personalizados na anotação) e o tema. Em seguida, basta definir a região e você estará pronto para ir. Criou uma instância de um bloco na região desejada.
$blockEntityManager = \Drupal::service('entity.manager')->getStorage('block');
$block = $blockEntityManager->create(
array(
'id'=> 'devel_execute_php_1112',
'plugin' => 'devel_execute_php',
'theme' => 'seven'
)
);
$block->setRegion('content');
$block->save();
edit1: Na verdade, verifiquei mais tarde o comentário acima - e está certo. Simplesmente não está claro que o id seja algo que você precise criar. Como redenção do meu comentário coxo, publicarei uma solução sobre como criar uma instância de bloco de uma entidade de bloco personalizada:
$blockEntityManager = \Drupal::service('entity.manager')->getStorage('block');
$block = $blockEntityManager->create(
array(
'id'=> 'ggggggggsssssss',
'plugin' => 'block_content:79d53b4e-9e60-4f97-befc-101da919bb7a',
'theme' => 'visitb_he_theme'
)
);
$block->setRegion('content');
basicamente o mesmo, mas para um plug-in você escreve block_content: uuid_of_custom_block_entity_instance