SCF::getという関数を使っているところを拝見するに「Smart Custom Fields」プラグインをお使いということで間違いないでしょうか?
そして、多分ですが無駄にややこしいことになっている気がしますので、もう少しやりたいことを最初から教えていただければもっとシンプルな形になると思います。
というのも、meijinochocoさんの書かれているコードは、「Smart Custom Fields」プラグイン独自の機能である「繰り返しフィールド」機能を使用したものです。
これはWordPressが標準で持っている機能ではありませんので、検索で「WordPress カスタムフィールド ショートコード」などでヒットした情報をそのまま貼っても動かない可能性は高いです。
・何のためにショートコードを使いたいのか
・具体的にショートコードはどういうものか(WordPress標準の?自作?何らかのプラグインの?)
・本当に繰り返しフィールドでないといけないのか
あたりがわかると何かしら進展するかなと思います。
mypacecreatorさん。こんにちは。ご回答まことにありがとうございます。
ご指摘のとおり、Smart Custom Fieldsです。まさか専用の関数だったとは。
以下、ご確認事項への返答です。
>何のためにショートコードを使いたいのか
カスタムフィールド内で、いくつかプラグインの機能がほしいと思っています。
今回、商品をいくつか並べる記事になるのですが、その書式において、
shortcodes ultimate、Browser Shots、Add Any shereなどのプラグインの機能がほしいところです。
いずれもショートコードなくして呼び出す方法が分からないので、今のことろショートコードは私には必須かもしれません。
>>具体的にショートコードはどういうものか(WordPress標準の?自作?何らかのプラグインの?)
上述のとおりすべてプラグインのものです。
>本当に繰り返しフィールドでないといけないのか
1つの記事ABCと商品を複数並べるつもりです。
同じ書式がほしいので、カスタムフィールドと投稿タイプを作りました。
ただし、商品は3つの記事や、10個の記事があり、その都度変わります。
なのでその都度商品のフィールド数を追加できる機能が欲しかったのです。
同じ書式の繰り返し、ということですが、もしかしてもっと楽な方法ってありますでしょうか?
以上です。素人すぎていまいち的を得ていない返答になってしまっているかもしれませんが、ご検討いただければ幸いです。
meijinochocoさん
なるほどなるほど。詳細情報ありがとうございます。
Smart Custom Fieldsの繰り返しフィールドにショートコードを入れる運用を個人的にしたことがなかったので、試してみましたがいけそうでした。
■前提
・SCFプラグインで、繰り返しフィールド内にテキストフィールドを作る
・カスタムフィールドに入れるのはショートコード限定、それ以外の文字列は入れない
・1つの入力欄に入れるショートコードは1つだけ
■方法
まず、最初に貼ってくださったget_post_metaを使ったサンプルコードは忘れてください。
今回はすべてSmart Custom Fieldsの関数を使います。
繰り返しフィールドグループの、テーマ側への出力方法は作者さんのブログのサンプルコードを参照。
<?php
// 特定のグループのデータを取得(例:グループ名が repeat-group の場合)
$repeat_group = SCF::get( 'repeat-group' );
foreach ( $repeat_group as $fields ) {
// 値の出力(例:フィールド名が cf_shortcode の場合)
echo do_shortcode($fields['cf_shortcode']);
}
■ポイント
「do_shortcode」関数です。これは投稿の同じ位置に毎回同じショートコードが入るとかいう場合に、いちいち毎回入力しなくて良いようにショートコードをテーマ側に埋め込んだりするときに使います。
たとえば
<?php echo do_shortcode( '[hoge]' ); ?>
みたいな感じにテーマ側に書いておけば、毎回同じ位置に固定で何らかの機能が発動します。
今回は、この中の引数の部分をカスタムフィールドで動的にやるイメージですね。
もちろん、ショートコード以外の物が入れられたらそのままテキストで返ってくるとか、実際の運用でのデメリットはあると思いますが、実装としては一番手っ取り早いように思います。
おおお!!できました!
なんと心強いんでしょうか。。心から感謝いたします。
なるほど。 do_shortcodeとは、まったく知りませんでした。
実は最初、そちらと少し似た
<?php
$group_set = SCF::get( 'repeat-group' );
foreach ( $group_set as $field_name => $field_value ) {
echo apply_filters('the_content', get_post_meta($post->ID, 'cf_shortcode', true));
} ?>
とやっていたんです。
いちおうショートコードは動いてくれました。ところが、、
これでは、繰り返しのときに、なぜか最初の値だけしか繰り返してくれませんでした。
そこで検索した結果、質問のような形であれば繰り返しはしてくれることに気づきました。
しかし今度は、その形でのショートコードとの組み合わせ方が分からない。と。
行き詰って今回の質問に至った次第でした。
って、別に経緯などどうでもいいでしょうけれど笑、いえ、ついうれしくって。笑
ほんとうに助かりました。
どうもありがとうございます!
おっと、ここでびっくりです。
なんとなんと、ご提示の前提のあとの2つが希望に沿っておりませんでした…(´;ω;`)
実はふつうのテキストも書きますし、ショートコードは多様するのでした。。
うぅぅん。考えものですね。ムズカシスギル…
あ、でも、ご提示の形でもテキストは反映しましたけどね。(*^^)v
だからショートコードの多様が今度は問題に…
さらに言うと実際は私が上で書いたものにセルを付けたります。
あ、でも、これもご提示の形で反映しましたけど。(*^^)v(*^^)v
さて、実際にはこう書いており
<!-- 前提はクリアできるけれど、最初の値しか反復してくれないバージョンです -->
<?php
$group_set = SCF::get( 'repeat-group' );
foreach ( $group_set as $field_name => $field_value ) {
?>
<?php echo apply_filters('the_content', get_post_meta($post->ID, 'cf_shortcode1', true)); ?>
<ul class="classdayo">
<li>
<?php echo apply_filters('the_content', get_post_meta($post->ID, 'cf_shortcode2', true)); ?>
</li>
<li>
<?php echo apply_filters('the_content', get_post_meta($post->ID, 'cf_shortcode3', true)); ?>
<?php echo apply_filters('the_content', get_post_meta($post->ID, 'cf_shortcode4', true)); ?>
</li>
</ul>
<?php } ?>
これですと、ショートコードは多様できますが、最初のしか反復してくれず。
一方、ご提示いただいた方法にならって書いてみますと、
<!-- しっかり各値を反復してくれるようになりましたが、前提の「ショートコード多様」がクリアできず笑 -->
<?php
$repeat_group = SCF::get( 'repeat-group' );
foreach ( $repeat_group as $fields ) {
?>
<?php echo do_shortcode($fields['cf_shortcode1']);?>
<ul class="classdayo">
<li>
<?php echo do_shortcode($fields['cf_shortcode2']);?>
</li>
<li>
<?php echo do_shortcode($fields['cf_shortcode3']);?>
<?php echo do_shortcode($fields['cf_shortcode4']);?>
</li>
</ul>
<?php } ?>
しっかり反復してくれるものの、こんどはショートコードが多様できず。笑
ハイブリッドな形のアイディアありましたら、もし、ございましたら、、大、大、大募集でございまする。