祭余申 發表於 2023-6-18 00:00:00

WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看

<p>
<strong>对搜索引擎隐藏特定的文章</strong><br>
这个问题的来源是这样的:</p>
<p>
众所周知,随着搜索引擎的改良,会越来越排斥采集和伪原创,尤其是百度还推出了起源算法,对采集站进行k站等措施。如果被贴上采集站的标签,所有的努力可能付诸东流。</p>
<p>
相信很多站长,也想多一些原创内容,并不想全部靠采集别人的文章。然而一个新站,尤其是个人站长,其内容的充实速度一定很慢,我们做站不仅要讨好搜索引擎,更要讨好读者。如果读者不能在你的站内得到比较充实丰富的信息,那体验肯定不好。其实各大名站老站,一样有相当比例的采集或改编内容,这符合互联网的共享精神。各大电视台和报纸也大部分是转载和文摘,只要摘得好符合了特定需求的内容需要,就是有价值的。</p>
<p>
关键在于:不要用采集的文章来为自己的网站骗取搜索流量。这应该是符合互联网道德规范和共识的。如果只让原创的内容参与搜索引擎的游戏规则,而非原创部分屏蔽搜索引擎。这样就能平称地满足搜索引擎、网站主、用户三者的利益。</p>
<p>
于是问题归结于一点:如何有效地、可靠地让“部分文章屏蔽搜索引擎”?</p>
<p>
我不知道这是不是一个比较共性的问题,如果一个网站,既希望通过丰富的文章来满足受众,但又怕被搜索引擎判断为采集站,那这个就是一个真真切切要面对的、关键的、核心的、关系到网站生存发展的大问题。</p>
<p>
最近也一直在学习相关方面的知识,以个人浅见,屏蔽搜索引擎有几类方式:<br>
一、用robots.txt<br>
二、wp的站可以判断用户特征(看了你这篇博文后想到的)<br>
三、通过js封装链接<br>
四、通过重定向,比如短链接、php后台重定向等</p>
<p>
对比以上几种方式,<br>
第一种方法:robots.txt好比在门上贴了封条:“嘿,蛛蛛,我这儿有些内容是不让你检索的”。这是所谓君子协定,搜索引擎一定有能力去看你贴着封条门内的东西,只是它不收录罢了。为了判断一个站是否有大量的采集内容,蛛蛛或许会有窥探的动机。</p>
<p>
这种方法技术实现的成本最低,也应该能满足大多数情况。好象百度在这方面的操守还是可以放心的,比如不索引淘宝的内容,而且也很痛恨360对百度内容的索引。</p>
<p>
这个方法进一步的问题是:<br>
在wp建的站中,如何可以高效率地让“部分文章屏蔽搜索引擎”?<br>
1、文章标题加特征:比如每篇文章的标题中加一个特殊字符,这个方法可行吗,robots.txt用disallow:*特殊字条*就可以吗?<br>
2、文章的标签识别:这个在操作层面好象是最最方便的,可是标签似乎是动态的标记,无法在robotx.txt中筛选?<br>
3、文章放进特定的目录:这个robots.txt比较好写的,然而在wp文章内容管理时如何简易地操作?</p>
<p>
第二种方法:好比是查看进门者的身份证,如果访问者是搜索引擎,那么就禁止通行。这种方法是对wp专用的,然后它的好处是可以非常详细地区别对待,比如百度对采集的态度比较紧,而google不太一样,那有些文章就可以对百度关门而对谷歌开门。另外一个比较大的优点是,可以把判断集成在wp环境中,比如通过插件或主题让操作自动化。</p>
<p>
第三种方法:好比是在门上换了一个门牌,搜索引擎只知道机械地去跟踪门牌上的号码,而浏览器却通过js把门牌指向到另一个正确的入口了。然而:搜索引擎对js的分析能力可能越来越强了,而且从谷歌的某些声明中来看,搜索引擎也不太喜欢你的内容对人和搜索引擎不一样。<br>
这个方法大量地用在淘宝客链接的隐藏方面,这个方法的有效期估计不太长,而且操作比较麻烦,比较适合静态的单独页面,不太适合wp这样的数据库组织文章的架构。</p>
<p>
第四种方法:好比是给门牌号加了密,只有你敲门(点击)了,才给你换成正确的门牌号。一般的访问者一定会点击,而搜索引擎不会模拟点击这个动作。<br>
这种方法相对彻底和“安全”,缺点是:<br>
1、和第三方法一样操作有些复杂,适合静态的单独页面,或页面中局部的链接,不太适合wp的环境。<br>
2、过多的重定向,应该会消耗服务器的运算资源,积少成多,如果大量的文章都要进行一次重定向,服务器可能会不堪重负。</p>
<p>
实现代码</p>
<p>
具体怎么实现wordpress 对搜索引擎隐藏特定的文章呢?废话不多说,直接上php代码,放到当前主题的functions.php中即可使用(用utf-8编码另存为):</p>
<div>
<div>
<div id="highlighter_53441">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
<div>
11</div>
<div>
12</div>
<div>
13</div>
<div>
14</div>
<div>
15</div>
<div>
16</div>
<div>
17</div>
<div>
18</div>
<div>
19</div>
<div>
20</div>
<div>
21</div>
<div>
22</div>
<div>
23</div>
<div>
24</div>
<div>
25</div>
<div>
26</div>
<div>
27</div>
<div>
28</div>
<div>
29</div>
<div>
30</div>
<div>
31</div>
<div>
32</div>
<div>
33</div>
<div>
34</div>
<div>
35</div>
<div>
36</div>
<div>
37</div>
<div>
38</div>
<div>
39</div>
<div>
40</div>
<div>
41</div>
<div>
42</div>
<div>
43</div>
<div>
44</div>
<div>
45</div>
<div>
46</div>
<div>
47</div>
<div>
48</div>
<div>
49</div>
<div>
50</div>
<div>
51</div>
<div>
52</div>
<div>
53</div>
<div>
54</div>
<div>
55</div>
<div>
56</div>
<div>
57</div>
<div>
58</div>
<div>
59</div>
<div>
60</div>
<div>
61</div>
<div>
62</div>
<div>
63</div>
<div>
64</div>
<div>
65</div>
<div>
66</div>
<div>
67</div>
<div>
68</div>
<div>
69</div>
<div>
70</div>
<div>
71</div>
<div>
72</div>
<div>
73</div>
<div>
74</div>
<div>
75</div>
<div>
76</div>
<div>
77</div>
<div>
78</div>
<div>
79</div>
<div>
80</div>
<div>
81</div>
<div>
82</div>
<div>
83</div>
<div>
84</div>
<div>
85</div>
<div>
86</div>
<div>
87</div>
<div>
88</div>
<div>
89</div>
<div>
90</div>
<div>
91</div>
<div>
92</div>
<div>
93</div>
<div>
94</div>
<div>
95</div>
<div>
96</div>
<div>
97</div>
<div>
98</div>
<div>
99</div>
<div>
100</div>
<div>
101</div>
<div>
102</div>
<div>
103</div>
<div>
104</div>
</td>
<td>
<div>
<div>
<code>// 需要说明的是,如果你的wordpress站点开启了页面缓存,此功能无效</code>
</div>
<div>
 </div>
