ショートコードを使って、カスタムフィールドの値を記事内に挿入させる:【54日目】WordPress1日1プラグイン

ようこそのお運びで、厚く御礼申し上げます。
54日目です。今回はカスタムフィールドの値を、ショートコードで記事内に表示します。

※ショートコードについての説明はこちらの記事をまず見てくださいね。

ショートコードを使って、カスタムフィールドの値を記事内に挿入する(カスタムフィールド内のショートコードも許可する)。

ショートコードを使って、カスタムフィールドの指定した「名前」の値を挿入します。また、その際にカスタムフィールド内のショートコードの許可を操作できるようにします。

やりたいことが絡み合ってるので機能を箇条書きをします。

  • カスタムフィールドの値を、ショートコードで記事に表示
  • カスタムフィールドの名前は「name」属性に設定
  • カスタムフィールドの値は基本「現在の記事」に付随するもの
    他の記事から引用するとき「id」属性を設定)
  • ショートコードを許可する場合は「ss」属性を設定(1or 0)
    (値を設定しない場合は許可しない:値「0」)

※今回は、カスタムフィールドの名前の値は、基本1記事=1つにしています。
コードが複雑になって今回の本筋からはずれそうなので、次回にまわします。

あらためて、今回の機能

ショートコードは「cfview 」として、属性はカスタムフィールドの名前(name)と、記事の指定(id)、ショートコードの許可(ss)を設定するようにします。 140313-0003

カスタムフィールドには名前と値を設定しています(今回は複数の値には対応していません)。 140313-0005

表示側:ショートコードを書いた部分には、記事にカスタムフィールドに設定した値を表示します
140313-0007

まずは、function.phpに書いてみます。

では、function.phpに以下のコードを書きました。

add_shortcode('cfview','shortCode_customField_view');
function shortCode_customField_view($atts){
   //ショートコードに定義した値を取得&デフォルト値
   extract( shortcode_atts( array(
      'id' =>get_the_ID(),     //記事ID:(初期値:現在の記事ID)
      'name' => false ,        //カスタムフィールド名:(初期値:false)
      'ss'   => 0  ,           //ショートコード実行許可(0/1):(初期値:0)
      ), $atts) );
   //$nameが空の場合はfalseを返す
   if(!$name) return false;

   //エスケープ
   $id   = sprintf(esc_html("%s"),$id);
   $name = sprintf(esc_html("%s"),$name);
   $ss   = sprintf(esc_html("%s"),$ss);

   //値を取得(true:文字列処理)
   $custom = get_post_meta($id, $name, true);
   //※カスタムフィールド内ショートコード許可
   $custom = $ss==1 ? do_shortcode($custom) :$custom;

   return $custom;
}

ポイントはどこ?

  • 第一引数「$atts」にショートコードで指定した「属性(nameやidやss)」の値が入ります。shortcode_atts関数で、正当性をチェックデフォルトも設定してしまいます。 (WordPressCodex:shortcode_attsを参照
       //ショートコードに定義した値を取得&デフォルト値
       extract( shortcode_atts( array(
          'id'   =>get_the_ID(),   //記事ID:(初期値:現在の記事ID)
          'name' => false ,        //カスタムフィールド名:(初期値:false)
          'ss'   => 0  ,           //ショートコード実行許可(0/1):(初期値:0)
          ), $atts) ); 
  • 条件定義、デフォルト値の設定を行います。
    esc_htmlを使って属性の値を、エスケープします。
    ※属性にhtmlタグの入力等許可させない。

       $id   = sprintf(esc_html("%s"),$id);
       $name = sprintf(esc_html("%s"),$name);
       $ss   = sprintf(esc_html("%s"),$ss);
     
  •  カスタムフィールドの値をget_post_metaを使ってデータを取得します。
    第3引数はtrueを指定。返り値が文字列です。(falseの場合は配列)

       //値を取得(true:文字列処理)
       $custom = get_post_meta($id, $name, true);
  • 属性「ss」が1だった場合、ショートコードを許可します。
       //※カスタムフィールド内ショートコード許可
       $custom = $ss==1 ? do_shortcode($custom) :$custom;
  • ショートコードは以下のように記入します。
    1.カスタムフィールド名「paka3_test」の値を記事に表示
  • [[cfview name="paka3_test"]]

    2.カスタムフィールド名「paka3_test」の値をショートコードを許可して記事に表示

    [[cfview name="paka3_test" ss="1"]]

    3.別の記事の、カスタムフィールド名「paka3_test」の値を記事に表示

    [[cfview name="paka3_test" id="213"]]

コードをプラグイン用のファイルにします

それではfunction.phpに書いたコードを消して、 「paka3_shortCodeCustomField.php」というファイルを作成し、以下のコードを記入します。

このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。

今回のまとめ

今回は、カスタムフィールドの値をショートコードにして、記事内に入れたい!っと日頃ブログを更新していて思っていたので、まずは簡易版を作ってみました。以前書いたカスタムフィールドのコードと組み合わせても良いかもしれませんね。次回もうちょっと作ってみます。

wordpress1日1プラグイン

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です