You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过PHP向Shopify的product.json添加应用块问题求助

问题排查:通过PHP代码向Shopify产品模板添加应用块失败

问题背景

已推送并创建版本的Theme App Extension,手动编辑主题时可正常看到应用块,但通过PHP代码修改templates/product.json添加该块后,商品页面无效果,且模板文件中未出现新增块;但删除现有非自定义块的操作可成功执行。需求是在产品模板的价格块后添加该应用块。

Theme App Extension代码

<span style="color: {{ block.settings.color }}">
  Hello world
</span>

{% schema %}
  {
    "name": "Hello World",
    "target": "section",
    "stylesheet": "app.css",
    "javascript": "app.js",
    "settings": [
        { "label": "Color", "id": "color", "type": "color", "default": "#000000" }
    ]
  }
{% endschema %}

执行的PHP代码

$user = User::where('store', $this->store)->first();

$headers =  array('X-Shopify-Access-Token: ' . $user->access_token,'Content-Type: application/json', 'Accept: application/json');

$config = array(
    'ShopUrl' => $this->store,
    'AccessToken' => $user->access_token,
);

PHPShopify\ShopifySDK::config($config);
$shopify = new PHPShopify\ShopifySDK;

// 获取店铺主题
$themes = $shopify->Theme->get();

foreach ($themes as $theme) {
    if ($theme['role'] === 'main') {
        $theme_id = $theme['id'];
    }
}

// 获取product.json模板
$assets = $shopify->Theme($theme_id)->Asset->get(["asset[key]" => "templates/product.json"]);

$product_json = json_decode($assets['asset']['value']);

// 添加应用块
$product_json->sections->main->blocks->{"d8a2f128-c540-411d-adb6-bb5e0ae9aea1"} = (object) [
    'type' => 'shopify://apps/product-reviews/blocks/product_reviews/7ef9607f-87c1-495e-b328-40a9baa6d672',
    'settings' => (object) [
        'color' => 3
    ]
];

// 在价格块后插入新块
foreach ($product_json->sections->main->block_order as $k => $v) {
    if ($v === 'price') {
        $output = array_splice(
            $product_json->sections->main->block_order, 
            $k + 1, 
            0, 
            (object) array("d8a2f128-c540-411d-adb6-bb5e0ae9aea1")
        );
    }
}

// 提交修改
$replace = [
    'asset' => [
        'key' => 'templates/product.json',
        'value' => json_encode($product_json)
    ]];

$ch = curl_init("https://$user->store/admin/api/2022-10/themes/$theme_id/assets.json");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($replace));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);

收到的API成功响应

{"asset":{"key":"templates/product.json","public_url":null,"created_at":"2022-10-23T20:45:31+03:00","updated_at":"2022-11-10T23:11:48+02:00","content_type":"application/json","size":5486,"checksum":"49020edbf9140badaae714935705f800","theme_id":136707506477,"warnings":[]}}

问题排查与修复方案

核心错误点

  1. Block ID传递格式错误:array_splice中传递了对象类型的ID,但block_order是字符串数组,需直接传入字符串ID。
  2. Settings参数格式不匹配:Theme App Extension中color是颜色类型,需传入十六进制颜色值(如#ff0000),而非数字3。
  3. JSON编码缺失必要参数:默认json_encode可能导致结构序列化异常,需添加格式化参数保证结构正确。

修正后的关键代码片段

$blockId = "d8a2f128-c540-411d-adb6-bb5e0ae9aea1";

// 修正应用块的settings格式
$product_json->sections->main->blocks->$blockId = (object) [
    'type' => 'shopify://apps/product-reviews/blocks/product_reviews/7ef9607f-87c1-495e-b328-40a9baa6d672',
    'settings' => (object) [
        'color' => "#ff0000" // 改为符合要求的颜色格式
    ]
];

// 修正block_order的插入逻辑,传入字符串ID并避免重复添加
foreach ($product_json->sections->main->block_order as $k => $v) {
    if ($v === 'price') {
        array_splice(
            $product_json->sections->main->block_order, 
            $k + 1, 
            0, 
            $blockId // 直接传入字符串ID
        );
        break; // 找到price块后跳出循环,防止重复插入
    }
}

// 修正JSON编码参数
$replace = [
    'asset' => [
        'key' => 'templates/product.json',
        'value' => json_encode($product_json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
    ]];

额外验证步骤

  1. 修改完成后重新获取templates/product.json,检查blocks对象和block_order数组是否正确包含新增块。
  2. 确认使用的Shopify API版本(2022-10)支持该操作,建议使用较新的稳定版本。
  3. 检查主题的产品section schema,确认是否允许添加第三方应用块(手动可添加则大概率支持,但需确保type路径完全正确)。

内容的提问来源于stack exchange,提问作者Grigor Borisov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:15:30