将旧帖子迁移到新的wp,如何将帖子正文中的信息外推到自定义域?

时间:2013-03-18 作者:Kon

我需要迁移存储在帖子正文中的一些信息(如“价格:200美元”),以某种方式推断它们,并将它们放入自定义字段中。我该怎么做?

这个博客是关于餐馆的,位置和价格写在帖子的正文中,我需要将它们输入到自定义字段中,以便我可以对它们进行搜索。

1 个回复
SO网友:s_ha_dum

简单的回答是,你可以在所有帖子上循环使用(可能)preg_match 提取信息。

长话短说,这可能相当棘手,这取决于数据输入的一致性。以下是一个示例:

global $wpdb;
$sql = "SELECT ID,post_content FROM {$wpdb->posts}";
$allp = $wpdb->get_results($sql);
foreach ($allp as $p) {
  // Deal with price
  $pat = \'/price:[0-9]+\\$/\';
  $price = preg_match($pat,$p->post_content,$matches);
  if (!empty($matches[0])) {
    list($key,$value) = explode(\':\',$matches[0]);
    update_post_meta($p->ID, $key, $value, $value);
    $new_content = preg_replace($pat,\'\',$p->post_content);
    //     var_dump($new_content);
  }
  // end of price

  // update content if needed
  if (!empty($new_content)) {
    $post = array(
      \'ID\' => $p->ID,
      \'post_content\' => $new_content
    );
    wp_update_post($post);
  }

}
这将转换;“价格”;上面列出的数据——价格:200美元——并将其放入元字段(*_postmeta) “在钥匙下面”;“价格”;值为;200美元;。我建议不要包括$ 在值中,以便您可以根据需要进行数字排序。这里有许多问题询问如何对字母数字数据进行数字排序,但您不能。您需要在数据进入数据库时解决这个问题。

对于要提取的每个信息位,都需要一个类似的正则表达式post_content.

Be very careful. 正则表达式很容易出错,而且没有“撤消”。在开发服务器上使用一个复制的、一次性的数据库,直到您知道自己做对了为止。

参考号:

http://php.net/manual/en/function.preg-match.php
http://www.php.net/manual/en/function.preg-replace.php
http://codex.wordpress.org/Function_Reference/update_post_meta
http://codex.wordpress.org/Function_Reference/wp_update_post

结束

相关推荐