多个查询不插入Wordpress数据

时间:2015-03-11 09:26:51

标签: wordpress woocommerce

我写了一个函数,其中有两个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'));
 }

1 个答案:

答案 0 :(得分:0)

我的代码中没有任何问题。但一定要仔细检查你的代码。

我的问题与您的数据库表名称的名称。您确定$table_cause_product$table_event_info是否包含表格的实际名称?我建议使用$wpdb->prefix而不是编码表名。

在我的情况下,我会在几个部分检查功能。

  1. 检查$_POST实际上是否包含我想要的数据。
  2. 在所有情况下都使用$result = $wpdb->insert( $table, $data, $format );进行调试,因为$result将保存操作的结果。如果它是false,那么我确信操作肯定有问题。
  3. 最后我会使用wp_die()(虽然它不是标准的方法,但它足以满足我的目的),这样我就可以看到转储的变量数据了。
  4. 您的代码可能面临的一个主要问题是,如果在保存后编辑帖子,则可能会为相同的帖子数据插入另一行。如果帖子正在自动保存,您需要一些安全措施。我会在这里推荐一个where子句来检查行是否存在。如果存在则可以简单地更新行,或者插入数据。

    希望这对你有所帮助。