Commerce Cart Redirection

Drupal Commerceストアで商品をカートに追加した後、ユーザーをチェックアウト、カート、またはカスタムURLにリダイレクトします。

commerce_cart_redirection
1,769 sites
24
drupal.org

インストール

Drupal 11, 10 v3.3.0
composer require 'drupal/commerce_cart_redirection:^3.3'
Drupal 9 v3.2.1
composer require 'drupal/commerce_cart_redirection:^3.2'

概要

Commerce Cart Redirectionは、顧客が商品をカートに追加した後に自動的にリダイレクトすることで、Drupal Commerceのショッピング体験を向上させます。これにより余分なクリックを排除し、顧客を目的の場所に直接誘導することで、チェックアウトプロセスを効率化します。

このモジュールは、どの商品バリエーションタイプがリダイレクトをトリガーするかを制御するための柔軟な設定オプションを提供します。チェックアウトページ、カートページ、または任意のカスタムURLへのリダイレクトを選択できます。さらに、新しいアイテムを追加する前にカートをクリアするオプションがあり、これは単一商品の購入フローやメンバーシップ/サブスクリプションサイトに便利です。

リダイレクトをトリガーする商品の「カートに追加」ボタンのテキストもカスタマイズでき、デフォルトの「Add to Cart」テキストの代わりに「今すぐ購入」や「購読する」などのより文脈に適したラベルを表示できます。

Features

  • 商品をカートに追加した直後にチェックアウトページにリダイレクトし、購入を効率化
  • チェックアウトに進む前に注文を確認できるよう、カートページにリダイレクト
  • 専門的なワークフロー用にカスタムリダイレクトURL(ローカルまたは外部)を設定
  • リダイレクト動作を適用する特定の商品バリエーションバンドルを選択
  • バンドル選択を否定して、選択したもの以外のすべての商品タイプでリダイレクトを実行
  • 新しいアイテムを追加する前にカート内の既存アイテムをクリア(単一商品購入フローに便利)
  • リダイレクトをトリガーする商品の「カートに追加」ボタンテキストをカスタマイズ(例:「今すぐ購入」「購読する」)

Use Cases

クイック購入 / エクスプレスチェックアウト

単一商品を販売するストアや購入ファネルを最小化したいストア向けに、任意の商品を追加した後に直接チェックアウトにリダイレクトするようモジュールを設定します。これによりカート確認ステップが削除され、コンバージョンが向上します。注文ごとに1つの商品のみを希望する場合は、「追加前にカートをクリア」を有効にします。

サブスクリプションまたはメンバーシップ販売

顧客が一度に1つだけ購入すべきサブスクリプションやメンバーシップを販売する場合、サブスクリプション商品バリエーションバンドルを選択し、チェックアウトへのリダイレクトを有効にし、「追加前にカートをクリア」を有効にします。明確にするためにボタンテキストを「今すぐ購読」に変更します。

デジタルダウンロードストア

顧客が通常一度に1つのアイテムを購入するデジタル商品ストアの場合、特定のデジタル商品バリエーションバンドルを直接チェックアウトにリダイレクトするよう設定します。物理商品は否定オプションを使用して通常通りカートに移動させることができます。

イベントチケット販売

チケットを選択した後すぐに購入を完了させたいイベントチケット販売の場合、イベントチケット商品バリエーションをチェックアウトにリダイレクトします。カートクリアオプションにより、各購入が別々のトランザクションになります。

サービス予約

即時の予約/支払いが必要なサービス(コンサルテーション、アポイントメント)を販売する場合、サービス商品タイプを直接チェックアウトにリダイレクトし、「今すぐ予約」などのカスタムボタンラベルでアクションを明確にします。

異なるフローを持つ混合商品タイプ

クイック購入アイテムと確認が必要なアイテムの両方を持つストアの場合、リダイレクト用にクイック購入商品バリエーションタイプのみを選択します。複雑なものを除いてほとんどの商品がリダイレクトする必要がある場合は、否定オプションを使用します。

