Kurocoへの移行時に既存記事のURLを変えずに移行できますか?
Kurocoへの移行時に既存記事のURL(例:https://example.com/blog/12345/)を変えずに移行することは可能です。
例えば、以下のような方法が取れます:
- 既存記事は、slugに
blog-12345のような形式で移行 - Kuroco上で追加する新規記事は
blog-[記事ID]で自動的にslugを作るようにトリガーを作成 - フロントエンドは、
/blog/12345/のページではblog-12345でAPIを取得
ステップ1:既存記事をslugを設定して移行する
既存の記事をインポートする際に、現在のURLパスに合わせたslugを各記事に設定します。
例えば、既存URLが https://example.com/blog/12345/ の場合、slugを blog-12345 に設定します。
slugはコンテンツ編集画面の「ID/Slug」フィールドで設定できます。また、CSVでコンテンツをアップロードする際にslug列を含めることも可能です。
ステップ2:コンテンツIDの重複を避ける
既存記事が旧IDをslugの一部として使用しているため(例:blog-12345)、Kurocoが自動採番する新しいコンテンツIDが移行済み記事の番号と重複しないようにする必要があります。
環境設定 -> 管理画面の「次のコンテンツID」設定を使って、移行済み記事と重複しない番号までtopics_idの採番を飛ばしてください。
例えば、移行した記事の最大番号が12345の場合、次のコンテンツIDを12346以上に設定します。
ステップ3:新規記事のslugを自動生成するトリガーを作成する
対象のコンテンツ定義IDに対して、トリガー「コンテンツの追加後」を設定したカスタム処理を作成し、新規コンテンツ追加時にslugを自動設定します。
トリガーのサンプルコード
{* トリガー:コンテンツの追加後 *}
{* slug を "blog-[topics_id]" の形式で自動生成する *}
{* ループの場合は処理をスキップ *}
{if $smarty.server.HTTP_RCMS_X_API_REQUEST_CNT > 0}
{return}
{/if}
{* topics_id を使ってslugを生成 *}
{assign var='new_slug' value="blog-`$topics_id`"}
{* api_internal でコンテンツのslugを更新 *}
{assign_array var='body' values=''}
{assign var='body.slug' value=$new_slug}
{api_internal
var='response'
status_var='status'
endpoint="/rcms-api/1/topics/`$topics_id`"
method='POST'
queries=$body
member_id=$smarty.session.member_id}
移行前のURLがゼロ埋めのIDを使っている場合は、string_format修飾子で桁数を揃えられます(例:{$topics_id|string_format:"%06d"})。詳細は修飾子を参照してください。
$topics_idは「コンテンツの追加後」トリガーで利用できる変数で、新しく作成されたコンテンツのIDがアサインされます。。api_internalプラグインは内部APIリクエストを送信してコンテンツを更新します。コンテンツ更新用のエンドポイント(例:Topics::update)が設定されている必要があります。詳細はカスタム処理からKurocoのAPIを呼び出す方法をご参照ください。
ステップ4:フロントエンドでslugを使ってコンテンツを取得する
フロントエンドでは、URLから取り出したIDを使い、Topics::detailsエンドポイントへslugをパスパラメータとして渡してコンテンツを取得します。
Fetchの例(JavaScript)
// 例:/blog/12345/ のようなページでslugを使ってコンテンツを取得する
const id = '12345'; // URLパスから抽出
const response = await fetch(
`https://your-site-key.g.kuroco.app/rcms-api/1/topics_details/blog-${id}`,
{ method: 'GET' }
);
const data = await response.json();
console.log(data.details.subject); // 記事のタイトル
関連ドキュメント
サポート
お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。