usces_is_options() に引数を使いたい

フォーラム テンプレート(テーマ) usces_is_options() に引数を使いたい

  • このトピックには2件の返信、2人の参加者があり、最後にkichiにより9年、 6ヶ月前に更新されました。
3件の投稿を表示中 - 1 - 3件目 (全3件中)
  • 投稿者
    投稿
  • #74059
    kichi
    参加者

    ——————————————-
    WordPress のバージョン:WordPress 4.1.4
    Welcart のバージョン:1.4.12
    ご利用のテーマ:welthemes
    サーバー(会社名、サービス名):エックスサーバー10
    SSLの利用: 利用予定(今はまだ)
    WordPress のパーマリンク設定:/%category%/%post_id%
    ——————————————–

    商品登録のさいに一部の商品に対し、「COLOR」という名前をつけた商品オプションを適用しています。

    その商品ページにて、「COLOR」というオプションが適用されているものに対し、その色の説明を表示させたいと思っています。

    そこで、wc_item_single.php内に下記のように記述したのですが、これだとオプションが適用されている商品すべてに表示されてしまいます。

    <?php if (usces_is_options()) : ?>
    オプション「COLOR」の説明
    <?php endif; ?>

    その際にusces_is_options()を使用して表示しようかと思ったのですが、
    どのようにすればCOLORという引数をつけられるのかがわかりません。

    下記のようにしてみましたがダメでした。

    <?php if (usces_is_options(‘COLOR’)) : ?>
    オプション「COLOR」の説明
    <?php endif; ?>

    引数は使えないのでしょうか?
    ご教授いただけると幸いです。

    #74063
    nglife
    参加者

    こんにちは。
    usces_is_options()は「商品にオプションが登録されているかどうか」を判断する条件判定用の関数で引数は受け付けていません。
    意図するオプションに対して処理を行いたい場合には、少し回りくどいですが下記のようなやり方があります。

    <?php if (usces_is_options()) : ?>
    <?php 
      while (usces_have_options()) :
      //オプション項目ループ
        if (usces_getItemOptName() === "COLOR") :
     ?>
          オプション「COLOR」の説明
    <?php 
        endif;
      endwhile;
     ?>
    <?php endif; ?>

    usces_getItemOptName()はループ中のオプション名を取得する関数です。商品にオプションがある場合、登録されているオプションの名前を一つ一つチェックしてCOLORがあった場合に説明文を出力します。他オプションでも個別の追加処理をしたい場合にはwhileの中のif分岐を増やせばOKです。

    PHPに詳しい方でその他オプション項目毎に分岐やカスタマイズを行いたいという場合には、いっそのこと(商品に登録されている)オプション項目全てを変数として保持しておけば任意の場所でスムーズに処理が行えます。オプション項目取得には、「usces_get_opts(投稿ID, 配列キー指定)」を使用します(返り値:配列)。

    例:オプション名「COLOR」「SIZE」で異なる説明文を出力したい場合

    <?php 
      //商品に登録されているオプション全て取得
      global $post; //念のため
      $opts = usces_get_opts($post->ID, "name"); //変数名($opts)は他と被らないようなもの
     ?>
    <?php if(isset($opts["COLOR"])) : ?>
        オプション「COLOR」の説明
    <?php endif; ?>
    
    //他HTMLやらPHPコード
    
    <?php if(isset($opts["SIZE"])): ?>
        オプション「SIZE」の説明
    <?php endif; ?>

    usces_get_opts()の第2引数にオプション名(name)を指定して登録オプション配列を取得します。処理をしたいオプション名が配列キーに含まれる場合処理をする。といった感じです。コードもすっきりとして見やすいかと思います。

    usces_get_opts()で返ってくる配列
    $opts[第2引数で指定したキーの持つ値] => array(
    “meta_id”=> オプションの登録ID
    “name” => オプション名
    “means” => inputのタイプ(数字)
    “essential” => 必須項目かどうか
    “value” => オプションの持つ値(選択肢等)
    “sort” => 管理画面内でのオプション登録順
    );
    の6つの項目からキー指定が可能です。
    ※第2引数に指定がない場合「sort(=管理画面内でのオプション登録順)」が設定されます
    ※第2引数に何を設定しようが中身の6つの項目は常に保持されます(色々処理に使えます)

    気付けばボリュームが出てしまい申し訳ありませんがカスタマイズをされる他の方にもご参考までに。

    #74064
    kichi
    参加者

    nglife様

    こんにちは!カスタマイズ例まであげていただきありがとうございます。

    <?php
    //商品に登録されているオプション全て取得
    global $post; //念のため
    $opts = usces_get_opts($post->ID, “name”); //変数名($opts)は他と被らないようなもの
    ?>
    <?php if(isset($opts[“COLOR”])) : ?>
    オプション「COLOR」の説明
    <?php endif; ?>

    //他HTMLやらPHPコード

    <?php if(isset($opts[“SIZE”])): ?>
    オプション「SIZE」の説明
    <?php endif; ?>

    こちらを使用して意図した通りの表示ができました。
    本当に助かりました!

    また、配列に関してもとても勉強になりました。
    ありがとうございます。

3件の投稿を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。