WordPress技巧: 对游客隐藏部分文章
应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
这个功能很好啊,不过我这里的都没开放注册 呵呵
大家差不多都是个人博客,开发注册也没多大意义。再强大的功能,只有需要才是有用的。
呵呵,我也没有开放注册,我觉的开放注册很麻烦啊~~~
根据不同博客的需要吧。
谢谢大大 我成了您博客FAN
不必客气
对部分人隐藏文章还是有必要的
谢谢你提供的方法。
有些博客确实需要这个功能。
高手
嗯,这倒是个不错的方法,纯绿色,不像插件要添加全局的代码。
为啥隐藏啊?
不同人有不同目的!
不错,不过俺用不着,呵呵。
不过,这是不是只针对web浏览的访客呢?feed和sitemap里应该还会有相关信息吧,google爬虫还是会发现的吧?
是的
博主!我发现这种方式隐藏有很大的漏洞!
只要进入一个文章 然后按“上一个文章/下一个文章”就能显示隐藏的文章
隐藏只是对首页隐藏。。。
是的!如果你知道文章的链接地址,直接可以打开!你要想真正的完全隐藏,还得重载WordPress函数,这回消耗不小的机器资源!从搜索引擎、feed过来的用户也不会隐藏!
那隐藏的文章不是很容易找到了。。。那还是密码好啊
请问这种能不能做到(应为我表达能力太差 画了张图)
http://i214.photobucket.com/albums/cc282/haoranhaoran/-1-13.jpg
这样的话,知道你的文章网址,直接在浏览器中打开,照样可以看到你的隐藏文章内容。
给你提供两个方法吧:
1、先使用以上方法将文章隐藏,接着在编辑文章的时候给隐藏文章加密,这样相当于双重保障,即使你知道网址,你照样不能看!
2、对于隐藏的文章,如果游客直接打开隐藏的文章,就把他引导到404文章未找到页面,相当于告诉他该文章不存在!
这个技巧不错,倒是很实用啊
对大多数博客来说,没多大用处。
如果知道隐藏文章的链接 直接用链接能打开么?
可以!如果你不希望隐藏文章被直接打开,请看:
http://www.ludou.org/wordpress-hide-post-for-not-login-in-user.html#comment-978
今天真邪门了,这个也按照楼主步骤修改,应该很简单,为什么我的文章还是没有隐藏?
难道是因为我在本机测试的原因?
因为你已经登陆了。
会不会是自定义域冲突,之前有装了个投票的wp-postratings插件,现在每次使用hide名称时,那个投票的插件自定义域也是自动生成。。
你可以换个自定义域名称,将第二段代码第02行中的hide改成你的名称就可以了。
看了下这个功能,感觉非常实用,想问下:如果我要隐藏最新的那篇文章应该怎么做?
while (have_posts()) : the_post();
改成:
$i = 0;
while (have_posts()) : the_post(); $i++;
if ( 1 == $i )
{
continue;
}
谢谢,不知道 1 == $ 这句是什么意思?
不好意思写错了,应该是1 == $i
意思是如果你的首页文章是最新文章在顶部,那么这句代码就代表第一篇文章,隐藏掉。
谢谢,弄好了
我使用的是wordpress 3.1,默认Twenty Ten主题中没有while (have_posts()) : the_post();
那类似的代码是什么呢? get_template_part( 'loop', 'index' );??
在loop.php中
没多少人看的,当然没必要隐藏拉,不过还是很感谢…
我是用把隐藏的文章放到一个分类里面,对此分类隐藏实现的。