MTの管理画面 から Data API v4 でコンテンツデータを更新するときにハマった

2018-11-09
2分で読了
更新: 2025-12-14

目次

MT 7 の管理画面で下記のように実行して、 取扱店舗 というコンテンツデータフィールドの関連付けを削除したり変更したりしたかったのですが、どうにもコンテンツデータが更新できませんでした。

mtappVars.DataAPI.getToken(function () {
  mtappVars.DataAPI.getContentData(31, 3, 3, function (cd) {
    for (let i = 0; i < cd.data.length; i++) {
      if (cd.data[i].label === "取扱店舗") {
        cd.data[i].data = [];
      }
    }
    mtappVars.DataAPI.updateContentData(31, 3, 3, cd, function (newCd) {
      console.warn(newCd);
    });
  });
});

ここで、POST されたデータを見てみると、、、

content_data: {"author":{"displayName":"tinybeans","id":"1","userpicUrl":null},"basename":"06bed0e01cb73fa5040e2e726f03de7335617791","blog":{"id":"31"},"createdDate":"2018-10-26T11:14:03 09:00","data":"[{\"data\":[],\"id\":\"41\"}]","date":"2018-10-19T06:51:14 09:00","id":3,"label":"桜並木を自宅で楽しめる歴史ある建築物件","modifiedDate":"2018-11-09T02:04:40 09:00","status":"Publish","unpublishedDate":null,"updatable":true}

更新したい部分だけ、 "data":"[{\"data\":[],\"id\":\"41\"}]" のように値のオブジェクトが文字列になっていました。 そこで、下記のようにすべて文字列にしてから送信したら成功しました。

mtappVars.DataAPI.getToken(function () {
  mtappVars.DataAPI.getContentData(31, 3, 3, function (cd) {
    for (let i = 0; i < cd.data.length; i++) {
      if (cd.data[i].label === "取扱店舗") {
        cd.data[i].data = [];
      }
    }
    const param = Object.toJSON(cd); // ←ここがポイント
    mtappVars.DataAPI.updateContentData(31, 3, 3, param, function (newCd) {
      console.warn(newCd);
    });
  });
});

結構な時間ハマったので、共有しておきます。

以上です。

この記事をシェア

この記事を書いた人

Roy Okuwaki

「かたつむりくんのWWW」を運営している Roy Okuwaki(tinybeans)です。bit part 合同会社 代表社員。2007年から、Movable Type や Craft CMS などの CMS、Web 開発、AI ツールの使い方について書いています。

プロフィールを見る →

関連記事