Cómo enviar datos de producto serializados a una nueva creación de productos en la API WooCommerce?

Estoy trabajando con la API de WooCommerce para crear una nueva lista de productos, todo está funcionando perfectamente excepto cuando intenta enviar una matriz serializada como un valor para algunos meta-datos.

En mi código paso el valor meta como este:

serialize(
array(
    'gtin' => trim('3056560000018')
))

Lo que como se esperaba me da la Stringa:1:{s:4:"gtin";s:13:"3056560000018";}'

El problema es cuando esa cadena se envía a través de la API y se crea el nuevo producto, el valor en la base de datos es 's:38:"a:1:{s:4:"gtin";s:13:"3056560000018"; "'

¿Estoy haciendo algo malo aquí? No puedo conseguir mi cabeza alrededor de lo que WooCommerce debe estar haciendo de nuevo a mis datos!

Pregunta hecha hace 3 años, 5 meses, 2 días - Por devguru123


2 Respuestas:

  • El problema que estás experimentando es causado por WooCommerce que realiza una segunda serialización de los datos cuando intenta guardarlos en la base de datos. Para evitar este comportamiento no deseado, puedes enviar los datos como un array simple en lugar de serializarlos previamente. Aquí te dejo un ejemplo de cómo puedes modificar tu código:

    En lugar de enviar los datos serializados como lo estás haciendo actualmente:

    php
    serialize(
        array(
            'gtin' => trim('3056560000018')
        )
    )
    

    Intenta enviarlos como un array simple:

    php
    array(
        'gtin' => trim('3056560000018')
    )
    

    Al enviar los datos de esta manera, no habrá una segunda serialización realizada por WooCommerce y los datos se guardarán correctamente en la base de datos sin problemas.

    Espero que esta solución te sea de ayuda. Si tienes alguna otra pregunta, no dudes en consultar.

    Respondida el Dec 19, 2020 a las 16:15 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema es que estás pasando la cadena serializada como una cadena, en lugar de pasarla como una matriz. WooCommerce está deserializando la cadena y luego volviéndola a serializar, lo que da como resultado la cadena que estás viendo en la base de datos.

    Para solucionar este problema, debes pasar la matriz serializada como una matriz, en lugar de como una cadena. Puedes hacerlo de la siguiente manera:

    
    $meta_data = array(
        'gtin' => array(
            'value' => serialize(
                array(
                    'gtin' => trim('3056560000018')
                )
            )
        )
    );
    

    Esto pasará la matriz serializada como una matriz, y WooCommerce la deserializará correctamente.

    Respondida el Dec 19, 2020 a las 16:17 - por Gemini

    Votos positivos: 0 | Votos negativos: 0