Выполнить sql запрос в шаблоне писем woocommerce (wordpress)
Есть работающий шаблон customer-order-status-email.php , для отправки писем о новом заказе покупателю. Создан плагином "WooCommerce Менеджер Статуса Заказа" от SkyVerge. Лежит в папке wp-content/themes/kidz-child/woocommerce/emails . Работает. Но в нём почему-то не выводится информация о заказанных товарах.
Пробовал такой код
$email_order_items = array(
'show_purchase_note' => $show_purchase_note,
'show_download_links' => $show_download_links,
'show_sku' => false,
);
echo wc_get_email_order_items( $order, $email_order_items );
и такой
echo wc_get_email_order_items( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
$order,
array(
'show_sku' => $sent_to_admin,
'show_image' => false,
'image_size' => array( 32, 32 ),
'plain_text' => $plain_text,
'sent_to_admin' => $sent_to_admin,
)
);
не работает.
Пробовал написать php код напрямую:
function order_details($id)
{
$_DB = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); // тут подставлял свои данные
$sql = "SELECT order_item_id, order_item_name FROM wp_woocommerce_order_items WHERE order_item_type = 'line_item' AND order_id = '".$id."'";
$query = mysqli_query($_DB, $sql);
if (mysqli_num_rows($query) > 0)
{
//echo '<table border="1" style="border-collapse:collapse;border:1px #CCCCCC solid;" cellpadding="10">';
//echo '<tr><td><b>Название</b></td><td align="center"><b>Количество</b></td><td align="center"><b>Сумма</b></td></tr>';
while ($res = mysqli_fetch_assoc($query))
{
echo '<tr><td>'.$res['order_item_name'].'</td><td align="center">';
$order_item_id = $res['order_item_id'];
$qty_sql = "SELECT * FROM wp_woocommerce_order_itemmeta WHERE order_item_id = '".$order_item_id."' AND meta_key = '_qty'";
$qty_query = mysqli_query($_DB, $qty_sql);
$qty_res = mysqli_fetch_assoc($qty_query);
echo $qty_res['meta_value'];
echo '</td>';
echo '<td align="right">';
$price_sql = "SELECT * FROM wp_woocommerce_order_itemmeta WHERE order_item_id = '".$order_item_id."' AND meta_key = '_line_total'";
$price_query = mysqli_query($_DB, $price_sql);
$price_res = mysqli_fetch_assoc($price_query);
echo number_format($price_res['meta_value'], 0, ',', ' ').' ₽';
echo '</td></tr>';
}
// инфо о доставке
echo '<tr><td colspan="3"><b>Доставка</b></td></tr>';
$sql = "SELECT order_item_id, order_item_name FROM wp_woocommerce_order_items WHERE order_item_type = 'shipping' AND order_id = '".$id."'";
$query = mysqli_query($_DB, $sql);
$res = mysqli_fetch_assoc($query);
echo '<tr><td colspan="2">'.$res['order_item_name'].'</td><td align="right">';
$order_item_id = $res['order_item_id'];
$delivery_sql = "SELECT * FROM wp_woocommerce_order_itemmeta WHERE order_item_id = '".$order_item_id."' AND meta_key = 'cost'";
$delivery_query = mysqli_query($_DB, $delivery_sql);
$delivery_res = mysqli_fetch_assoc($delivery_query);
if ($delivery_res['meta_value'] == '0.00')
{
echo 'бесплатно';
}else{
echo $delivery_res['meta_value'];
}
echo '</td></tr>';
}else{
echo '<tr><td colspan="3">ошибка при получении данных.</td></tr>';
}
}
order_details($id);
Всегда выводит "ошибка при получении данных." Т.е. результат sql запроса пустой. В то же время, если я сделаю echo $sql и введу этот запрос в phpmyadmin,
SELECT order_item_id, order_item_name FROM wp_woocommerce_order_items WHERE order_item_type = 'line_item' AND order_id = '99908';
то получаю строки.
Делал отдельно тестовую страницу (просто order_details_test.php), она отлично данные подгружает.

Пробовал через класс $wpdb, причём код из примера
$pages = $wpdb->get_results(
"
SELECT post_title, post_content
FROM $wpdb->posts
WHERE post_status = 'publish'
AND post_type = 'page'
"
);
if( $pages ) {
foreach ( $pages as $page ) {
echo $page->post_title;
}
}
отлично работает, а мой код
$id = $order->get_order_number();
global $wpdb;
$sql = "SELECT order_item_id, order_item_name FROM wp_woocommerce_order_items WHERE order_item_type = 'line_item' AND order_id = '".$id."'";
$order_details = $wpdb->get_results( $sql );
if( $order_details ) {
foreach ( $order_details as $res ) {
echo '<tr><td>'.$res['order_item_name'].'</td><td align="center"></td><td></td></tr>';
}
}else{
echo '<tr><td colspan="3">ошибка при получении данных wpdb.</td></tr>';
}
всегда возвращает "ошибка при получении данных wpdb.".
Sql запрос возвращает всегда пустое значение. Этот же запрос выполненный в phpmyadmin или в тестовом файле работает.
Пробовал ещё сделать через file_get_contents - тоже пусто.
Отсюда я делаю вывод, что на момент отправки письма в базе данных нет.
Кто-нибудь знает, как мне добавить в шаблон данные о товарах?
Т.е. у меня задача отправлять при оформлении нового заказа письмо со специальным текстов и информацией о заказе, вне зависимости от статуса заказа.