Foreach添加wpdb-> insert添加意外的行数

时间:2019-01-15 18:48:14

标签: php sql wordpress

我正在尝试将在数组中找到的foreach值行插入到wordpress数据库中。但是,在保存新帖子时,表中的行数意外增加了吗?

例如,如果我将最大条目数设置为4,然后单击“保存”,我是否会出现6行?

add_action( 'save_post', 'mp_sync_on_product_save', 10, 1 );
function mp_sync_on_product_save( $product_id ) {
    global $wpdb;
    $product = wc_get_product( $product_id );
    $qty = get_field('maximum_entries', $product_id);
    print_r($qty);
    $array = range(1, $qty);

    foreach ($array as $ticket) {
     $wpdb->insert('wp_tickets', array(
        'ticket_number' => $ticket,
     ));
    }
}

$ array的各种转储

array (size=4)
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 4

$ qty的各种转储

string '4'

将插入的行输出到wp_tickets

id--order_id--ticket_number--lottery_id 
44----0----------1----------------0
45----0----------0----------------0
46----0----------1----------------0
47----0----------2----------------0
48----0----------3----------------0
49----0----------4----------------0

更新的代码

add_action('save_post', 'my_acf_save_post', 100, 3);
function my_acf_save_post( $post_id, $post, $update ) {

        global $wpdb;
        global $post;

        if( ! ( wp_is_post_revision( $post_id) || wp_is_post_autosave( $post_id ) ) ) {

        $qty = wc_clean( $_POST['_max_tickets']);
    $array = range(1, $qty);

    foreach ($array as $ticket) {
     $wpdb->insert('wp_tickets', array(
         'ticket_number' => $ticket,
         'lottery_id' => $post_id,
     ));
    }

        }
}

1 个答案:

答案 0 :(得分:0)

这是因为根据wordpress的核心功能,save_post挂钩多次触发(例如:自动保存),请参见文档Here

因此第一次$ qty为空。因此$ array的值为

  

array(2){[0] => int(1)[1] => int(0)}

您需要按以下方式重写代码。

add_action( 'save_post', 'mp_sync_on_product_save', 11, 1 );
function mp_sync_on_product_save( $product_id ) {
    global $wpdb;
    if( ! ( wp_is_post_revision( $product_id) || wp_is_post_autosave( $product_id ) ) ) {
        $product = wc_get_product( $product_id );
        $qty = get_field('maximum_entries', $product_id);

        $array = range(1, $qty);

        foreach ($array as $ticket) {
         $wpdb->insert('wp_tickets', array(
            'ticket_number' => $ticket,
         ));
        }
    }
}
  

NB:将add_action优先级设置为10以上,因为其默认设置   优先级