Featured Images not appearing

时间:2013-01-27 作者:the911s

我帮助一位朋友写WordPress博客,因为我是一个“电脑爱好者”,虽然我没有WordPress的具体经验,多年来也没有使用过PHP。所以,我真的很感激任何人都能对这个问题有所启发。

该博客的主要目的是对项目进行分类,大约有8000篇帖子,每篇都包含一张照片。这个博客开始于另一个平台,几年前被迁移到WordPress,所以后端的事情相当混乱。数千条帖子从其他平台迁移,然后又有数千条帖子从WP CMS发布。他们最近升级到了WordPress的最新版本(还有一个新主题Themolio),现在有两个主要问题(第一个是最大的问题,尽管我想同时解决这两个问题):

<img> 每个帖子中照片的标记包含在post\\u内容字段中。然而,根据我上面描述的博客混乱的历史,有些URL是绝对的,有些是相对的。我不知道哪些是“正确的”,即WP生成它们的方式,哪些是从其他平台导入的。绝对值在各处都很好。相对的在每篇文章中都很好,但当它们出现在归档页面中时,它们就会断开。尽管每个页面可能有不同的路径,但我能否以某种方式使图像正确显示在所有页面上?它们都应该是相对的还是绝对的?最后,我可以使用MySQL查询和正则表达式的一些组合来更新数据库中的所有条目以使其统一吗

Solution
根据Gorit的评论,下面是我用来解决每个问题的代码:

问题1:执行的SQL命令与她的帖子中所写的几乎一模一样。根据您的具体情况,更改您需要的任何详细信息。

问题2:运行放置在根文件夹中的这段php代码。

require_once \'./wp-config.php\';
global $wpdb; 
$wpdb->show_errors();
$posts = $wpdb->get_results("SELECT id, post_parent FROM wp_posts WHERE post_type = \'attachment\'", ARRAY_N);
if ($posts) {
    foreach ($posts as $post) {
    // First insert a thumbnail_id meta tag for the attachment that points to itself
    $wpdb->query("INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES (\'" . $post[0] . "\', \'_thumbnail_id\', \'" . $post[0] .  "\')");
    // Next, insert a thumbnail_id meta tag for the attachment\'s parent post that points to the attachment
    $wpdb->query("INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES (\'" . $post[1] . "\', \'_thumbnail_id\', \'" . $post[0] .  "\')");
    }
}

1 个回复
最合适的回答,由SO网友:Biranit Goren 整理而成

您所有的问题都可以通过一些MySQL查询来解决。

关于第#1点:如果您使用mod\\u rewrite,那么我建议在帖子中的图像使用绝对URL,如果您在其他页面上显示完整的帖子内容(包括其图像),就像您建议的那样。

您可以按如下方式执行MySQL搜索/替换:

UPDATE wp_posts SET post_content = replace(post_content, \'old string\', \'new string\');
因此,例如,如果您的所有图像都位于wp content/uploads文件夹(WordPress通常将媒体放在该文件夹中),那么您的搜索/替换可能类似于:

UPDATE wp_posts SET post_content = replace(post_content, \'src="uploads/\', \'src="http://www.example.com/uploads/\');
关于第2点:

您需要从wp\\u posts表中获取图像的ID,以便将其添加到wp\\u postsmeta表中。

假设您在wp\\u postsmeta中有一些post\\u id 1的元数据。其中之一是“特色图片”,因此该行类似于:

post_id = 1;
meta_key = \'featured_image\';
meta_value = \'uploads/2012/12/someimage.jpg\';
要获取该图像的ID,请执行以下操作:

SELECT ID FROM wp_posts WHERE guid LIKE \'%uploads/2012/12/someimage.jpg\';
然后,您可以将以下数据插入到wp\\U postsmeta中:

INSERT INTO wp_postsmeta (post_id, meta_key, meta_value) VALUES (1, \'_thumbnail_id\', ID-OF-IMAGE);
因此,要将这一切结合起来,请使用一个简单的php脚本,如下所示:

    $posts = $wpdb->get_results("SELECT post_id, meta_value FROM wp_postmeta WHERE meta_key=\'featured_image\'", ARRAY_N);
    if ($posts) {
        while ($posts as $post) {
            $image = $wpdb->get_row("SELECT ID FROM wp_posts WHERE guid LIKE \'%" . $post[1] . "%\'", ARRAY_N);
            if ($image_id) {
                $wpdb->query("INSERT INTO wp_postsmeta (post_id, meta_key, meta_value) 
                  VALUES ($post[0], \'_thumbnail_id\', \'" . $image[0] . "\')");
            }
        }
    }
希望所有这些都能给你一些指导和帮助。我写得很笼统,所以请记住在做任何更改之前备份数据库!

祝你好运

结束

相关推荐