Несколько запросов не вставляют данные 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 вместо того, чтобы кодировать имена таблиц.

В моем случае я бы проверил функцию в нескольких частях.

  1. Проверить $_POST на самом деле содержит данные, которые я хочу.
  2. использование $result = $wpdb->insert( $table, $data, $format ); во всех случаях для целей отладки, как $result будет держать результат операции. Если это false тогда я был бы уверен, что с операцией определенно что-то не так.
  3. Наконец-то я бы использовал wp_die() (хотя это не стандартный способ сделать, но этого достаточно для моей цели), чтобы я мог видеть данные переменных данных.

Одна из основных проблем, с которой вы можете столкнуться при использовании своего кода, заключается в том, что, если сообщение редактируется после сохранения, оно может вставить еще одну строку для тех же данных сообщения. Опять же, если сообщение автоматически сохраняется, вам нужна защита. Я бы порекомендовал предложение where, чтобы проверить, существует строка или нет. Если существует, то вы можете просто обновить строку или вставить данные.

Надеюсь, это поможет вам.

Другие вопросы по тегам