WordPress解决帖子ID不连续的方法
许多WordPress博客在永久链接中使用文章ID,但是WordPress由于各种原因导致了文章ID不一致的问题。 经常有博主在论坛上提问来解决这个问题,但很少得到满意的答复。 . 今天小编就来告诉大家如何完美的解决这个问题。 这十分完美。 可能有点太远了。 WordPress 3.0以后,会有自动草稿。 每个发布的帖子将占两个 ID 号。 它目前没有被禁用。 方法。 请继续看如何在一定程度上解决文章ID不连续的问题。
1.禁用修改版文章
所谓文章修改版,就是每次修改一篇文章,都会自动保存修改前文章的版本。 技术术语是版本控制,它确保在错误修改的情况下可以恢复以前的内容。 这是在 Wiki 文档中。 维护方面很有帮助,但是作为我们的小博客,好像用处不大,而且这个修改版在数据库中占用了一个ID,这也是导致文章ID不连续的问题之一。 要禁用文章修订,您可以在 wp-config.php 文件中添加:
1 |
<span class="token function">define</span><span class="token punctuation">(</span><span class="token string">'WP_POST_REVISIONS'</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
也可以在当前主题的functions.php中添加如下PHP代码:
1 2 3 4 5 6 7 8 |
<span class="token comment" spellcheck="true">// 禁用修订版本</span> <span class="token function">add_filter</span><span class="token punctuation">(</span> <span class="token string">'wp_revisions_to_keep'</span><span class="token punctuation">,</span> <span class="token string">'specs_wp_revisions_to_keep'</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">specs_wp_revisions_to_keep</span><span class="token punctuation">(</span> <span class="token variable">$num</span><span class="token punctuation">,</span> <span class="token variable">$post</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token string">'post_type'</span> <span class="token operator">==</span> <span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">post_type</span> <span class="token punctuation">)</span> <span class="token variable">$num</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$num</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
2.删除文章修改版
禁用文章修订后,先前创建的文章修订仍存储在数据库中。 这些其实用处不大,占用ID,我们可以删除。 至于如何删除,可以在phpmyadmin中执行如下SQL语句(会影响顶文章,慎用!并做好备份):
1 2 3 4 5 |
<span class="token keyword">DELETE</span> <span class="token number">a</span><span class="token punctuation">,</span><span class="token number">b</span><span class="token punctuation">,</span><span class="token number">c</span> <span class="token keyword">FROM</span> wp_posts <span class="token number">a</span> <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> wp_term_relationships <span class="token number">b</span> <span class="token keyword">ON</span> <span class="token punctuation">(</span><span class="token number">a</span><span class="token punctuation">.</span>ID <span class="token operator">=</span> <span class="token number">b</span><span class="token punctuation">.</span>object_id<span class="token punctuation">)</span> <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> wp_postmeta <span class="token number">c</span> <span class="token keyword">ON</span> <span class="token punctuation">(</span><span class="token number">a</span><span class="token punctuation">.</span>ID <span class="token operator">=</span> <span class="token number">c</span><span class="token punctuation">.</span>post_id<span class="token punctuation">)</span> <span class="token keyword">WHERE</span> <span class="token number">a</span><span class="token punctuation">.</span>post_type <span class="token operator">=</span> <span class="token string">'revision'</span><span class="token punctuation">;</span> |
三、删除不需要的附件
相信很多博主在发布文章的时候都会同时上传/插入一些附件,比如图片、视频、音乐等,这些附件可以在WordPress管理后台-媒体库中看到,不同的媒体对应不同的文章。 但是你要注意,这些媒体也占用了post ID,它们和post存储在同一个数据库表wp_posts中。 如果您特别想要文章的ID完美连续,请不要在发布文章时上传/插入这些媒体,并请在WordPress管理后台-媒体库中删除之前上传的媒体(注意这个操作是不只是删除Record,还会删除您上传的文件),如有需要,请使用FTP重新上传这些文件。
四、禁用自动保存
自动保存的好处是,当您编辑文章时,系统会每隔一小段时间自动为您保存编辑过的文章,防止网页突然关闭,导致之前写的数千字丢失。 缺点是每篇文章都会有一条自动保存的记录,同样会占用一个文章ID,这也是文章ID不连续的原因之一。 如果不需要这个功能,可以在当前主题的functions.php中添加如下代码:
1 2 |
<span class="token comment" spellcheck="true">// 禁用自动保存,所以编辑长文章前请注意手动保存。</span> <span class="token function">add_action</span><span class="token punctuation">(</span> <span class="token string">'admin_print_scripts'</span><span class="token punctuation">,</span> <span class="token function">create_function</span><span class="token punctuation">(</span> <span class="token string">'$a'</span><span class="token punctuation">,</span> <span class="token string">"wp_deregister_script('autosave');"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> |
五、重新排列不连续的文章ID
方法一:可以在当前主题的functions.php中添加如下PHP代码,这样如果你只发文章,不发页面,加菜单,不上传媒体,基本上之后的帖子ID都是连续的并且不更改以前发表的文章的 ID 不会影响 SEO:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token keyword">function</span> <span class="token function">keep_id_continuous</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">global</span> <span class="token variable">$wpdb</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// 删掉自动草稿和修订版</span> <span class="token variable">$wpdb</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">"DELETE FROM `$wpdb->posts` WHERE `post_status` = 'auto-draft' OR `post_type` = 'revision'"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// 自增值小于现有最大ID,MySQL会自动设置正确的自增值</span> <span class="token variable">$wpdb</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">"ALTER TABLE `$wpdb->posts` AUTO_INCREMENT = 1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">add_filter</span><span class="token punctuation">(</span> <span class="token string">'load-post-new.php'</span><span class="token punctuation">,</span> <span class="token string">'keep_id_continuous'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">add_filter</span><span class="token punctuation">(</span> <span class="token string">'load-media-new.php'</span><span class="token punctuation">,</span> <span class="token string">'keep_id_continuous'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">add_filter</span><span class="token punctuation">(</span> <span class="token string">'load-nav-menus.php'</span><span class="token punctuation">,</span> <span class="token string">'keep_id_continuous'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> |
模板兔总结
将以下代码添加到主题的functions.php 文件中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// 禁用自动保存,所以编辑长文章前请注意手动保存。 add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) ); // 禁用修订版本 remove_action( 'pre_post_update' , 'wp_save_post_revision' ); add_filter( 'wp_revisions_to_keep', 'specs_wp_revisions_to_keep', 10, 2 ); function specs_wp_revisions_to_keep( $num, $post ) { if ( 'post_type' == $post->post_type ) $num = 0; return $num; } add_filter( 'load-post-new.php', 'keep_id_continuous' ); add_filter( 'load-media-new.php', 'keep_id_continuous' ); add_filter( 'load-nav-menus.php', 'keep_id_continuous' ); function keep_id_continuous(){ global $wpdb; // 删掉自动草稿和修订版 $wpdb->query("DELETE FROM `$wpdb->posts` WHERE `post_status` = 'auto-draft' OR `post_type` = 'revision'"); // 自增值小于现有最大ID,MySQL会自动设置正确的自增值 $wpdb->query("ALTER TABLE `$wpdb->posts` AUTO_INCREMENT = 1"); } |
1. 带 [亲测] 说明源码已经被站长亲测过!
2. 下载后的源码请在24小时内删除,仅供学习用途!
3. 分享目的仅供大家学习和交流,请不要用于商业用途!
4. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
5. 本站所有资源来源于站长上传和网络,如有侵权请邮件联系站长!
6. 没带 [亲测] 代表站长时间紧促,站长会保持每天更新 [亲测] 源码 !
7. 盗版ripro用户购买ripro美化无担保,若设置不成功/不生效我们不支持退款!
8. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
9. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
10.如果您购买了某个产品,而我们还没来得及更新,请联系站长或留言催更,谢谢理解 !
GG资源网 » WordPress解决帖子ID不连续的方法