Tips

  • リダイレクトルートで「その他」を選択する場合、内部Drupalパス(/contactなど)または外部URL(https://payment.example.comなど)を使用できます。内部パスはスラッシュで始める必要があります。
  • 「追加前にカートをクリア」オプションは、カートに追加リクエストで指定された数量を保持します。例えば、顧客が3つのアイテムを追加した場合、クリア後はその3つのアイテムのみがカートに入ります。
  • カートをクリアするだけでなく、顧客が購入できる特定の商品の数量を制限する必要がある場合は、このモジュールとCommerce Product Limitsを組み合わせてください。
  • モジュールは2段階のリダイレクトアプローチ(リクエスト属性を設定してからレスポンス時にリダイレクト)を使用して、カートに追加プロセス中にカートを変更する可能性のある他のモジュールとの互換性を確保します。
  • ボタンテキストを変更する際はユーザーエクスペリエンスを考慮してください。「今すぐ購入」は即時購入を暗示し、「カートに追加」は閲覧の継続を暗示します。テキストをリダイレクト先に合わせてください。

Technical Details

Admin Pages 1
Commerce Cart Redirection /admin/commerce/config/commerce_cart_redirection

カートに追加後にリダイレクトをトリガーする商品バリエーションタイプの設定、リダイレクト先URLの選択、新しいアイテムを追加する前にカートをクリアするなどの詳細オプションを設定します。

権限 1
Commerce Cart Redirectionの設定

/admin/commerce/config/commerce_cart_redirectionにあるCommerce Cart Redirection設定ページへのアクセスと変更を許可します

Hooks 2
hook_help

モジュールの目的を説明するモジュールのヘルプページ用のヘルプテキストを提供します。

hook_form_alter

商品バリエーションが設定されたバンドルに一致し、カスタムボタンテキストが指定されている場合に、「カートに追加」ボタンのテキストを変更するためにカートに追加フォームを修正します。

Troubleshooting 5
インストール後にリダイレクトが機能しない

デフォルトでは、モジュールはリクエストをリダイレクトしません。/admin/commerce/config/commerce_cart_redirectionに移動し、特定の商品バリエーションバンドルを選択するか、「バンドル条件を否定する」チェックボックスをオンにしてすべての商品をリダイレクトします。

設定が構成されているのに商品がリダイレクトされない

すべての商品バンドルを選択し、かつ否定オプションを有効にしている場合、論理反転により商品はリダイレクトされません。一部のバンドルの選択を解除するか、否定オプションのチェックを外してください。

カスタムURLリダイレクトが機能しない

カスタムURLが有効で正しくフォーマットされていることを確認してください。モジュールはUrlHelper::isValid()を使用して基本的なURL検証を実行しますが、リダイレクト先が存在するかどうかは確認しません。URLがアクセス可能で正しく入力されていることを確認してください(外部URLの場合はプロトコルを含む)。

「カートに追加」ボタンのテキストが変更されない

ボタンテキストの置換は、バリエーションバンドルがリダイレクト用に設定されている商品に対してのみ機能します。商品のバリエーションタイプがモジュール設定で選択されている(否定を使用している場合は選択されていない)ことを確認してください。

チェックアウトリダイレクトが「ページが見つかりません」で失敗する

チェックアウトリダイレクトにはCommerce Checkoutモジュールがインストールされている必要があります。代替のチェックアウトシステム(BigCommerceなど)を使用している場合、モジュールはフロントページにフォールバックします。チェックアウトパス用にカスタムURLを指定して「その他」オプションを使用してください。

Security Notes 2
  • カスタムURLフィールドは、サーバーサイドのリダイレクト先検証なしで任意のURLを受け入れます。「configure commerce_cart_redirection」権限を持つ管理者は信頼できることを確認してください。悪意のある外部サイトに顧客をリダイレクトする可能性があります。
  • モジュールは、組み込みのチェックアウトおよびカートオプション用の安全なリダイレクトURLを構築するために、DrupalのURL生成および検証ユーティリティ(Url::fromRoute、UrlHelper::isValid)を適切に使用します。