WooCommerce Hook add_meta_data не работает внутри woocommerce_new_orderPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 WooCommerce Hook add_meta_data не работает внутри woocommerce_new_order

Сообщение Anonymous »

В настоящее время я пытаюсь добавить мета-мету к продукту при создании заказа, чтобы она была видна на экране администратора заказа.
Я немного сбит с толку, потому что это должно быть относительно просто. задача, но она просто не играет в мяч.
Приведенная ниже функция вызывается через woocommerce_new_order
public function process_new_order($order_id) {

$order = wc_get_order($order_id);

// Loop over order items (products)
foreach ($order->get_items() as $item_id => $item) {
$product = $item->get_product();

// Check if the product has variations
if ($product->is_type('variation')) {
// Get the variation attributes (including "License Type")
$variation_attributes = $product->get_variation_attributes();

// Check for "License Type" variation
if (isset($variation_attributes['attribute_license-type'])) {
$license_type = $variation_attributes['attribute_license-type'];

if ($license_type == 'Simple') {
$this->generate_and_save_license_keys($order_id, $item, 1);
} elseif ($license_type == 'Business') {
$this->generate_and_save_license_keys($order_id, $item, 10);
}
}
}
}
}

Я знаю, что этот код работает, вызываетсяgenerate_and_save_license_keys, и он правильно генерирует ключ, который затем добавляется в базу данных, а мета существует и правильно регистрируется в журнале ошибок согласно этому код:
private function generate_and_save_license_keys($order_id, $item, $count) {
global $wpdb;

$product_id = $item->get_product_id(); // Get the product ID (plugin_id)
$subscription_id = 0; // For simplicity, we assume no subscriptions for now

// Initialize an array to hold the generated license keys
$license_keys = [];

// Generate the required number of license keys
for ($i = 0; $i < $count; $i++) {
$license_key = $this->generate_license_key();

// Add license key to the array
$license_keys[] = $license_key;

// Insert the license key into the database
$wpdb->insert(
$wpdb->prefix . 'llm_licenses',
[
'license_code' => $license_key,
'staging_url' => null, // Set staging URL as NULL
'subscription_id' => $subscription_id,
'plugin_id' => $product_id,
'order_id' => $order_id
]
);
}

// Store the license keys as a single meta field// Debug to check meta data
$item->add_meta_data('_license_keys', implode(', ', $license_keys), true);
error_log('Meta keys for item ' . $item->get_id() . ': ' . print_r($item->get_meta('_license_keys', true), true));
}

Однако эти данные не отображаются под товаром на экране единого заказа администратора.
Я пробовал добавить их вручную с помощью также функция, которая вызывается через woocommerce_order_item_meta_end, но кажется, что она срабатывает только тогда, когда я меняю порядок на «Обработка», а не при каждой загрузке страницы, и даже тогда она не отображается, а журнал ошибок показывает 0 данные для get_meta, даже если они были зарегистрированы при использовании get_meta черезgenerate_and_save_license_keys.
public function display_license_keys_on_order_screen($item_id, $item, $order, $plain_text) {
// Retrieve the meta data
$license_keys = $item->get_meta('_license_keys', true);
var_dump($license_keys);
print_r("fired");

// Log the meta data for debugging
error_log('Displaying license keys for item ' . $item_id . ': ' . print_r($license_keys, true));

if ($license_keys) {
// Display license keys on the order item page
echo '
' . __('License Keys', 'text-domain') . ': ' . esc_html($license_keys) . '
';
} else {
// Log if no license keys found for the item
error_log('No license keys found for item ' . $item_id);
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... -new-order
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»