El blog de LiveCommerce

Un blog de comercio electrónico y tiendas online

Cómo actualizar el Metafield de un producto con la API de Shopify paso a paso

Actualizar metafields en Shopify requiere lógica extra: primero comprobar si existe, obtener su ID, y luego decidir entre actualizarlo o crearlo. Este proceso, aunque sencillo en apariencia, se complica cuando tienes cientos o miles de productos. Aquí tienes la solución con PHP y la API REST de Shopify.

1. ¿Qué es un Metafield?

Un Metafield es un campo personalizado para guardar datos adicionales de productos: referencias de proveedor, especificaciones técnicas, etiquetas internas… La API de Shopify no los incluye en el endpoint de producto, por lo que hay que gestionarlos vía otro endpoint.

2. Proceso general

  • Consulta si el Metafield existe para el producto.
  • Si existe, actualiza su valor con PUT.
  • Si no existe, créalo con POST.

3. Código PHP completo


// Devuelve SimpleXMLElement si existe, o false
public function getMetafieldByKey($productId, $metafieldKey): mixed {
    list($namespace, $key) = array_pad(explode('.', (string)$metafieldKey, 2), 2, false);
    return $this->api()->get("products/$productId/metafields", ['namespace' => $namespace, 'key' => $key]);
}

public function insertOrUpdateMetafield($sProductId, $metafieldKey, $metafieldValue): mixed {
    $metafield   = $this->getMetafieldByKey($sProductId, $metafieldKey);
    $metafieldId = gv('metafields.0.id', $metafield) ?: false;

    if ($metafieldId) {
        $data = [
            'id'    => $metafieldId,
            'value' => $metafieldValue,
            'type'  => 'multi_line_text_field'
        ];
        return $this->api()->put("metafields/$metafieldId", ['metafield' => $data]);
    } else {
        list($namespace, $key) = array_pad(explode('.', (string)$metafieldKey, 2), 2, false);
        $data = [
            'namespace' => $namespace,
            'key'       => $key,
            'value'     => $metafieldValue,
            'type'      => 'multi_line_text_field'
        ];
        return $this->api()->post("products/$sProductId/metafields", ['metafield' => $data]);
    }
}
  

4. Ejemplo práctico


$productId    = '9909749219675';
$metafieldKey = 'product.short_description';
$value        = 'prueba de actualización: ' . date('d/m/Y H:i:s');
$this->insertOrUpdateMetafield($productId, $metafieldKey, $value);
  

Este ejemplo apunta a un producto específico, actualiza el metafield product.short_description con la fecha actual y permite verificar al instante que la integración funciona.

5. Limitaciones de la API REST

La API REST obliga a procesar producto por producto. En catálogos de miles de productos cada llamada REST se convierte en un cuello de botella: tiempo de ejecución, límites de API y mantenimiento de bucles.

6. Solución con ShopinCloud

ShopinCloud automatiza estas operaciones en bloque, optimiza peticiones, gestiona paginación y evita errores por tiempo de espera. Permite sincronizar miles de productos y sus metafields sin código adicional ni riesgo de interrupciones.

7. ¿Necesitas ayuda?

Si te has encontrado con algún problema al implementar este código o tienes dudas, ponte en contacto con nosotros y te ayudaremos a resolverlo.

Compártelo:

¿Tienes alguna consulta?

Si tienes alguna pregunta o sabes la respuesta sobre algún comentario, no dudes en contribuir.
Responderemos rápidamente.
Puedes utilizar etiquetas BBCode para escribir negrita, enlaces, imágenes, etc...
Más información en la página oficial de BBCOde http://www.bbcode.org/ Ejemplo:
[url=http://google.com]links[/url], [color=red]colores[/color] [b]negrita[/b]...

¿Has visto los videos en nuestro canal de Youtube?

En nuestro canal de Youtube publicamos periódicamente mejoras y funcionalidades del software de ecommerce.