【问题标题】:Extracting URLs from Wordpress post_content using MySQL使用 MySQL 从 Wordpress post_content 中提取 URL
【发布时间】:2015-05-29 15:26:19
【问题描述】:

我正在将几千篇文章从一个旧的 Wordpress 网站转移到一个新网站。每篇文章在文本本身中至少包含一个,并且可能包含一些出站链接。我们需要手动检查所有 URL。理想情况下,我应该有一个 URL 列表,我可以对这些 URL 进行排序以加快处理速度。

我正在寻找一种方法来提取引用的每个 URL 的列表以及帖子的 ID,以便我们可以在需要时返回并对其进行编辑。

我的第一次尝试很简单,例如 "SELECT ID, post_content FROM wp_posts WHERE post_content LIKE '%http%';",但这只会导致(几乎)所有帖子的列表.

我猜这有两个部分,第一个是获得每个 URL 的点击,而不仅仅是每篇文章,因为文章可能包含一个或多个 URL。也许某种加入?我将从这个开始,因为我认为这是我可以弄清楚的。

第二部分将修剪结果,以便他们只显示 URL 本身。我有使用 MySQL 的经验,但根本没有真正使用过任何字符串操作函数。

提前感谢您的帮助。

【问题讨论】:

  • 您提到您的查询返回了几乎所有帖子,这表明几乎所有帖子在post_content 中都有字符串“http”。听起来您需要一种提取链接并发布ID的方法
  • 是的,如果我上面没有说清楚,我想生成一个包含所有链接的表格(有些帖子会有多个链接),以及它们对应的帖子 ID。

标签: php mysql sql wordpress


【解决方案1】:

在这里回答我自己的问题。我无法弄清楚如何在 MySQL 中正确执行此操作,因此我在 PHP 中进行了操作。我仍然很想知道是否有办法在 SQL 中正确执行此操作,因为这样可以在以后节省一些步骤。

这是完成工作的 PHP,将逗号分隔的文本转储到屏幕上,我可以保存并导入 Excel 以便轻松排序和查看:

global $wpdb;
$sql = "SELECT ID, post_content FROM wp_posts WHERE (post_content LIKE '%href=%');";

$results = $wpdb->get_results($sql, ARRAY_A);

foreach($results as $r) {
    $arr = explode('href="', $r[post_content]);
    foreach($arr as $key => $a) {
        if ($key > 0) {
            $x = explode('"', $a);
            echo $r[ID].','.$x[0].'<br/>';
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2012-11-19
    • 2018-09-15
    • 1970-01-01
    • 2012-02-16
    • 2022-06-25
    相关资源
    最近更新 更多