使自定义帖子类型仅对登录用户可见

时间:2011-12-30 作者:Duveit

我正在创建一个自定义的post类型,它只供登录用户查看,我创建了一个{postType}。php覆盖默认呈现,并在顶部包含了一个logincheck,它在登录后重定向到登录页面并返回。

我还没有为我的帖子类型启用存档,所以我想我不必另外覆盖自定义存档页面。

而且,这似乎能按预期工作,而且无需任何插件或其他东西即可轻松维护。

但这是否足以确保未经授权的用户看不到这些帖子?自定义帖子类型有哪些可能的视图模式/url路径?

好了,我必须让帖子public\\u queryable=TRUE,因为我希望它在前端可见,尽管只有登录用户才能看到。我不确定我是否可以对自定义post类型的设置或可能在single{postType}中使用的特定查询进行一些欺骗。php获取非公开的可查询帖子?

4 个回复
最合适的回答,由SO网友:Tareq 整理而成

一个简单的过滤器就可以轻松完成这项工作。让我们尝试此代码

function tp_stop_guestes( $content ) {
    global $post;

    if ( $post->post_type == \'YOUR_CUSTOM_POSTTYPE\' ) {
        if ( !is_user_logged_in() ) {
            $content = \'Please login to view this post\';
        }
    }

    return $content;
}

add_filter( \'the_content\', \'tp_stop_guestes\' );
我们正在对帖子内容应用过滤器。如果帖子类型是您的自定义帖子类型,并且用户未登录,则他/她将看到“请登录以查看此帖子”,而不是原始内容。

SO网友:Harshal Solanki
/* Making custom post type mailer visible for only logged in users */
    add_action(\'template_redirect\', \'mailer_404_loggedin_func\');

    function mailer_404_loggedin_func() {
        global $post;
        if ($post->post_type == \'mailer\') {
            if (!is_user_logged_in()) {
                global $wp_query;
                $wp_query->posts = [];
                $wp_query->post = null;
                $wp_query->set_404();
                status_header(404);
                nocache_headers();
            }
        }
    }
SO网友:Philip Downer

您还可以将上述功能扩展为一个短代码,允许您指定要对未登录的用户隐藏帖子的哪些部分。

SO网友:y sh
function custom_redirect() {        
    global $post;

    if ( $post->post_type == \'journals\' || $post->post_type == \'projects\' || $post->post_type == \'tribe_events\' && ! is_user_logged_in() ) {
      wp_redirect( home_url() ); 
      exit();
    }    
  }

  add_action("template_redirect","custom_redirect");
结束

相关推荐