我正在尝试将在数组中找到的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,
));
}
}
}
答案 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以上,因为其默认设置 优先级