サポート » 使い方全般 » Woocommerce カスタムフィールドの値を習得

  • 解決済 mainokomainoko

    (@mainokomainoko)


    Woocommerceを使ってユーザー登録型のMP3販売サイトを作っています。
    商品登録画面では「販売用MP3ファイル」と「視聴用MP3ファイル」を別々のカスタムフィールドでアップロードさせています。

    商品一覧ページでは、以下でコードで添付したMP3(メディアプレーヤー)を表示しています。
    WordPressに元々ある「埋め込みMP3メディアプレーヤー機能」を使って表示したいので、ショートコードの中に添付ファイルURLを取得してます。

    <?php echo do_shortcode('[audio mp3="<?php echo wp_get_attachment_url($post->ID); ?>"]'); ?>

    ところが、このコードだと「その投稿に対して一番古いファイルのURL」を取得してしまうので、項目の並び順として先にアップロードする「販売用MP3ファイル」のURLを取得してきてしまいます。

    本来であれば「視聴用MP3のカスタムフィールド」に埋め込んだ「添付ファイルURL」のみを取得するべきなのですが、そういった指定の方法がわからず困っています。

    カスタムフィールド名で指定
    もしくはファイルを埋め込んでいる範囲のクラス名などで指定できればと思っております。
    よろしくお願い致します

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック投稿者 mainokomainoko

    (@mainokomainoko)

    <?php echo do_shortcode('[audio mp3="<?php echo wp_get_attachment_url(get_post_meta($post->ID,"カスタムフィールド名",false)); ?>"]'); ?>

    このように修正してみましたが、やはり先に販売用MP3ファイルをアップロードすると、そちらのURLを取得してきてしまいます。

    トピック投稿者 mainokomainoko

    (@mainokomainoko)

    「false」だと複数のカスタムフィールドから取得してしまうようでしたので「true」に修正しましたが、結果は変わりませんでした。

    トピック投稿者 mainokomainoko

    (@mainokomainoko)

    <?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; ?>"]'); ?>

    このようにしてみても、変わりませんでした。

    モデレーター jim912

    (@jim912)

    まず、どの段階まで想定された値を取得できているか確認してください。

    1. カスタムフィールドの値が視聴用MP3ファイルのものかどうか
    2. 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 関数の引数としています。

    トピック投稿者 mainokomainoko

    (@mainokomainoko)

    >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=””内への記述は無効化されているのか?ますます解らなくなってきました・・・

    トピック投稿者 mainokomainoko

    (@mainokomainoko)

    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」の値をカラッポにしても、エラーにならずに「投稿に添付した最初のファイル」がキチンと視聴プレーヤーに紐付けられるのは謎です・・・

    トピック投稿者 mainokomainoko

    (@mainokomainoko)

    もうオテアゲ状態でしたが
    Woocommerce内のPHPファイルに同じ様な条件で「カスタムフィールドに添付されたオーディオファイル」を引っ張っている記述を見つけました。

    <?php echo apply_filters( 'woocommerce_short_description', $post->post_excerpt ) ?>

    上記をコピペしたところ、難なく解決致しました。
    灯台下暗し(涙)

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「Woocommerce カスタムフィールドの値を習得」には新たに返信することはできません。