<div>
<code>function</code> <code>ludouse_add_custom_box() {</code>
</div>
<div>
<code> </code><code>if</code> <code>(function_exists(</code><code>'add_meta_box'</code><code>)) {  </code>
</div>
<div>
<code>  </code><code>add_meta_box(</code><code>'ludou_allow_se'</code><code>, </code><code>'搜索引擎'</code><code>, </code><code>'ludou_allow_se'</code><code>, </code><code>'post'</code><code>, </code><code>'side'</code><code>, </code><code>'low'</code><code>);</code>
</div>
<div>
<code>  </code><code>add_meta_box(</code><code>'ludou_allow_se'</code><code>, </code><code>'搜索引擎'</code><code>, </code><code>'ludou_allow_se'</code><code>, </code><code>'page'</code><code>, </code><code>'side'</code><code>, </code><code>'low'</code><code>);</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code>add_action(</code><code>'add_meta_boxes'</code><code>, </code><code>'ludouse_add_custom_box'</code><code>);</code>
</div>
<div>
 </div>
<div>
<code>function</code> <code>ludou_allow_se() {</code>
</div>
<div>
<code> </code><code>global</code> <code>$post</code><code>;</code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>//添加验证字段</code>
</div>
<div>
<code> </code><code>wp_nonce_field(</code><code>'ludou_allow_se'</code><code>, </code><code>'ludou_allow_se_nonce'</code><code>);</code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>$meta_value</code> <code>= get_post_meta(</code><code>$post</code><code>-&gt;id, </code><code>'ludou_allow_se'</code><code>, true);</code>
</div>
<div>
<code> </code><code>if</code><code>(</code><code>$meta_value</code><code>)</code>
</div>
<div>
<code>  </code><code>echo</code> <code>'&lt;input name="ludou-allow-se" type="checkbox" checked="checked" value="1" /&gt; 屏蔽搜索引擎'</code><code>;</code>
</div>
<div>
<code> </code><code>else</code>
</div>
<div>
<code>  </code><code>echo</code> <code>'&lt;input name="ludou-allow-se" type="checkbox" value="1" /&gt; 屏蔽搜索引擎'</code><code>;</code>
</div>
<div>
<code>}</code>
</div>
<div>
 </div>
<div>
<code>// 保存选项设置</code>
</div>
<div>
<code>function</code> <code>ludouse_save_postdata(</code><code>$post_id</code><code>) {</code>
</div>
<div>
<code> </code><code>// 验证</code>
</div>
<div>
<code> </code><code>if</code> <code>( !isset( </code><code>$_post</code><code>[</code><code>'ludou_allow_se_nonce'</code><code>]))</code>
</div>
<div>
<code>  </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
 </div>
<div>
<code> </code><code>$nonce</code> <code>= </code><code>$_post</code><code>[</code><code>'ludou_allow_se_nonce'</code><code>];</code>
</div>
<div>
 </div>
<div>
<code> </code><code>// 验证字段是否合法</code>
</div>
<div>
<code> </code><code>if</code> <code>(!wp_verify_nonce( </code><code>$nonce</code><code>, </code><code>'ludou_allow_se'</code><code>))</code>
</div>
<div>
<code>  </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
 </div>
<div>
<code> </code><code>// 判断是否自动保存</code>
</div>
<div>
<code> </code><code>if</code> <code>(defined(</code><code>'doing_autosave'</code><code>) &amp;&amp; doing_autosave) </code>
</div>
<div>
<code>   </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
 </div>
<div>
<code> </code><code>// 验证用户权限</code>
</div>
<div>
<code> </code><code>if</code> <code>(</code><code>'page'</code> <code>== </code><code>$_post</code><code>[</code><code>'post_type'</code><code>]) {</code>
</div>
<div>
<code>  </code><code>if</code> <code>( !current_user_can(</code><code>'edit_page'</code><code>, </code><code>$post_id</code><code>))</code>
</div>
<div>
<code>   </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code> </code><code>else</code> <code>{</code>
</div>
<div>
<code>  </code><code>if</code> <code>(!current_user_can(</code><code>'edit_post'</code><code>, </code><code>$post_id</code><code>))</code>
</div>
<div>
<code>   </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>// 更新设置</code>
</div>
<div>
<code> </code><code>if</code><code>(!</code><code>empty</code><code>(</code><code>$_post</code><code>[</code><code>'ludou-allow-se'</code><code>]))</code>
</div>
<div>
<code>  </code><code>update_post_meta(</code><code>$post_id</code><code>, </code><code>'ludou_allow_se'</code><code>, </code><code>'1'</code><code>);</code>
</div>
<div>
<code> </code><code>else</code>
</div>
<div>
<code>  </code><code>update_post_meta(</code><code>$post_id</code><code>, </code><code>'ludou_allow_se'</code><code>, </code><code>'0'</code><code>);</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code>add_action(</code><code>'save_post'</code><code>, </code><code>'ludouse_save_postdata'</code><code>);</code>
</div>
<div>
 </div>
<div>
<code>// 对于设置不允许抓取文章和页面</code>
</div>
<div>
<code>// 禁止搜索引擎抓取,返回404</code>
</div>
<div>
<code>function</code> <code>do_ludou_allow_se() {</code>
</div>
<div>
<code> </code><code>// 本功能只对文章和页面有效</code>
</div>
<div>
<code> </code><code>if</code><code>(is_singular()) {</code>
</div>
<div>
<code>  </code><code>global</code> <code>$post</code><code>;</code>
</div>
<div>
<code>  </code><code>$is_robots</code> <code>= 0;</code>
</div>
<div>
<code>  </code><code>$ludou_allow_se</code> <code>= get_post_meta(</code><code>$post</code><code>-&gt;id, </code><code>'ludou_allow_se'</code><code>, true);</code>
</div>
<div>
 </div>
<div>
<code>  </code><code>if</code><code>(!</code><code>empty</code><code>(</code><code>$ludou_allow_se</code><code>)) {</code>
</div>
<div>
<code>   </code><code>// 下面是爬虫agent判断关键字数组</code>
</div>
<div>
<code>   </code><code>// 有点简单,自己优化一下吧</code>
</div>
<div>
<code>   </code><code>$bots</code> <code>= </code><code>array</code><code>(</code>
</div>
<div>
<code>      </code><code>'spider'</code><code>,</code>
</div>
<div>
<code>      </code><code>'bot'</code><code>,</code>
</div>
<div>
<code>      </code><code>'crawl'</code><code>,</code>
</div>
<div>
<code>      </code><code>'slurp'</code><code>,</code>
</div>
<div>
<code>      </code><code>'yahoo-blogs'</code><code>,</code>
</div>
<div>
<code>      </code><code>'yandex'</code><code>,</code>
</div>
<div>
<code>      </code><code>'yeti'</code><code>,</code>
</div>
<div>
<code>      </code><code>'blogsearch'</code><code>,</code>
</div>
<div>
<code>      </code><code>'ia_archive'</code><code>,</code>
</div>
<div>
<code>      </code><code>'google'</code><code>,</code>
</div>
<div>
<code>      </code><code>'baidu'</code>
</div>
<div>
<code>      </code><code>);</code>
</div>
<div>
<code>  </code>
</div>
<div>
<code>   </code><code>$useragent</code> <code>= </code><code>$_server</code><code>[</code><code>'http_user_agent'</code><code>];</code>
</div>
<div>
<code>  </code>
</div>
<div>
<code>   </code><code>if</code><code>(!</code><code>empty</code><code>(</code><code>$useragent</code><code>)) {</code>
</div>
<div>
<code>    </code><code>foreach</code> <code>(</code><code>$bots</code> <code>as</code> <code>$lookfor</code><code>) {</code>
</div>
<div>
<code>     </code><code>if</code> <code>(</code><code>stristr</code><code>(</code><code>$useragent</code><code>, </code><code>$lookfor</code><code>) !== false) {</code>
</div>
<div>
<code>      </code><code>$is_robots</code> <code>= 1;</code>
</div>
<div>
<code>      </code><code>break</code><code>;</code>
</div>
<div>
<code>     </code><code>}</code>
</div>
<div>
<code>    </code><code>}</code>
</div>
<div>
<code>   </code><code>}</code>
</div>
<div>
 </div>
<div>
<code>   </code><code>// 如果当前文章/页面禁止搜索引擎抓取,返回404</code>
</div>
<div>
<code>   </code><code>// 当然你可以改成403</code>
</div>
<div>
<code>   </code><code>if</code><code>(</code><code>$is_robots</code><code>) {</code>
</div>
<div>
<code>    </code><code>status_header(404);</code>
</div>
<div>
<code>    </code><code>exit</code><code>;</code>
</div>
<div>
<code>   </code><code>}</code>
</div>
<div>
<code>  </code><code>}</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code>add_action(</code><code>'wp'</code><code>, </code><code>'do_ludou_allow_se'</code><code>);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
使用方法</p>
<p>
成功添加以上代码到当前主题的functions.php后,我们就可以正常使用了,完全傻瓜式。在wordpress后台文章和页面的编辑页面,右边栏底部我们可以看到这样的选框:</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看" alt="WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看" src="https://zhuji.jb51.net/uploads/img/202305/1cfc48b27015fc6edc1cdbf11830a488.jpg"></p>
<p>
如果当前文章/页面需要禁止搜索引擎抓取,勾选即可。勾选后,当此文章/页面被搜索引擎访问时就会返回404状态,无任何内容。如果你不喜欢给搜索引擎返回404,担心死链太多影响seo,可以将代码中的:</p>
<div>
<div>
<div id="highlighter_419526">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
</td>
<td>
<div>
<div>
<code>status_header(404);</code>
</div>
<div>
<code>exit</code><code>;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
改成:</p>
<div>
<div>
<div id="highlighter_816302">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>echo</code> <code>"&lt;meta name=\"robots\" content=\"noindex,noarchive\" /&gt;\n"</code><code>;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
再将:</p>
<div>
<div>
<div id="highlighter_458691">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>add_action(</code><code>'wp'</code><code>, </code><code>'do_ludou_allow_se'</code><code>);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
改成:</p>
<div>
<div>
<div id="highlighter_599942">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>add_action(</code><code>'wp_head'</code><code>, </code><code>'do_ludou_allow_se'</code><code>);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
这样就直接在网页的head部分添加meta声明:</p>
<div>
<div>
<div id="highlighter_15526">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;meta name=</code><code>"robots"</code> <code>content=</code><code>"noindex,noarchive"</code> <code>/&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
告诉搜索引擎不要索引本页面、不要显示快照。需要注意的是,你的主题目录下的header.php中必须有以下代码:</p>
<div>
<div>
<div id="highlighter_79777">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>wp_head();</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<br><strong>设置文章只允许搜索引擎查看</strong><br>
有些文章只是为了seo才发布的,想让这些文章只允许搜索引擎抓取,普通的访客无法查看,在wordpress中如何做到?</p>
<p>
实现代码</p>
<p>
如果你的wordpress站点未开启页面缓存,这个需求也不难实现,我们可以参考上面对搜索引擎隐藏特定的文章中的代码,稍作修改即可。在当前主题的functions.php中添加以下php代码,用utf8编码保存:</p>
<div>
<div>
<div id="highlighter_676151">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
<div>
11</div>
<div>
12</div>
<div>
13</div>
<div>
14</div>
<div>
15</div>
<div>
16</div>
<div>
17</div>
<div>
18</div>
<div>
19</div>
<div>
20</div>
<div>
21</div>
<div>
22</div>
<div>
23</div>
<div>
24</div>
<div>
25</div>
<div>
26</div>
<div>
27</div>
<div>
28</div>
<div>
29</div>
<div>
30</div>
<div>
31</div>
<div>
32</div>
<div>
33</div>
<div>
34</div>
<div>
35</div>
<div>
36</div>
<div>
37</div>
<div>
38</div>
<div>
39</div>
<div>
40</div>
<div>
41</div>
<div>
42</div>
<div>
43</div>
<div>
44</div>
<div>
45</div>
<div>
46</div>
<div>
47</div>
<div>
48</div>
<div>
49</div>
<div>
50</div>
<div>
51</div>
<div>
52</div>
<div>
53</div>
<div>
54</div>
<div>
55</div>
<div>
56</div>
<div>
57</div>
<div>
58</div>
<div>
59</div>
<div>
60</div>
<div>
61</div>
<div>
62</div>
<div>
63</div>
<div>
64</div>
<div>
65</div>
<div>
66</div>
<div>
67</div>
<div>
68</div>
<div>
69</div>
<div>
70</div>
<div>
71</div>
<div>
72</div>
<div>
73</div>
<div>
74</div>
<div>
75</div>
<div>
76</div>
<div>
77</div>
<div>
78</div>
<div>
79</div>
<div>
80</div>
<div>
81</div>
<div>
82</div>
<div>
83</div>
<div>
84</div>
<div>
85</div>
<div>
86</div>
<div>
87</div>
<div>
88</div>
<div>
89</div>
<div>
90</div>
<div>
91</div>
<div>
92</div>
<div>
93</div>
<div>
94</div>
<div>
95</div>
<div>
96</div>
</td>
<td>
<div>
<div>
<code>// 给文章和页面的编辑页添加选项</code>
</div>
<div>
<code>function</code> <code>ludouseo_add_custom_box() {  </code>
</div>
<div>
<code> </code><code>add_meta_box(</code><code>'ludou_se_only'</code><code>, </code><code>'搜索引擎专属'</code><code>, </code><code>'ludou_se_only'</code><code>, </code><code>'post'</code><code>, </code><code>'side'</code><code>, </code><code>'low'</code><code>);</code>
</div>
<div>
<code> </code><code>add_meta_box(</code><code>'ludou_se_only'</code><code>, </code><code>'搜索引擎专属'</code><code>, </code><code>'ludou_se_only'</code><code>, </code><code>'page'</code><code>, </code><code>'side'</code><code>, </code><code>'low'</code><code>);</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code>add_action(</code><code>'add_meta_boxes'</code><code>, </code><code>'ludouseo_add_custom_box'</code><code>);</code>
</div>
<div>
 </div>
<div>
<code>function</code> <code>ludou_se_only() {</code>
</div>
<div>
<code> </code><code>global</code> <code>$post</code><code>;</code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>//添加验证字段</code>
</div>
<div>
<code> </code><code>wp_nonce_field(</code><code>'ludou_se_only'</code><code>, </code><code>'ludou_se_only_nonce'</code><code>);</code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>$meta_value</code> <code>= get_post_meta(</code><code>$post</code><code>-&gt;id, </code><code>'ludou_se_only'</code><code>, true);</code>
</div>
<div>
<code> </code><code>if</code><code>(</code><code>$meta_value</code><code>)</code>
</div>
<div>
<code>  </code><code>echo</code> <code>'&lt;input name="ludou-se-only" type="checkbox" checked="checked" value="1" /&gt; 只允许搜索引擎查看'</code><code>;</code>
</div>
<div>
<code> </code><code>else</code>
</div>
<div>
<code>  </code><code>echo</code> <code>'&lt;input name="ludou-se-only" type="checkbox" value="1" /&gt; 只允许搜索引擎查看'</code><code>;</code>
</div>
<div>
<code>}</code>
</div>
<div>
 </div>
<div>
<code>// 保存选项设置</code>
</div>
<div>
<code>function</code> <code>ludouseo_save_postdata(</code><code>$post_id</code><code>) {</code>
</div>
<div>
<code> </code><code>// 验证</code>
</div>
<div>
<code> </code><code>if</code> <code>( !isset( </code><code>$_post</code><code>[</code><code>'ludou_se_only_nonce'</code><code>]))</code>
</div>
<div>
<code>  </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
<code> </code><code>$nonce</code> <code>= </code><code>$_post</code><code>[</code><code>'ludou_se_only_nonce'</code><code>];</code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>// 验证字段是否合法</code>
</div>
<div>
<code> </code><code>if</code> <code>(!wp_verify_nonce( </code><code>$nonce</code><code>, </code><code>'ludou_se_only'</code><code>))</code>
</div>
<div>
<code>  </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
<code>  </code>
</div>
<div>
<code> </code><code>// 判断是否自动保存</code>
</div>
<div>
<code> </code><code>if</code> <code>(defined(</code><code>'doing_autosave'</code><code>) &amp;&amp; doing_autosave)</code>
</div>
<div>
<code>   </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
<code>   </code>
</div>
<div>
<code> </code><code>// 验证用户权限</code>
</div>
<div>
<code> </code><code>if</code> <code>(</code><code>'page'</code> <code>== </code><code>$_post</code><code>[</code><code>'post_type'</code><code>]) {</code>
</div>
<div>
<code>  </code><code>if</code> <code>( !current_user_can(</code><code>'edit_page'</code><code>, </code><code>$post_id</code><code>))</code>
</div>
<div>
<code>   </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code> </code><code>else</code> <code>{</code>
</div>
<div>
<code>  </code><code>if</code> <code>(!current_user_can(</code><code>'edit_post'</code><code>, </code><code>$post_id</code><code>))</code>
</div>
<div>
<code>   </code><code>return</code> <code>$post_id</code><code>;</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>// 更新设置</code>
</div>
<div>
<code> </code><code>if</code><code>(!</code><code>empty</code><code>(</code><code>$_post</code><code>[</code><code>'ludou-se-only'</code><code>]))</code>
</div>
<div>
<code>  </code><code>update_post_meta(</code><code>$post_id</code><code>, </code><code>'ludou_se_only'</code><code>, </code><code>'1'</code><code>);</code>
</div>
<div>
<code> </code><code>else</code>
</div>
<div>
<code>  </code><code>delete_post_meta(</code><code>$post_id</code><code>, </code><code>'ludou_se_only'</code><code>);</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code>add_action(</code><code>'save_post'</code><code>, </code><code>'ludouseo_save_postdata'</code><code>);</code>
</div>
<div>
 </div>
<div>
<code>function</code> <code>do_ludou_se_only() {</code>
</div>
<div>
<code> </code><code>// 本功能只对文章和页面有效</code>
</div>
<div>
<code> </code><code>if</code><code>(is_singular()) {</code>
</div>
<div>
<code>  </code><code>global</code> <code>$post</code><code>;</code>
</div>
<div>
<code>  </code><code>$is_robots</code> <code>= 0;</code>
</div>
<div>
<code>  </code><code>$ludou_se_only</code> <code>= get_post_meta(</code><code>$post</code><code>-&gt;id, </code><code>'ludou_se_only'</code><code>, true);</code>
</div>
<div>
<code>  </code>
</div>
<div>
<code>  </code><code>if</code><code>(!</code><code>empty</code><code>(</code><code>$ludou_se_only</code><code>)) {</code>
</div>
<div>
<code>   </code><code>// 下面是搜索引擎agent判断关键字数组</code>
</div>
<div>
<code>   </code><code>// 有点简单,自己优化一下吧</code>
</div>
<div>
<code>   </code><code>$bots</code> <code>= </code><code>array</code><code>(</code>
</div>
<div>
<code>      </code><code>'spider'</code><code>,</code>
</div>
<div>
<code>      </code><code>'bot'</code><code>,</code>
</div>
<div>
<code>      </code><code>'crawl'</code><code>,</code>
</div>
<div>
<code>      </code><code>'slurp'</code><code>,</code>
</div>
<div>
<code>      </code><code>'yahoo-blogs'</code><code>,</code>
</div>
<div>
<code>      </code><code>'yandex'</code><code>,</code>
</div>
<div>
<code>      </code><code>'yeti'</code><code>,</code>
</div>
<div>
<code>      </code><code>'blogsearch'</code><code>,</code>
</div>
<div>
<code>      </code><code>'ia_archive'</code><code>,</code>
</div>
<div>
<code>      </code><code>'google'</code>
</div>
<div>
<code>      </code><code>);</code>
</div>
<div>
<code>  </code>
</div>
<div>
<code>   </code><code>$useragent</code> <code>= </code><code>$_server</code><code>[</code><code>'http_user_agent'</code><code>];</code>
</div>
<div>
<code>  </code>
</div>
<div>
<code>   </code><code>if</code><code>(!</code><code>empty</code><code>(</code><code>$useragent</code><code>)) {</code>
</div>
<div>
<code>    </code><code>foreach</code> <code>(</code><code>$bots</code> <code>as</code> <code>$lookfor</code><code>) {</code>
</div>
<div>
<code>     </code><code>if</code> <code>(</code><code>stristr</code><code>(</code><code>$useragent</code><code>, </code><code>$lookfor</code><code>) !== false) {</code>
</div>
<div>
<code>      </code><code>$is_robots</code> <code>= 1;</code>
</div>
<div>
<code>      </code><code>break</code><code>;</code>
</div>
<div>
<code>     </code><code>}</code>
</div>
<div>
<code>    </code><code>}</code>
</div>
<div>
<code>   </code><code>}</code>
</div>
<div>
<code>   </code>
</div>
<div>
<code>   </code><code>// 如果不是搜索引擎,就显示错误信息</code>
</div>
<div>
<code>   </code><code>// 已登录的用户不受影响</code>
</div>
<div>
<code>   </code><code>if</code><code>(!</code><code>$is_robots</code> <code>&amp;&amp; !is_user_logged_in()) {</code>
</div>
<div>
<code>    </code><code>wp_die(</code><code>'您无权查看此文!'</code><code>);</code>
</div>
<div>
<code>   </code><code>}</code>
</div>
<div>
<code>  </code><code>}</code>
</div>
<div>
<code> </code><code>}</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code>add_action(</code><code>'wp'</code><code>, </code><code>'do_ludou_se_only'</code><code>);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
使用方法</p>
<p>
成功添加以上代码到当前主题的functions.php后,我们就可以正常使用了,完全傻瓜式。在wordpress后台文章和页面的编辑页面,右边栏底部我们可以看到这样的选框:</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看" alt="WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看" src="https://zhuji.jb51.net/uploads/img/202305/5ba0583bc1fc90729e27fd4e5f549598.jpg"></p>
<p>
如果当前文章/页面需要禁止搜索引擎抓取,勾选即可。勾选后,当此文章/页面被普通访客访问时就会显示下面的错误信息(搜索引擎和已登录用户不受影响):</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看" alt="WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看" src="https://zhuji.jb51.net/uploads/img/202305/ea1a40bbb2df6c9757662020442b12f8.jpg"></p>
頁: [1]
查看完整版本: WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看