Php 如何要求使用短代码登录wordpress页面

Php 如何要求使用短代码登录wordpress页面,php,wordpress,login,shortcode,Php,Wordpress,Login,Shortcode,当我尝试以下操作时,我收到警告:无法修改标题信息-标题已由…发送 我试图要求用户在访问带有快捷码的页面之前登录 我错过了什么?非常感谢你能提供的任何帮助 add_shortcode( 'guest-posts', 'guestposts_shortcode' ); function guestposts_shortcode( $atts ) { auth_redirect(); } 如果您在呈现帖子内容之前先解析帖子内容,那么它可能会起作用。然后,您应该检查是否在内容中找到了短代码

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

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

我错过了什么?非常感谢你能提供的任何帮助

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_shortcode( 'guest-posts', 'guestposts_shortcode' );

function guestposts_shortcode( $atts ) {
    return false;
}

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

您可以创建一个特殊的类别,并连接到
template\u redirect

add_filter('template_redirect', function() {
    if (is_single() && in_category('special') && !is_user_logged_in())
        wp_redirect(site_url('/wp-login.php'));
});

这与WP呈现博客文章的内部结构有关。简而言之,当它到达短代码时,它已经开始输出页面。它必须是一个短代码而不仅仅是一个帖子设置吗?不,我想以最好的方式构建它,这是我的第一个插件。对我来说,更重要的是,我要学会用最好的方式把东西组合在一起。我的插件将允许用户登录后发布,然后在发布完成后访问paypal。非常感谢您的帮助。此外,当用户创建帖子时,他们会填写特定字段,我会在创建实际帖子之前对这些字段进行处理。所以我的短代码现在在页面上删除了一个表单。目标只是构建一些我的用户可以安装的东西,这就是为什么我在考虑插件。如果我偏离了我的方法,请随意给我一个完全不同的方向。你可以尝试这种方法,它应该会起作用(给我们你的反馈)。或者,你可以在post编辑屏幕中使用post_meta(自定义字段)和某种metabox,或者如果这是在一篇独特的文章(或页面)上使用的,可以通过选择文章(例如在选择框中)在插件的设置页面中进行设置。我仍然收到了已发送的标题。我很害怕,因为“为了完成,我们必须确保短代码不会产生任何回音”。这就是我将表单回显到页面的功能。据我所知,augh_redirect function处理在访问页面之前强制登录的整个过程。文档没有解释在哪里可以使用它,只是说放在页面顶部,页面将被登录保护。我很抱歉。教我如何钓鱼。我在哪里可以找到wordpress的生命周期,这样我就可以研究我应该在哪里实现这项工作?使用wp时出现相同错误_loaded@ShawnBellman我测试了上面的代码,实际上“wp”钩子还可以。我刚刚纠正了一个打字错误。。。只要确保测试时没有记录。如果你想更多地了解WordPress的生命周期,你应该阅读。你同意吗?
add_filter('template_redirect', function() {
    if (is_single() && in_category('special') && !is_user_logged_in())
        wp_redirect(site_url('/wp-login.php'));
});