记录一次囧客圈灾难的恢复过程

一切都源自于折腾.哥这就属于自找苦吃的经典类型.
一直想要让囧客圈在pv上增加些流量,哥想尽了各种办法,差点就要无耻的使用wordpress文章分页了,但是苦于技术不到位,没办法简化更新流程,就只好苦逼的还是继续每篇发1张图,自己都快把自己恶心死了...
直到跟老婆发微信玩的时候无意中点中一篇上古时期更新的内容,突然发现当时不小心使用了图片附件的形式,于是每张图片都会被引导至一个单独的附件页面,然后再显示全图.这简直就是哥理想中的需求!无耻淫荡的靠增加点击来增加pv!
二话不说哥立刻开始写附件模板,一切看起来很顺利,哥想象着囧客圈驾着七彩祥云大赚pv,但是没想到哥猜中了开头,缺没猜中结尾,悲剧马上来临!飞快的调试好之后,又飞快的替换了模板文件,哥正高兴的准备多浏览几篇试试看的时候,蛋疼终于降临了,除了个别文章外 大部分内容都拉取不到任何信息,这简直就是要我小命,研究一番发现原来是使用牧风的ajax上传的图片都无法实现,究其原因竟然是图片文件并未与文章关联,于是就无法使用wordpress的相册功能调用出来,真tnnd苦逼啊,自从换了瀑布流以来,哥已经连续更新了2000+内容了,难不成要我放弃,但是哥真的很喜欢pv大增的感觉!
蛋疼中跑去后台找插件看看能否有什么解决办法,老婆保佑还真让哥挖了出来:

0.使用一个叫 Add From Server 的插件,将服务器上已经上传的图片文件拉入媒体库

1.这时文件还都是未附加的状态,这里卡了哥一下,使用另外一个插件(实在垃圾,就不在这里说了省得有类似需求的朋友会走弯路)导入后,我只有3k+的附件翻了一番,无奈放弃,这里要感谢对岸台湾同胞的牛人.翻墙找到了解决办法:


最後一步就是搜尋你Blog Post中含有那個圖片,再把圖片關聯至post id。
PHP的程式如下,大家看我惡劣的英文Comment大概都可了解是做什麼:

<?php
require_once ('wp-config.php');
require_once ('wp-admin/includes/admin.php');
require_once ('wp-includes/functions.php');

$server = DB_HOST;
$username = DB_USER;
$password = DB_PASSWORD;
$dbname = DB_NAME;
$url = get_bloginfo('url');

mysql_connect($server, $username, $password) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());

//find out all attachment records which is no parent post.
$sql = "SELECT ID, guid FROM `wp_posts` WHERE `post_type` = 'attachment' AND post_parent=0";
$attachment_post = mysql_query($sql);

while ($rows = mysql_fetch_assoc($attachment_post)) {
 //$guid is the relative or absolute URL of images.
 $guid = str_replace($url, '', $rows['guid']);

 //find the first post , where post content contain the $guid (image url).
 //Due to WordPress's limitation, one media only can recognize to one post/page's ID.
 //If more than one Post/Page has use the media, WordPress will retain the first ID to media.
 $sql = "SELECT ID FROM `wp_posts` 
    WHERE post_content LIKE '%" . mysql_real_escape_string($guid) . "%' 
    AND post_type in ('post','page','template') 
    ORDER BY `post_date` desc,`post_modified` desc 
    LIMIT 1";

 $match_post = mysql_fetch_assoc(mysql_query($sql));

 //Update the attachment's post_parent to related post/page ID.
 $sql = "UPDATE `wp_posts` SET post_parent='" . $match_post['ID'] . "' 
    WHERE ID=" . $rows['ID'] . " LIMIT 1";

 mysql_query($sql);
}
echo 'Done!';
mysql_close();
?>

以上的DB_HOST/DB_USER/DB_PASSWORD/DB_NAME不用刻意更改,因為會自動取自wp-config.php,把程式碼儲存至一個php檔案放在你WordPress的root資料夾,運行就可以,緊記完成後把那個php檔案刪除。

运行之后问题解决了,大部分图片都乖乖的关联到文章附件中,只剩171张以后慢慢搞起
有人问悲剧在哪里?
哥真的就擦了,一切搞完以为可以安心的时候...真正的灾难来了...因为我使用了 Auto_Save_Image 这个插件,又蛋疼的给它加上了自动打水印功能,于是每一张gif图片都被打上了水印变成单帧,整整262张!加起来300+MB的gif啊!!!
悲剧的是哥更新完还顺手把已经更新的图片文件删除掉了!!!
真是苦逼,这感觉比老婆孕吐还要难受.
还好哥一直坚持同步腾讯跟新浪微博,靠着它们拯救回来了60+张.剩下的联系idc看看是否有备份.
如果实在不行,就只能苦逼的用google的查找相似图片功能再下载下来,打水印,该名称,上传了......
哥真想哭...

Share

小 虾

哦也,我是小虾

You may also like...

9 Responses

  1. 图妹子 says:

    为什么我运行了那个脚本,多媒体却没有自动附加? wp3.5.1

  2. 图妹子 says:

    为什么我运行了那个脚,多媒体却没有自动附加?

  3. 小虾 says:

    鄙视啊 赶紧去玩你儿子去~!

  4. 小虾 says:

    哈哈 换上多说啦太自信了 所以没有在本地测试哈哈

  5. 小林 says:

    要我怎么说你好呢?整天折腾破网站居然还能找到媳妇。。。开挂是不是。。

  6. solifugus says:

    我说,换了多说的评论插件吧,哈哈。
    我想知道为毛你没在本地做个测试呢?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.