Agregue tipos de personas mediante programación en la creación de productos que se pueden reservar en Woocommerce 3

2 minutos de lectura

Avatar de usuario de Pierre-Alexis
pierre-alexis

Básicamente, estoy tratando de agregar un nuevo producto que se puede reservar en Woocommerce usando un formulario personalizado que he creado, por lo que tengo que agregar los productos mediante programación. Crear el producto está bien, el problema es que no puedo encontrar la manera de agregar un nuevo tipo de persona a mi producto para poder fijar varios precios.

¿Alguien tiene una idea de cómo hacer esto?

Este es el código que tengo hasta ahora.

$post_id = wp_insert_post( array(
    'post_title' => $_POST["title"],
    'post_content' => $_POST["description"],
    'post_status' => 'publish',
    'post_type' => "product",
) );
wp_set_object_terms( $post_id, 'booking', 'product_type' );

  • ¿Qué quiere decir exactamente con tipo de persona? No entendí su pregunta correctamente. ¿Puede explicar más?

    – Kashalo

    5 oct 2018 a las 20:08

  • @kashalo En las reservas de woocommerce, puede establecer diferentes tipos de personas para cada producto de reserva…

    – LoicTheAztec

    5 oct 2018 a las 20:35


  • @LoicTheAztec gracias por la explicación, instalaré el complemento de reserva y miraré alrededor

    – Kashalo

    5 oct 2018 a las 20:37

Avatar de usuario de LoicTheAztec
LoicTheAztec

Lo siguiente habilitará “tiene personas” y creará sus tipos de persona para un producto reservable:

// Create the product
$product_id = wp_insert_post( array(
    'post_title' => $_POST["title"],
    'post_content' => $_POST["description"],
    'post_status' => 'publish',
    'post_type' => "product",
) );

// Set the product type
wp_set_object_terms( $product_id, 'booking', 'product_type' );

// Get an instance of the WC_Product Object
$product = wc_get_product($product_id);

// Enable persons and save
$product->set_has_persons(true);
$product->save();

// Here define your person types (one array by person type)
$persons_type_data =  array(
    // First person type
    array( 
        'block_cost'  => 0,
        'cost'        => 16.50,
        'description' => '',
        'max'         => '',
        'min'         => '',
        'name'        => __('Adults'),
    ),
    // Second person type
    array(
        'block_cost'  => 0,
        'cost'        => 9.20,
        'description' => '',
        'max'         => '',
        'min'         => '',
        'name'        => __('Childs'),
    ),
);

// Loop Through persons type data
foreach( $persons_type_data as $key => $values ){
    $person_type = new WC_Product_Booking_Person_Type();
    $person_type->set_block_cost($values['block_cost']);
    $person_type->set_cost($values['cost']);
    $person_type->set_description($values['description']);
    $person_type->set_max($values['max']);
    $person_type->set_min($values['min']);
    $person_type->set_name($values['name']);
    $person_type->set_parent_id($product_id);
    $person_type->set_sort_order($key); // Sorting is based on the array order

    // Save the person type
    $person_type->save();

    // Add the person type to the array
    $persons[] = $person_type;
}
// Set person types and save the product
$product->set_person_types($persons);
$product->save();

Probado y funciona.

¿Ha sido útil esta solución?