Обновить дату примечаний к заказу в Woocommerce

Вопрос или проблема

У меня есть конкретное требование обновить дату заметки заказа WooCommerce, пожалуйста, посмотрите на изображение ниже, чтобы увидеть, что я хотел бы изменить.

Проблема, с которой я сталкиваюсь, заключается в том, что приведённый ниже код вызывает сбой на моем сервере, вызывая внутреннюю ошибку на локальной тестовой среде. Заметка сохраняется, но дата неверная. WooCommerce сохраняет заметки о заказах как комментарии, и дата фактически находится в таблице базы данных комментариев. Я не могу заставить нижеуказанный код работать, я надеюсь, что профессионал сможет указать, где я ошибаюсь, и как я могу получить функциональный код для реализации в плагине.

Заранее спасибо, я уже от отчаяния рву на себе волосы и нуждаюсь в руководстве.

add_action( 'woocommerce_process_shop_order_meta', 'woocommerce_process_shop_order', 10, 2 );
function woocommerce_process_shop_order ( $order_id ) {

 //Получите этот идентификатор заказа динамически
 $order = wc_get_order( $order_id );

 // Текст для заметки
 $note = __("Пользовательская заметка о заказе здесь");
 $note_date = date('d.m.Y',strtotime("-1 days"));

 // Добавьте заметку
 $order->add_order_note( $note );
 $order->wp_insert_comment($note_date);

 // Сохраните данные
 $order->save();

}

Дата заметки о заказе WooCommerce

С помощью метода add_order_note вы можете добавить заметку о заказе к вашему заказу. Если заглянуть в код этого метода, вы увидите, что этот метод является лишь оберткой вокруг функции wp_insert_comment из WordPress.

Поэтому ваша проблема в том, что вы хотите изменить дату заметки о заказе. Но это невозможно с помощью метода add_order_note. Если вы вернётесь к коду этого метода, вы увидите, что у этого метода есть только аргументы “$note”, “$is_customer_note” и “$added_by_user”. Так что даты нет.

Самый простой способ был бы сохранить заметку о заказе не с помощью “add_order_note”, а с помощью функции “wp_insert_comment”.

$test_date="2005-08-05 10:41:13";

$note = __("Пользовательская заметка о заказе здесь");

$user = get_user_by( 'id', get_current_user_id() );

$data = array(
   'comment_post_ID'      => $order_id,
   'comment_author'       => $user->display_name,
   'comment_author_email' => $user->user_email,
   'comment_author_url'   => '',
   'comment_content'      => $note,

   'comment_agent'        => 'WooCommerce',
   'comment_type'         => 'order_note',
   'comment_parent'       => 0,
   'comment_approved'     => 1,
   'comment_date'         => $test_date,
);

wp_insert_comment($data);

Ответ или решение

Чтобы обновить дату заметок заказа в WooCommerce, необходимо понимать, что метод add_order_note, предоставляемый классом WC_Order, не позволяет установить индивидуальную дату для заметки. Этот метод просто оборачивает функцию wp_insert_comment, которая фактически сохраняет заметки как комментарии в базе данных. Поэтому, чтобы реализовать вашу задачу, нужно использовать функцию wp_insert_comment напрямую, учитывая необходиимые параметры.

Вот шаги, которые вам следует предпринять, чтобы добавить заметку с определенной датой:

  1. Используйте хук, чтобы выполнить свой код в нужный момент. В вашем случае это может быть woocommerce_process_shop_order_meta.
  2. Получите ID заказа, который будет использоваться для добавления заметки.
  3. Создайте массив данных для комментария, включая нужную дату и информацию о пользователе, который добавляет заметку.
  4. Вызовите функцию wp_insert_comment, передав массив данных.

Пример кода

add_action('woocommerce_process_shop_order_meta', 'woocommerce_process_shop_order_with_custom_note_date', 10, 2);
function woocommerce_process_shop_order_with_custom_note_date($order_id) {
    // Получаем объект заказа
    $order = wc_get_order($order_id);

    // Текст заметки
    $note = __("Custom Order Note Here");

    // Установим желаемую дату для заметки
    $custom_date = "2005-08-05 10:41:13"; // Замените на нужную вам дату в формате Y-m-d H:i:s

    // Получаем информацию о текущем пользователе
    $user = get_user_by('id', get_current_user_id());

    // Данные для вставки в комментарий
    $data = array(
        'comment_post_ID'      => $order_id,
        'comment_author'       => $user->display_name,
        'comment_author_email' => $user->user_email,
        'comment_author_url'   => '',
        'comment_content'      => $note,
        'comment_agent'        => 'WooCommerce',
        'comment_type'         => 'order_note',
        'comment_parent'       => 0,
        'comment_approved'     => 1,
        'comment_date'         => $custom_date,
        'comment_date_gmt'     => get_gmt_from_date($custom_date),
    );

    // Вставка комментария
    wp_insert_comment($data);
}

Пояснение

  • $custom_date: Замените значение на желаемую дату в формате Y-m-d H:i:s. В приведённом примере установлена дата "2005-08-05 10:41:13".
  • get_gmt_from_date($custom_date): Эта функция используется для преобразования локальной даты в формат GMT, который также потребуется для корректного сохранения в базе данных.
  • Убедитесь, что хук вызывается в нужный момент и не создает циклические вызовы, которые могут привести к сбоям сервера.

Заключение

Использование wp_insert_comment позволяет вам контролировать такие параметры, как дата заметки, что именно вы и хотите реализовать. Следуя вышеуказанным шагам, вы сможете успешно добавлять заметки к заказам в WooCommerce с индивидуально установленной датой. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться за консультацией.

Оцените материал
Добавить комментарий

Капча загружается...