Developer

診断シミュレーションPro — 開発者向け情報

フック・ショートコード・カスタム投稿タイプなど、本プラグインを拡張・連携するための技術情報です。

ショートコード / ブロック

  • [mqs_simulator id="設問セットID"] — 設問セットを描画。id は必須。
  • ブロック名 mqs/simulator(「診断シミュレーション」)。属性 id(integer, 初期値 0)。

カスタム投稿タイプ

post_type用途
mqs_question_set設問セット(診断1件の親)
mqs_question設問
mqs_content結果コンテンツ

フィルターフック

フック型 / デフォルト用途
mqs_force_enqueue_assetsbool / 設定値テンプレートやACF経由でショートコードを呼ぶ場合に、CSS/JSを強制読込
mqs_force_cf7_assetsbool / false診断未設置ページでもCF7連携アセットを読込
mqs_analytics_rate_limit_per_minuteint / 120計測REST APIのIP単位レート上限(分あたり)
mqs_event_log_retention_daysint / 設定値計測イベントログの保持日数(cronで自動削除)
mqs_import_max_file_sizeint(bytes) / 5MBJSONインポートの最大ファイルサイズ
mqs_cf7_spam_preserve_agentsarray / ['wpcf7','recaptcha','turnstile','stripe']CF7誤判定救済モードで「判定を尊重(救済しない)」エージェント一覧
mqs_locate_templatestring解決済みテンプレートパスを差し替え
mqs_template_pathstring / 'templates/'テーマ側オーバーライドの探索ディレクトリ

例: 計測APIのレート上限を緩和

add_filter( 'mqs_analytics_rate_limit_per_minute', function () {
    return 300;
} );

例: サードパーティのスパム対策を救済対象に含める

add_filter( 'mqs_cf7_spam_preserve_agents', function ( $agents ) {
    // 一覧から外したエージェントの判定は「救済」されうる
    return array_diff( $agents, [ 'akismet' ] );
} );

JSフック

フロントエンドJS(assets/js/script.js)には、外部スクリプトや埋め込みコンテンツから挙動を拡張するための2種類のフック機構が実装されています。

  • ① CustomEvent ベースのイベントフック(DOMイベント)
  • ② コンテンツ単位のインラインJSフック(埋め込みコード実行)

① CustomEvent ベースのイベントフック

mqsDispatch() で発火します。コンテナ要素に bubbling 付きで dispatch されるため、container.addEventListener(...) でも document.addEventListener(...) でも捕捉できます。

各イベントの detail には共通で以下が付与されます。

{ container, questionSetId, postId, /* 各イベント固有の値 */ }

イベント一覧

イベント名発火タイミングdetail(固有分)
mqs:start最初の回答時(1回だけ)answers
mqs:answer各回答ごとquestionId, choiceId, stepNumber, answers
mqs:complete全問回答完了時answers
mqs:beforeResults結果HTML挿入の直前html, count, answers
mqs:afterResults結果HTML挿入の直後html, count, answers, resultItems
mqs:results:rendered埋め込みフォーム初期化後(CF7 / Turnstile 等の連携用)
resultsContent 上で発火・共通payloadなし
container, simulator
mqs:contentBeforeShow各結果アイテム描画直前(paint前・同期)contentId, element, container, questionSetId, postId, answers
mqs:contentShow各結果アイテム描画後(次のpaint後)同上
mqs:restartやり直しボタン押下時(共通payloadのみ)

利用例

// 全問回答完了を捕捉
document.addEventListener('mqs:complete', function (e) {
  console.log('回答:', e.detail.answers);
  console.log('質問セット:', e.detail.questionSetId);
});

// 結果アイテムが表示されたタイミングで処理
document.addEventListener('mqs:contentShow', function (e) {
  const { contentId, element } = e.detail;
  // element に対する追加処理など
});

② コンテンツ単位のインラインJSフック

各結果アイテム内に埋め込まれた <script class="mqs-content-hooks">(JSON)から before / after のコード文字列を読み取り、mqsRunHook()new Function('event', 'mqs', code) として実行する仕組みです。

動作フロー

  1. mqsReadItemHooks() が結果アイテム内のJSONをパース
  2. before のコード → mqs:contentBeforeShow のタイミングで実行
  3. after のコード → mqs:contentShow のタイミングで実行

実行コンテキスト

フックコード内では以下が利用できます。

変数内容
event発火した CustomEvent(mqs:contentBeforeShow / mqs:contentShow
mqsコンテキストオブジェクト(下記)
this対象の結果アイテム要素(ctx.element

mqs(ctx)の中身:

{ contentId, element, container, questionSetId, postId, answers }

埋め込みJSONの形式

<script class="mqs-content-hooks" type="application/json">
{
  "before": "/* paint前に実行されるJSコード文字列 */",
  "after":  "/* paint後に実行されるJSコード文字列 */"
}
</script>

補足

assets/js/analytics.js 側のイベント(start / answer / complete / result_view)は上記JSフックとは別物です。MQSAnalytics.trackEvent() によるサーバー送信用トラッキングであり、拡張用のフック機構ではありません。

テンプレートのオーバーライド

フロント描画テンプレートは、お使いのテーマに同名ファイルを置くと差し替えできます。

  • wp-content/themes/<theme>/templates/shortcode/simulator.php
  • wp-content/themes/<theme>/templates/shortcode/results.php

探索ディレクトリは mqs_template_path、最終パスは mqs_locate_template で変更可能です。

アンインストール時の挙動

既定ではアンインストールしてもデータは保持されます。mqs_uninstall_remove_all_data オプションを有効(管理画面「設問セット > 設定 > 高度な設定 > アンインストール」)にすると、関連する投稿・カスタムテーブル・オプションを完全削除します。