当我尝试以下操作时,我收到警告:无法修改标头信息 - 标头已由……发送
我试图要求用户在访问带有简码的页面之前先登录。
我错过了什么?感谢一百万您可以提供的任何帮助。
add_shortcode( 'guest-posts', 'guestposts_shortcode' );
function guestposts_shortcode( $atts ) {
auth_redirect();
}
如果您在渲染之前解析帖子内容,它可能会起作用。然后您应该检查是否在内容中找到短代码。
这是一个小的通用函数来检查它:
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。这个功能应该使用自定义字段来完成,它会更简单!
您可以改为创建一个特殊类别,并挂钩template_redirect
:
add_filter('template_redirect', function() {
if (is_single() && in_category('special') && !is_user_logged_in())
wp_redirect(site_url('/wp-login.php'));
});