do_shortcodeでショートコードをコンテンツ外に出力しているなら
<?php echo do_shortcode( ‘[audio mp3="'. カスタムフィールドの値 .'"]‘ ); ?>
とかでいいんじゃないですかね。
返事ありがとうございます。
<?php echo do_shortcode( ‘[audio mp3="'. get_post_meta($post->ID,フィールド名) .'"]‘ ); ?>
と、してみたのですが、id 番号が表示されるのみでした。
どこらへんが間違ってしまっているのでしょうか?
こんにちは
get_post_meta 第三引数が指定していないので、配列になっているかもしれないですね。
試していませんが、
$attr = array(
'src' => trim( get_post_meta($post->ID, 'field name', true ) ),
'loop' => '',
'autoplay' => '',
'preload' => 'none'
);
echo wp_audio_shortcode( $attr );
表示するとき、幅が大きすぎると、表示が乱れる事があるので、max-widthかなんかで、幅を制限するといいです。
ただ、WordPress3.9になると、
http://tenman.info/labo/snip/archives/4677
こんな風になってしまうので、注意してください
nobita様、上記のコードで試してみましたが、なにも表示されませんでした。
mediaにはアップロードされておりそこから添付すれば表示・再生ともに上手くいきました。twenty-tenのテーマでカスタムフィールドテンプレートでファイルをアップロードしているのですが、そちらの問題を考えたほうがよいのでしょうか?
出力させたい場所はどこなのでしょうか?
その前後で<?php echo $post->ID);?>で投稿のIDが表示されますか?
またカスタムフィールドテンプレートでとありますがカスタムフィールドテンプレートのファイルアップロードでカスタムフィールドを登録しているのでしょうか?
その場合登録されてたのはファイル名ではなくIDだった気がするのですが
(試しにecho get_post_meta($post->ID, ‘field name’, true )で何が出力されるか確認してみてください)
そのショートコードはファイル名ではなくファイルのIDが正しいのでしょうか?
違うのならIDからファイル名を取得する必要があります。
確認しましたが、動作しているようでした。
Twenty tenのループ内への記述サンプルです。
実用的なコードに書き換えました。
変更は、post IDの取得方法と、mp3が存在しない場合には何も変更しないように、カスタムフィールドの存在をチェック。
loop-single.php
</div><!-- #nav-below -->
<!--追加コード-->
<div class="my-media" style="max-width:320px;margin:auto;">
<?php
$my_media = trim( get_post_meta(get_the_ID(), 'mp3', true ) );
if ( isset( $my_media ) && ! empty( $my_media ) ) {
$attr = array(
'src' => $my_media,
'loop' => '',
'autoplay' => '',
'preload' => 'none'
);
echo wp_audio_shortcode( $attr );
}
?></div>
<!--追加コード 終わり-->
<?php comments_template( '', true ); ?>
<?php endwhile; // end of the loop. ?>
twenty-tenのテーマでカスタムフィールドテンプレートでファイルをアップロードしているのですが、そちらの問題を考えたほうがよいのでしょうか?
カスタムフィールドに、mp3そのものをアップロードした場合は、動作しません。
回答したコードは、カスタムフィールドにmp3ファイルのURLが記述されている事を前提にしています。
問題がなければ、メディアのアップロードを使って表示したほうが簡単かつ、テンプレートのメンテも必要ないので、そちらのほうがいいのではないかと思います。
nobita様、gogoweb様。
一週間ほど、PCに触れなかったので
返信遅れてしまって大変申し訳ありません。
【カスタムフィールドに、mp3そのものをアップロードした場合は、動作しません。】
まさにこれでした。根本的に誤解をしていたようです。
記載していただいたコードで問題なく動いています。初歩的な問題につき合わせてしまって申し訳ありません。
ありがとうございました。