【问题标题】:create metafield on shopify在 shopify 上创建元字段
【发布时间】:2013-11-13 16:46:01
【问题描述】:

我想在我的 shopify 客户每次在我的 shopify 商店订阅产品时创建元字段,所以我得到以下代码来创建元字段,但不知道它如何在液体主题上工作?谁能指导我在哪里需要编写以下代码以使其正常运行?

‘POST’, ‘/admin/products/1328/metafields.json’, array(“metafield” => 
array(‘namespace’=>’inventory’, ‘key’=>’warehouse’, ‘value’=>"some text here",   ‘value_type’=>’string’)));

如何在液体模板页面中制作上述代码以使用 shopify api 创建元字段?

【问题讨论】:

  • 我找到了另一个例子并尝试了 product = ShopifyAPI::Product.find(148362461) product.add_metafield(ShopifyAPI::Metafield.new({ :description => 'Developer of the Site', : namespace => 'chargify', :key => 'customer', :value => 'Metlo', :value_type => 'string' })) 它也不起作用,我需要知道如何创建/更新/ 删除 shopify 上客户帐户页面上的元字段?

标签: json shopify liquid


【解决方案1】:

您不能在液体中创建元场。如果要创建元字段,则必须使用 admin API / graphQL API 来执行此操作。

Liquid 仅允许您将现有数据“打印”到模板。

【讨论】:

    【解决方案2】:

    与您商店的访客“互动​​”的纯液体不允许使用 Shopify API 进行任何操作。您需要打开 Oauth 会话才能发布/读取您的商店数据。

    【讨论】:

    • 我想与每个客户进行交互,以使用 shopify 发布/查看数据特别是元字段,所以我想知道我的客户何时进入会员页面并通过 chargify 订阅任何计划并返回我们的成功订阅后的网站,一旦订阅,我想在shopify网站上创建元字段,这样我就可以在以后检查登录的客户是否订阅了。
    • 你能告诉我如何使用 Oauth 开放会话来完成这个吗?
    【解决方案3】:

    对于您的示例,您将以这种方式引用元字段。

    {{ product.metafields.inventory.warehouse }}

    然后会显示

    “这里有一些文字”

    【讨论】:

      【解决方案4】:

      为此,您需要创建一个控制器和方法来接收 AJAX 请求并调用 Shopify API。

      在产品订阅按钮上创建点击事件。 点击事件将如下所示:

      let url = 'https://your_host.com/your_contoller/your_method?shop=your_shop_domain';
      let postData = { product_id: "your_product_id" };
      $.ajax({
        type: 'post',
        url: url,
        data: postData,
        dataType: 'json',
        complete: (res) => {
            console.log(res); // response from your_method
        }
      });
      

      在控制器方法中,您必须将 Shopify 客户端用作 phpish/shopify 或任何其他。 使用您的应用或私有应用的 api_key、access_token 的客户端,您可以发出这种请求:

      POST /admin/api/2020-10/products/PRODUCT_ID/metafields.json
      {
        "metafield": {
          "namespace": "inventory",
          "key": "warehouse",
          "value": 25,
          "value_type": "integer"
        }
      }
      

      你应该得到结果之后。

      但是,如果您想根据客户的请求创建元字段,最好将控制器方法包装在队列中并使用队列,因为如果您不使用队列,则可能会落入 Shopify REST 的限制范围内API。

      创建元字段后,您可以使用 Richard 的代码从 Liquid 中获取价值。

      【讨论】:

        【解决方案5】:

        正如提到的一些答案,Liquid 是只读的。

        但是,我构建了一个名为 FieldsRaven 的应用来处理此类用例 - 这是 Shopify 主题开发人员的小众应用,因此除非您知道自己在做什么,否则不应使用该应用。

        resource_type(客户、页面、产品等)、namespacekeyvalue_type 在创建 Raven 时在应用端定义,developer docs 将解释步骤.

        您需要做的就是在特定事件上触发ravenSubmitCustomerUpdate 函数

        <script type="text/javascript">
          ravenSubmitCustomerUpdate = (value) => {
            const ravenObj = {%- render 'raven-mac-gen', resource_id: customer.id, raven_id: 'TBD' -%};
            const valueObj = { value: value };
            const response = Raven.send(ravenObj, valueObj);
            response.then(res => {
              if (res.status === 200) {
                console.log('?', res.json)
              } else {
                console.error('?', res)
              }
            })
            .catch(e => console.error(e));
          }
        
          {% if customer %}
            window.addEventListener('DOMContentLoaded', () => {
              ravenSubmitCustomerUpdate("some text here");
            })
          {% endif %}
        </script>
        

        【讨论】:

          猜你喜欢
          • 2021-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多