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.