Como adicionar lista de participantes no check-out e mostrar na página de detalhes do pedido. usando a função e ação wordpress e filtros
Respostas:
1 para resposta № 1Para adicionar campo após o campo de notas do pedido na página de checkout. adicione abaixo o código em function.php para obter a tela abaixo. Aqui mostramos o item total no carrinho -1 linhas. Porque 1 participante é que faz a ordem.
add_action( "woocommerce_after_order_notes", "my_custom_checkout_field" );
function my_custom_checkout_field( $checkout ) {
global $woocommerce;
$class_basket_count = $woocommerce->cart->cart_contents_count;
$class_basket_count = $class_basket_count - 1;
if($class_basket_count >= 1){
echo "<div id="my_custom_checkout_field"><h3>" . __("Participant List") . "</h3>";
for ($i=1; $i <= $class_basket_count; $i++ ){
woocommerce_form_field( "guest-name-".$i, array(
"type" => "text",
"class" => array("my-field-class form-row-wide"),
"label" => __("Guest Name"),
"placeholder" => __("Enter Name"),
), $checkout->get_value( "guest-name-".$i ));
woocommerce_form_field( "guest-email-".$i, array(
"type" => "text",
"class" => array("my-field-class form-row-wide"),
"label" => __("Guest Email"),
"placeholder" => __("Enter Email"),
), $checkout->get_value( "guest-email-".$i ));
}
echo "</div>";
}
}
Para adicionar e atualizar o meta valor da Lista de participantes. Adicione abaixo o código em function.php
add_action( "woocommerce_checkout_update_order_meta", "my_custom_checkout_field_update_order_meta" );
function my_custom_checkout_field_update_order_meta( $order_id ) {
global $woocommerce;
$class_basket_count = $woocommerce->cart->cart_contents_count;
for ($i=1; $i <= $class_basket_count; $i++ ){
if ( ! empty( $_POST["guest-name-".$i] ) ) {
update_post_meta( $order_id, "guest-name-".$i, sanitize_text_field( $_POST["guest-name-".$i] ) );
update_post_meta( $order_id, "guest-email-".$i, sanitize_text_field( $_POST["guest-email-".$i] ) );
}
}
}
Para mostrar a lista na página de detalhes do pedido. Veja a tela curta.
add_action( "woocommerce_admin_order_data_after_shipping_address", "my_custom_checkout_field_display_admin_order_meta", 10, 1 );
function my_custom_checkout_field_display_admin_order_meta($order){
$totla_class_ordered = $order->get_item_count();
echo "<h4>Participant Details</h4>";
echo "<div class="participant-details"><table>";
echo "<thead><tr><th>Guest Name</th><th>Guest Email</th></tr></thead>";
for ($i=1; $i <= $totla_class_ordered; $i++ ){
echo "<tr><td>".get_post_meta( $order->id, "guest-name-".$i, true ) . "</td><td>".get_post_meta( $order->id, "guest-email-".$i, true ) . "</td>";
}
echo "</table></div>";
}
0 para resposta № 2
E para adicionar lista de participantes aos emails enviados: (talvez útil para alguém)
add_action("woocommerce_email_customer_details","add_list_to_emails", 15, 4 );
function add_verification_id_to_emails_notifications( $order, $sent_to_admin, $plain_text, $email ) {
global $woocommerce;
$total_class_ordered = $order->get_item_count();
if ($total_class_ordered > 1) {
echo "<h3>Details of extra participants</h3>";
echo "<div class="participant-details" style="margin-top: 10px;"><table>";
echo "<thead><tr><th style="text-align: left;">Name</th><th style="text-align: left;">Email</th></tr></thead>";
for ( $i = 1; $i <= $total_class_ordered; $i ++ ) {
echo "<tr><td>" . get_post_meta( $order->get_id(), "guest-name-" . $i, true ) .
"</td><td>" . get_post_meta( $order->get_id(), "guest-email-" . $i, true ) .
"</td></tr>";
}
echo "</table></div>";
}
}