0

当我尝试以下操作时,我收到警告:无法修改标头信息 - 标头已由……发送

我试图要求用户在访问带有简码的页面之前先登录。

我错过了什么?感谢一百万您可以提供的任何帮助。

add_shortcode( 'guest-posts', 'guestposts_shortcode' );

function guestposts_shortcode( $atts ) {
    auth_redirect();
}
4

2 回答 2

1

如果您在渲染之前解析帖子内容,它可能会起作用。然后您应该检查是否在内容中找到短代码。

这是一个小的通用函数来检查它:

function has_shortcode($shortcode = '') {
    global $post;

    if (!$shortcode || $post == null) {  
        return false;  
    }

    if ( stripos($post->post_content, '[' . $shortcode) !== false ) {   
        return true;
    }

    return false;
}

现在我们必须创建一个函数来检查我们的特定短代码:

function unlogged_guest_posts_redirect() {
    if(has_shortcode('guest-posts') && !is_user_logged_in()) {
        auth_redirect();
    }
}

然后我们必须挂钩我们的函数(我认为这可以在“wp”挂钩中工作,但如果没有,你可以尝试另一个):

add_action('wp', 'unlogged_guest_posts_redirect');

最后,我们必须确保短代码不会回显任何内容:

add_shortcode( 'guest-posts', 'guestposts_shortcode' );

function guestposts_shortcode( $atts ) {
    return false;
}

实际上,我们正在处理简码,但我们没有使用WordPress 简码 API。这个功能应该使用自定义字段来完成,它会更简单!

于 2013-06-15T13:41:49.093 回答
0

您可以改为创建一个特殊类别,并挂钩template_redirect

add_filter('template_redirect', function() {
    if (is_single() && in_category('special') && !is_user_logged_in())
        wp_redirect(site_url('/wp-login.php'));
});
于 2013-06-15T22:20:58.027 回答