Несколько запросов не вставляют данные Wordpress
Я написал функцию, где есть два запроса вставки. Один выполняется и вставляет данные правильно. Но следующий не выполняется. И я не могу проверить значение, которое я хочу вставить, если оно установлено или нет. Как это сделать? Эксперты выглядят любезно. Моя функция приведена ниже:
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 ответ
Я не вижу здесь никаких проблем с вашим кодом. Но обязательно перепроверьте свой код.
Проблемы могут быть с именами таблиц вашей базы данных. Вы уверены, что $table_cause_product
а также $table_event_info
содержит фактическое имя таблицы? Я бы порекомендовал использовать $wpdb->prefix
вместо того, чтобы кодировать имена таблиц.
В моем случае я бы проверил функцию в нескольких частях.
- Проверить
$_POST
на самом деле содержит данные, которые я хочу. - использование
$result = $wpdb->insert( $table, $data, $format );
во всех случаях для целей отладки, как$result
будет держать результат операции. Если этоfalse
тогда я был бы уверен, что с операцией определенно что-то не так. - Наконец-то я бы использовал
wp_die()
(хотя это не стандартный способ сделать, но этого достаточно для моей цели), чтобы я мог видеть данные переменных данных.
Одна из основных проблем, с которой вы можете столкнуться при использовании своего кода, заключается в том, что, если сообщение редактируется после сохранения, оно может вставить еще одну строку для тех же данных сообщения. Опять же, если сообщение автоматически сохраняется, вам нужна защита. Я бы порекомендовал предложение where, чтобы проверить, существует строка или нет. Если существует, то вы можете просто обновить строку или вставить данные.
Надеюсь, это поможет вам.