Como @Rarst explica, os códigos de acesso normalmente são executados muito tarde para você redirecionar de dentro de um. Eles geralmente são executados no the_content
hook, que é bem depois que o conteúdo é enviado para o navegador. Se você precisar redirecionar com base na presença de um shortcode, será necessário verificar esse código antes de qualquer conteúdo sair do servidor.
function pre_process_shortcode() {
if (!is_singular()) return;
global $post;
if (!empty($post->post_content)) {
$regex = get_shortcode_regex();
preg_match_all('/'.$regex.'/',$post->post_content,$matches);
if (!empty($matches[2]) && in_array('yourshortcodeslug',$matches[2]) && is_user_logged_in()) {
// redirect to third party site
} else {
// login form or redirect to login page
}
}
}
add_action('template_redirect','pre_process_shortcode',1);
Isso é "prova de conceito". As condições particulares de que você precisa provavelmente serão diferentes. Note que isso é um pouco "pesado" de processamento. Eu me certificaria de que só funcionasse onde fosse absolutamente necessário.