<?php echo do_shortcode('[audio mp3="<?php echo wp_get_attachment_url(get_post_meta($post->ID,"カスタムフィールド名",false)); ?>"]'); ?>
このように修正してみましたが、やはり先に販売用MP3ファイルをアップロードすると、そちらのURLを取得してきてしまいます。
「false」だと複数のカスタムフィールドから取得してしまうようでしたので「true」に修正しましたが、結果は変わりませんでした。
<?php
$files = get_post_meta($post->ID, 'カスタムフィールド名', false);
foreach($files as $file){
$file = wp_get_attachment_url($file);
}
?>
<?php echo do_shortcode('[audio mp3="<?php echo $file; ?>"]'); ?>
このようにしてみても、変わりませんでした。
まず、どの段階まで想定された値を取得できているか確認してください。
- カスタムフィールドの値が視聴用MP3ファイルのものかどうか
- wp_get_attachment_url で視聴用MP3ファイルのURLを取得できているかどうか
その上で、
<?php echo do_shortcode('[audio mp3="<?php echo $file; ?>"]'); ?>
シングルクォートで括られた文字列は変数展開されませんので、上記のコードだとショートコードには、<?php echo $file; ?>
の文字がそのまま渡されてしまっています。
これを正しく変数の値を渡すためには、.(ドット)を用いて文字列の結合を行って下さい。
<?php echo do_shortcode('[audio mp3="' . $file . '"]'); ?>
上記は、[audio mp3=" と $fileの値 と "] の3つの文字列を結合し、それを do_shortcode 関数の引数としています。
>jim912様
・カスタムフィールドの値が視聴用MP3ファイルのものかどうか
視聴用MP3を埋め込むカスタムフィールドのメタボックスは以下のコードで商品登録ページへ呼び出されています。
add_meta_box( 'postexcerpt', __( '視聴用MP3の埋め込み - メディアを追加ボタンをクリック', 'woocommerce' ), 'WC_Meta_Box_Product_Short_Description::output', 'product', 'normal' );
この場合は「postexcerpt」がカスタムフィールドの値となるのでしょうか?
<?php echo do_shortcode('[audio mp3=""]'); ?>
視聴用MP3ファイルのパスを取得したい場所へ上記コードを記述すると
例え””内が空であっても、最初にアップロードしたmp3ファイルを取得してくるので
audio mp3=””内への記述は無効化されているのか?ますます解らなくなってきました・・・
jim912様に提示いただいた
<?php echo do_shortcode('[audio mp3="<?php echo $file; ?>"]'); ?>
<?php echo do_shortcode('[audio mp3="' . $file . '"]'); ?>
上記はいずれも「投稿に添付した最初のファイル」が視聴プレーヤーに紐付けられます。挙動としては変化なしです。
<?php
$mp3 = wp_get_attachment_url( );
echo do_shortcode( '[audio src="' . $mp3 . '"]' ); ?>
たとえば、このように「wp_get_attachment_url」の値をカラッポにしても、エラーにならずに「投稿に添付した最初のファイル」がキチンと視聴プレーヤーに紐付けられるのは謎です・・・
もうオテアゲ状態でしたが
Woocommerce内のPHPファイルに同じ様な条件で「カスタムフィールドに添付されたオーディオファイル」を引っ張っている記述を見つけました。
<?php echo apply_filters( 'woocommerce_short_description', $post->post_excerpt ) ?>
上記をコピペしたところ、難なく解決致しました。
灯台下暗し(涙)