Problema al guardar el campo personalizado en la pestaña de restricción de uso de cupones de WooCommerce

2 minutos de lectura

avatar de usuario
Hknksy

Estoy tratando de agregar un nuevo campo en la restricción de uso de cupones.

Aquí está mi código:

function add_coupon_cpt_field() {
    $value = get_post_meta( $post->ID, '_select', true );
    if( empty( $value ) ) $value="";

    $my_c_posts = get_posts( array(
            'posts_per_page'   => -1,
            'orderby'=> 'date',
            'order'=> 'DESC',
            'post_type'=> 'tour',
            'post_status'=> 'publish',
    ) );

    $options[''] = __( 'Select a value', 'woocommerce'); // default value

    foreach ($my_c_posts as $key => $post)
        $options[$key] = $post->post_title; 

        echo '<div class="options_group">';

        woocommerce_wp_select( array(
        'id'      => '_select',
        'label'   => __( 'Select Tour', 'woocommerce' ),
        'options' =>  $options,
        'value'   => $value,
        ) );

        echo '</div>';  
}
add_action( 'woocommerce_coupon_options_usage_restriction', 'add_coupon_cpt_field', 10, 0 );

// Save Fields
add_action( 'woocommerce_coupon_options_save', 'custom_posts_fields_save' );
function custom_posts_fields_save( $post_id ){
    $woocommerce_select = $_POST['_select'];
    if( !empty( $woocommerce_select ) )
      update_post_meta( $post_id, '_select', esc_attr( $woocommerce_select ) );
    else {
    update_post_meta( $post_id, '_select',  '' );
    }
}

Los títulos se muestran, pero cuando guardo el cupón, la selección no se guarda. ¿Algún consejo?

avatar de usuario
7uc1f3r

Algunos comentarios/sugerencias con respecto a su intento de código/pregunta:

  • Utilizando $value = get_post_meta( $post->ID, '_select', true ); no es necesario
  • En esta respuesta, he usado el tipo de publicación ‘producto’ (dado que está presente de forma predeterminada en WooCommerce, ajústelo cuando sea necesario)

Entonces obtienes:

// Add new field - usage restriction tab
function action_woocommerce_coupon_options_usage_restriction( $coupon_get_id, $coupon ) {
    // Set post type
    $post_type="product";

    // Get posts
    $my_c_posts = get_posts( array(
        'posts_per_page'    => -1,
        'orderby'           => 'date',
        'order'             => 'DESC',
        'post_type'         => $post_type,
        'post_status'       => 'publish',
    ) );

    // Default value
    $options[''] = __( 'Select a value', 'woocommerce' );

    // Get post title
    foreach ( $my_c_posts as $key => $post ) {
        $options[$key] = $post->post_title;
    }

    // Output field
    echo '<div class="options_group">';

    woocommerce_wp_select( array(
        'id'      => '_select',
        'label'   => __( 'Select tour', 'woocommerce' ),
        'options' =>  $options,
    ) );

    echo '</div>';
}
add_action( 'woocommerce_coupon_options_usage_restriction', 'action_woocommerce_coupon_options_usage_restriction', 10, 2 );

// Save
function action_woocommerce_coupon_options_save( $post_id, $coupon ) {
    // Isset
    if ( isset ( $_POST['_select'] ) ) {
        $coupon->update_meta_data( '_select', sanitize_text_field( $_POST['_select'] ) );
        $coupon->save();
    }
}
add_action( 'woocommerce_coupon_options_save', 'action_woocommerce_coupon_options_save', 10, 2 );

  • Gracias por su ayuda, ahora guarda el artículo seleccionado, pero cuando pruebo el cupón en la interfaz, aplica el descuento del cupón a todos los artículos del carrito, no solo al artículo seleccionado.

    – Hknky

    17 abr a las 12:36

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad