正如@Rarst所解释的,短代码通常运行得太晚,您无法从内部重定向。他们通常在the_content
将内容发送到浏览器后很长时间内的挂钩。如果需要根据存在的短代码进行重定向,则需要在任何内容离开服务器之前检查该短代码。
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);
这就是“概念证明”。您需要的特定条件可能会有所不同。请注意,这是一个相当“繁重”的处理过程。我会确保它只在绝对必要的地方运行。