我正在尝试使用CSV文件中的数据更新WordPress数据库中的特定表(表格由Formidable Pro WP插件创建) - 此过程需要每天自动运行。
以下代码(放在我的WordPress网站的functions.php文件中):
if (!wp_next_scheduled('my_csvtask_hook')) {
wp_schedule_event( current_time(), 'hourly', 'my_csvtask_hook' );
}
add_action( 'my_csvtask_hook', 'my_csvtask_function' );
function my_csvtask_function() {
global $wpdb;
$csv_url = "http://ribprototype2.mobilusdesign.com/wp-content/silverware/YUST_S01.csv";
$fp = fopen($csv_url,'r') or die("can't open file");
while($csv_line = fgetcsv($fp,1024)) {
$custCode = $csv_line['0'];
$points = $csv_line['13'];
$cardNumber = $csv_line['33'];
$qrySel = "select * from wp_frm_items where meta_value = ".$custCode;
$itemdata = $wpdb->get_row($qrySel);
$itemid = $itemdata->item_id;
$updateQry = "update wp_frm_item_metas set meta_value = '".$points."' where field_id='179' and item_id='".$itemid."'";
$run_qry = $wpdb->query($updateQry);
$updateQry1 = "update wp_frm_item_metas set meta_value = '".$cardNumber."' where field_id='180' and item_id='".$itemid."'";
$run_qry1 = $wpdb->query($updateQry1);
}
fclose($fp) or die("can't close file");
}
CSV文件包含多个列 - 但我唯一需要的是第一个(0),第十四个(13)和第三十四个(33)。
mySQL中的Formidable Pro表名为“wp_frm_item_metas”,包含几列:
(我试图上传图片 - 但我是堆叠器的新手:)
id, meta_value, field_id, item_id
1, 202020, 178, 4503
2, 230, 179, 4503
3, 303330, 180, 4503
4, 202021, 178, 4504
5, 354, 179, 4504
6, 444404, 180, 4504
此表包含每个用户的每个表单条目中的所有数据。每个用户只有一个条目。 “item_id”列指的是每个用户的表单提交。特定字段(来自表单)位于“field_id”列中。基本上,我需要为每个用户更新相应的meta_value - 对于field_id 179和180 - 客户代码是字段178。
因此,在CSV中,我需要通过匹配“item_id”全部相等的客户代码meta_value(对于字段178)来“更新”字段179和180的wp_frm_item_metas元值(即,来自同一用户的所有内容) CSV文件的每一行都引用一个特定的“用户”,相应的数据可以在第1列(field_id 178),第14列(field_id 179)和第34列(field_id 180)中找到。
我需要每天运行更新(因为每天早上将CSV推送到服务器)。
有什么想法吗?
麦克