我写了一个函数,其中有两个insert查询。一个是执行并正确插入数据。但下一个没有执行。如果设置或不设置,我无法检查我要插入的值。怎么做的东西?专家看一下。我的功能如下:
add_action( 'save_post', 'cs_product_save' );
function cs_product_save( $post_id ){
global $wpdb;
$cs_product_array = $_POST['cs_product'];
$cs_product_count = count($cs_product_array);
$event_start_date = $_POST['event_start_date'];
$event_end_date = $_POST['event_end_date'];
$event_start_time = $_POST['event_start_time'];
$event_end_time = $_POST['event_end_time'];
$event_all_day = $_POST['event_all_day'];
$event_phone = $_POST['event_phone'];
$event_location = $_POST['event_location'];
$event_map = $_POST['event_map'];
$table_cause_product = "wp_cause_woocommerce_product";
$table_event_info = "wp_cause_info";
for( $i=0; $i < $cs_product_count; $i++ ){
$wpdb->insert($table_cause_product,array(
'cause_ID'=>$post_id,
'product_ID'=>$cs_product_array[$i],
'status'=>'1'
),array('%d','%d','%d'));
}
$wpdb->insert($table_event_info,array(
'cause_ID'=>$post_id,
'event_start_date'=>$event_start_date,
'event_end_date'=>$event_end_date,
'event_start_time'=>$event_start_time,
'event_end_time'=>$event_end_time,
'event_all_day'=>$event_all_day,
'event_phone'=>$event_phone,
'event_location'=>$event_location,
'event_map'=>$event_map
),array('%d','%s','%s','%s','%s','%d','%s','%s','%d'));
}
答案 0 :(得分:0)
我的代码中没有任何问题。但一定要仔细检查你的代码。
我的问题与您的数据库表名称的名称。您确定$table_cause_product
和$table_event_info
是否包含表格的实际名称?我建议使用$wpdb->prefix
而不是编码表名。
在我的情况下,我会在几个部分检查功能。
$_POST
实际上是否包含我想要的数据。 $result = $wpdb->insert( $table, $data, $format );
进行调试,因为$result
将保存操作的结果。如果它是false
,那么我确信操作肯定有问题。wp_die()
(虽然它不是标准的方法,但它足以满足我的目的),这样我就可以看到转储的变量数据了。您的代码可能面临的一个主要问题是,如果在保存后编辑帖子,则可能会为相同的帖子数据插入另一行。如果帖子正在自动保存,您需要一些安全措施。我会在这里推荐一个where子句来检查行是否存在。如果存在则可以简单地更新行,或者插入数据。
希望这对你有所帮助。