WordPress技巧: 对游客隐藏部分文章

Ludou

     应haoran网友的请求,研究了一下如何对未登录的用户(即游客)隐藏指定文章,也就是隐藏文章不呈现给游客。跟之前我开发的插件WordPress插件发布:隐藏内容登陆后可见不太一样,该插件是隐藏文章的部分内容,游客可以看到该文章其他不隐藏的内容。现在的问题是,如何让游客连隐藏文章的影子都看不到,跟该文章没有发布过一样,更别说点击文章进去看了。

     言归正传,说说实现的方法。打开你主题目录下的 index.php,查找类似代码:

1
while (have_posts()) : the_post();

     将其改成:

1
2
3
4
5
while (have_posts()) : the_post();
if (get_post_meta($post->ID, "hide", true) == 1 && !$user_ID)
{
    continue;
}

     该更改只针对首页,如果你想让所有归档页(分类页、标签页和日期页等)也对游客隐藏文章,可以照以上方法对主题目录下的archive.php进行更改,如果主题文件夹里还有category.php、tag.php、author.php、date.php和search.php,也对其更改!

     主题修改完毕,核心功能已经实现!以后你要做的就是,如果你想让某篇文章对游客隐藏,可以在编写文章的时候,建立一个自定义域 hide,其值设为1,这样该文章就对游客隐藏了!hide自定义域第一次创建后,以后可以在自定义域下拉框选择。如果hide自定义域没有添加,或者是其他值,文章将正常显示。

隐藏内容登陆后可见

本文版权归露兜博客所有,转载引用请完整注明以下信息:
本文作者:Ludou
本文标题:WordPress技巧: 对游客隐藏部分文章
本文地址:http://www.ludou.org/wordpress-hide-post-for-not-login-in-user.html

露兜博客博主,男生,业余Web程序员,儒家思想受益者。文采不佳,不喜欢聚光灯,不喜欢吹牛,不喜欢无序的做事方式。闲时喜欢写些代码自娱自乐,并在博客中分享一些个人技术经验。

标签:

36 条评论

我来说两句
  1. 自由人

    这个功能很好啊,不过我这里的都没开放注册 呵呵

  2. 团伙分享创意

    呵呵,我也没有开放注册,我觉的开放注册很麻烦啊~~~

  3. haoran

    谢谢大大 我成了您博客FAN

  4. 园子

    对部分人隐藏文章还是有必要的
    谢谢你提供的方法。

  5. 荒野无灯

    嗯,这倒是个不错的方法,纯绿色,不像插件要添加全局的代码。

  6. Ray

    不错,不过俺用不着,呵呵。

  7. 长河

    不过,这是不是只针对web浏览的访客呢?feed和sitemap里应该还会有相关信息吧,google爬虫还是会发现的吧?

  8. haoran

    博主!我发现这种方式隐藏有很大的漏洞!
    只要进入一个文章 然后按“上一个文章/下一个文章”就能显示隐藏的文章
    隐藏只是对首页隐藏。。。

    • Ludou

      是的!如果你知道文章的链接地址,直接可以打开!你要想真正的完全隐藏,还得重载WordPress函数,这回消耗不小的机器资源!从搜索引擎、feed过来的用户也不会隐藏!

      • haoran

        那隐藏的文章不是很容易找到了。。。那还是密码好啊
        请问这种能不能做到(应为我表达能力太差 画了张图)
        http://i214.photobucket.com/albums/cc282/haoranhaoran/-1-13.jpg

        • Ludou

          这样的话,知道你的文章网址,直接在浏览器中打开,照样可以看到你的隐藏文章内容。

          给你提供两个方法吧:
          1、先使用以上方法将文章隐藏,接着在编辑文章的时候给隐藏文章加密,这样相当于双重保障,即使你知道网址,你照样不能看!
          2、对于隐藏的文章,如果游客直接打开隐藏的文章,就把他引导到404文章未找到页面,相当于告诉他该文章不存在!

  9. 万戈

    这个技巧不错,倒是很实用啊

  10. xiao文

    如果知道隐藏文章的链接 直接用链接能打开么?

  11. jerry

    今天真邪门了,这个也按照楼主步骤修改,应该很简单,为什么我的文章还是没有隐藏?
    难道是因为我在本机测试的原因?

  12. jerry

    会不会是自定义域冲突,之前有装了个投票的wp-postratings插件,现在每次使用hide名称时,那个投票的插件自定义域也是自动生成。。

  13. Johnson

    看了下这个功能,感觉非常实用,想问下:如果我要隐藏最新的那篇文章应该怎么做?

  14. barrett

    我使用的是wordpress 3.1,默认Twenty Ten主题中没有while (have_posts()) : the_post();
    那类似的代码是什么呢? get_template_part( 'loop', 'index' );??

  15. anjo

    没多少人看的,当然没必要隐藏拉,不过还是很感谢…

  16. DH

    我是用把隐藏的文章放到一个分类里面,对此分类隐藏实现的。

发表评论

因博主长期在外地出差,您的留言可能暂时不会得到回复。

订阅评论