简单的回答是,你可以在所有帖子上循环使用(可能)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.phphttp://www.php.net/manual/en/function.preg-replace.phphttp://codex.wordpress.org/Function_Reference/update_post_metahttp://codex.wordpress.org/Function_Reference/wp_update_post