Код: Выделить всё
/**
* 1️⃣ Add custom fields to WooCommerce checkout
*/
add_filter('woocommerce_checkout_fields', function ($fields) {
$fields['billing']['player_id'] = [
'type' => 'text',
'label' => 'DNI Jugador',
'required' => true,
'class' => ['form-row-wide'],
'priority' => 20,
];
$fields['billing']['dad_name'] = [
'type' => 'text',
'label' => 'Nombre Padre/Madre/Tutor',
'required' => true,
'class' => ['form-row-wide'],
'priority' => 25,
];
$fields['billing']['dad_id'] = [
'type' => 'text',
'label' => 'DNI Padre/Madre/Tutor',
'required' => true,
'class' => ['form-row-wide'],
'priority' => 30,
];
$fields['billing']['player_birthdate'] = [
'type' => 'date',
'label' => 'Fecha de Nacimiento',
'required' => true,
'class' => ['form-row-wide'],
'priority' => 40,
];
$fields['billing']['player_team'] = [
'type' => 'text',
'label' => 'Equipo en el que juegas',
'required' => false,
'class' => ['form-row-wide'],
'priority' => 50,
];
$fields['billing']['player_adult'] = [
'type' => 'select',
'label' => '¿Eres mayor de edad?',
'required' => true,
'options' => [
'' => 'Selecciona una opción',
'yes' => 'Sí',
'no' => 'No',
],
'class' => ['form-row-wide'],
'priority' => 60,
];
$fields['billing']['pictures_consent'] = [
'type' => 'select',
'label' => 'Con la inclusión de las nuevas tecnologías dentro del mundo del deporte y ante la posibilidad de que en estas puedan aparecer imágenes de vuestros hijos/as durante la realización de las actividades deportivas. Y dado que el derecho a la propia imagen está reconocido al articulo 18 de la Constitución y regulado por la Ley 1/1982, de 5 de mayo, sobre el derecho al honor, a la intimidad personal y familiar y a la propia imagen y la Ley 15/1999, de 13 de diciembre, sobre la Protección de Datos de Carácter Personal. Timeout Workouts pide el consentimiento a los padres o tutores legales para poder publicar las imágenes en las cuales aparezcan individualmente o en grupo, que con carácter informativo se puedan realizar a los jugadores/as participantes en nuestras actividades.',
'required' => true,
'options' => [
'' => 'Selecciona una opción',
'yes' => 'Sí',
'no' => 'No',
],
'class' => ['form-row-wide'],
'priority' => 70,
];
$fields['billing']['player_allergies'] = [
'type' => 'textarea',
'label' => 'Alergias o enfermedades',
'required' => false,
'class' => ['form-row-wide'],
'priority' => 80,
];
$fields['billing']['player_medicine'] = [
'type' => 'textarea',
'label' => 'Medicamentos',
'required' => false,
'class' => ['form-row-wide'],
'priority' => 90,
];
$fields['billing']['player_video'] = [
'type' => 'text',
'label' => '¡Queremos conocerte! Te podemos ver jugar con un Link a un vídeo',
'required' => true,
'class' => ['form-row-wide'],
'priority' => 100,
];
$fields['billing']['player_shirt'] = [
'type' => 'select',
'label' => 'Talla de camiseta',
'required' => true,
'options' => [
'' => 'Selecciona una opción',
's' => 'S',
'm' => 'M',
'l' => 'L',
'xl' => 'XL',
'xxl' => 'XXL',
],
'class' => ['form-row-wide'],
'priority' => 110,
];
$fields['billing']['how_meet_us'] = [
'type' => 'select',
'label' => '¿Cómo nos has conocido?',
'required' => true,
'options' => [
'' => 'Selecciona una opción',
'social' => 'Redes sociales',
'friends' => 'Amigos',
'other' => 'Otros',
],
'class' => ['form-row-wide'],
'priority' => 120,
];
$fields['billing']['payment_times'] = [
'type' => 'select',
'label' => '¿En cuántas cuotas deseas pagar?',
'required' => true,
'options' => [
'' => 'Selecciona una opción',
'1' => 'Pago unico',
'2' => '2 Pagos fraccionados',
],
'class' => ['form-row-wide'],
'priority' => 130,
];
return $fields;
});
/**
* 2️⃣ Save custom checkout fields to order meta
*/
add_action('woocommerce_checkout_update_order_meta', function ($order_id) {
$order = wc_get_order($order_id); // Obtener el objeto de la orden
$fields = [
'player_id',
'dad_id',
'dad_name',
'player_birthdate',
'player_team',
'player_adult',
'pictures_consent',
'player_allergies',
'player_medicine',
'player_video',
'player_shirt',
'how_meet_us',
'payment_times',
];
foreach ($fields as $field) {
if ( isset( $_POST[ $field ] ) && ! empty( $_POST[ $field ] ) ) {
$order->update_meta_data( $field, sanitize_text_field( $_POST[ $field ] ) );
}
}
$order->save(); // Guardar la orden
});
Данные хранятся правильно И я вижу это там. Я хочу новый столбец для каждого из этих пользовательских полей. Для этого у меня был этот код < /p>
/**
*
*/
add_action('woocommerce_admin_order_data_after_billing_address', function ($order) {
echo 'Información del Jugador';
$fields = [
'player_id' => 'DNI Jugador',
'dad_id' => 'DNI Padre/Madre/Tutor',
'dad_name' => 'Nombre del Padre/Madre/Tutor',
'player_birthdate' => 'Fecha de Nacimiento',
'player_team' => 'Equipo',
'player_adult' => 'Mayor de Edad',
'pictures_consent' => 'Consentimiento Fotos',
'player_allergies' => 'Alergias o enfermedades',
'player_medicine' => 'Medicamentos',
'player_video' => 'Vídeo jugando',
'player_shirt' => 'Talla camiseta',
'how_meet_us' => '¿Cómo nos has conocido?',
'payment_times' => 'Número de cuotas para el pago',
];
foreach ($fields as $key => $label) {
$value = $order->get_meta($field);
if (!empty($value)) {
echo "$label: " . esc_html($value) . "
";
}
}
});
/**
*
*/
add_filter('woocommerce_shop_order_list_table_columns', function ($columns) {
// Define los nuevos campos
$fields = [
'player_id' => 'DNI Jugador',
'dad_id' => 'DNI Padre/Madre/Tutor',
'dad_name' => 'Nombre del Padre/Madre/Tutor',
'player_birthdate' => 'Fecha de Nacimiento',
'player_team' => 'Equipo',
'player_adult' => 'Mayor de Edad',
'pictures_consent' => 'Consentimiento Fotos',
'player_allergies' => 'Alergias o enfermedades',
'player_medicine' => 'Medicamentos',
'player_video' => 'Vídeo jugando',
'player_shirt' => 'Talla camiseta',
'how_meet_us' => '¿Cómo nos has conocido?',
'payment_times' => 'Número de cuotas para el pago',
];
// Insertar las nuevas columnas después de la columna 'order_total'
$new_columns = [];
foreach ($columns as $key => $value) {
$new_columns[$key] = $value;
if ('order_total' === $key) {
foreach ($fields as $field_key => $field_label) {
$new_columns[$field_key] = $field_label;
}
}
}
return $new_columns;
}, 20);
add_action('woocommerce_shop_order_list_table_custom_column', function ($column, $order) {
// Definir los campos a mostrar
$fields = [
'player_id' => 'DNI Jugador',
'dad_id' => 'DNI Padre/Madre/Tutor',
'dad_name' => 'Nombre del Padre/Madre/Tutor',
'player_birthdate' => 'Fecha de Nacimiento',
'player_team' => 'Equipo',
'player_adult' => 'Mayor de Edad',
'pictures_consent' => 'Consentimiento Fotos',
'player_allergies' => 'Alergias o enfermedades',
'player_medicine' => 'Medicamentos',
'player_video' => 'Vídeo jugando',
'player_shirt' => 'Talla camiseta',
'how_meet_us' => '¿Cómo nos has conocido?',
'payment_times' => 'Número de cuotas para el pago',
];
// Mostrar los valores de los campos personalizados
if (isset($fields[$column])) {
$value = $order->get_meta($field);
echo !empty($value) ? esc_html($value) : '—';
}
}, 10, 2);
< /code>
, который в какой-то момент сработал, но теперь я не знаю, почему он показывает «-» в каждой области. Столбцы добавляются правильно в таблицу, но все они пусты. Я пробовал много вещей без успеха. Нужно уточнить, что я новичок в PHP и WooCommerce, и этот код в основном сгенерирован AI. Кроме того, пару дней назад Woocommerce была обновлена, но я только обнаружил, что изменения - это логотип и цвета, поэтому это не должно было повлиять на мой сайт, но кто знает. Я думаю, что до обновления (или, по крайней мере, когда оно сработало), эти пользовательские поля не появились там, где они делают сейчас на странице подробностей заказа. Не знаю, актуально ли это.
Подробнее здесь: https://stackoverflow.com/questions/794 ... oocommerce