WordPressで構築されたサイトの問い合わせフォームのサンクスページをつくり変えたいと相談を受けた時のこと。

問い合わせフォームの簡単な仕様

  • 他人が開発したプラグインで実装
  • コンパネからフォームをつくり、ショートコードが発行
  • フォームの表示から送信完了まで1つのURLで完結
  • 非同期通信は使われていない
  • 確認ページやサンクスページはカスタマイズできない

つくりかえるのは現実的に×

時間や予算の都合上、プラグインを変えたりつくりなおすのはムリ。どうすればいいだろうかと。

ショートコードを再利用

考えた挙句の苦肉の策。ショートコードを中継する形にした。 同一URLで完結してるなら、ショートコードは常にHTMLを返答してくるはず。 別のショートコードをつくり、本来のショートコードの関数にパスすればいいのではと。そして返ってきたHTMLを判定して好き勝手できる。

pluginのソースを覗いて、ショートコードを探す

まぁ大体こんな感じで書かれてると思う
/* これは一例です */
// プラグインの中身を見てショートコードから実行される関数をみつける
add_shortcode('form', 'plugin_no_shortcode');
function plugin_no_shortcode($attr = null) { // <= コレ
    // この間にいろいろな処理
    // ~~~処理ここまで

    // 最後はHTMLが返される
    return $html;
}

新たにショートコードをつくる

独自のショートコードをfunctions.phpあたりに書きます。
add_shortcode('formnottori', 'plugin_no_shortcode_nottoruyo');
function plugin_no_shortcode_nottoruyo($attr = null) {
    // 本来のショートコードに投げて、返ってきた文字列を受け取る
    $html = plugin_no_shortcode($attr);

    if($html === '問い合わせサンクス') {
        // 返ってきた文字列が、問い合わせ完了の文言と一致したら違う文言に差し替える
        return '問い合わせあざーっす';
    } else {
        // 完了の文言と違えばスルーパス
        return $html;
    }
}
あとはすでに使わているショートコードを、上書き用のショートコードに変更する。

こんな感じで実装したわけですが

タイトルにもある通り、こんな感じでショートコードを上書きするような形で使うのはいいんだろうか? スマートではないことは確か。何か他にいい手はあるのだろうか……。