技術と経験で、価値のあるホームページ制作を。ホームページ制作を通じて、お客様に利益をもたらすことを追求します。

技術と経験で、価値のあるホームページ制作を。ホームページ制作を通じて、お客様に利益をもたらすことを追求します。

ブログ

HOME > 花のやブログ > MW WP FORMでショートコードをテーマファイルに書かない方法
2014/10/30Wordpress

MW WP FORMでショートコードをテーマファイルに書かない方法

こんにちは、和田です。

先日MW WP FORMがバージョンアップをし、お問い合わせの連番機能がつき
また、確認画面等の遷移でフォームの部分に移動するという機能がつきましたので
今まで公開していた機能強化プラグインの機能を一部削ります。

やはり、プラグインで無理やりやるよりも本体の方の機能を使用したほうが
安定性もいいと思いますのでまだバージョンアップしていない方は試してみましょう!

 

 

MW WP FORMでテンプレートにショートコードを書かない方法

さて、今回もMW WP FORMネタで
テンプレートに直接ショートコードを書かない方法
というのを考えてみたいと思います。

例えば、イベント告知用のカスタム投稿を用意して、その投稿には全てイベント申し込みのフォームを設置したい場合は
普通に考えれば、single-event.phpというテンプレートファイルを作って、テンプレート内に do_shortcodeタグで直接書きたくなります。

ただ、MW WP FORMでは本文(contents)内にショートコードがなければいろいろと面倒になったりします

 

 

どのような方法が考えられるか?

では、方法としてどのようなものがあるか考えてみましょう。

  1. 文末に入力してもらう
  2. 保存するときにショートコードを自動で付加する
  3. 本文には自動で入力させて、書いてもらう本文は別に用意する

この辺りが思いつきました。

1については、最も簡単かつ確実ですが、運用側にそれができる知識があるかどうかになります。
ある程度のルールを決めてあげればいいのですがたまに違う人が触ったりする。担当が変わる場合もある
となるとちょっと大変かもしれません。

2についてはまずいちばんはじめに考えることだと思います。
ただ、こちらも、例えば新規投稿した後、編集した時に変に触られる可能性がないとも言えません。
新規投稿>ショートコード貼り付け
編集時>ショートコードがあったら消す
編集保存時>ショートコードがなければ貼り付け
という分岐で対応できるといえばできますが…ちょっと面倒かも?

ということで3の方法を解説していきます。

 

 

どのように実装していくか

 3の方法をとるにあたって、必要なプラグインは通常、本文を入力する部分を隠すものです。
また、代わりになるエディターを表示したいので、これらに最も最適なものはやはりadvanced custom fieldsではないかと思います。

desc01

このようにコンテンツエディタにチェックを入れれば、コンテンツエディタ部分は表示されなくなります。
これは、ただ単に隠しているだけなので、この隠した場所に用意したフォームタグを自動で入れるようにしてあげればいいだけです。

以下がそのためのコードになります。
これをfunctions.phpに入力します

add_filter( 'default_content', 'insert_formcode', 10, 2 );
function insert_formcode( $content, $post ) {
  if (is_admin()) {
    if ($post->post_type == 'event') {
      $content = '[mwform_formkey key="50"]';
    }
  }
  return $content;
}

上の例では、ポストタイプeventを新規で登録するときに
あらかじめ用意したフォームのフォーム識別子を入れる。
ということになりますので、post_typeやフォーム識別子は適宜変更します。

これでテンプレートに書いていろいろと不便な思いをしなくても済みますね。

 

wada

書いた人:wada

エンジニア担当の和田です。
ボウリングの機械のメカニックから、漆を塗ったりトラックの運転手をしたりと
紆余曲折ありましたが最終的にプログラマーへと転職してしまいました。

人気記事ランキング

株式会社 花のや
〒460-0011
愛知県名古屋市中区大須4-1-79 第2ハヤシビル 3F

花のやについて

お仕事のご依頼やご相談は、下記の電話番号
または、メールフォームよりお問い合わせください。
TEL.052-251-7090 / FAX.052-251-7092

お問い合わせ