カート移動時に表示する画像をSKUに応じた画像にしたい

2011 年 11 月 1 日

ホーム フォーラム 使い方全般 カート移動時に表示する画像をSKUに応じた画像にしたい

このトピックには10件の返信が含まれ、3人の参加者がいます。5 年、 6 ヶ月前 nanbu さんが最後の更新を行いました。

11件の投稿を表示中 - 1 - 11件目 (全11件中)
  • 投稿者
    投稿
  • #50773

    rakuraku2
    参加者

    こんばんは。

    お世話になっています。

    商品コード、メイン画像が

    〇〇◯-■■■

    サブ画像が

    ◯◯◯-■■■-01~

    skuが

    ■■■-01~

    となっており、

    sku■■■-02のものがカートに入った時、サブ画像◯◯◯-■■■-02をカート画面に表示したいと思っております。(■■■-03がカートに入ったら〇〇◯-■■■-03のサブ画像を表示などのように。)

    welcartの基本的な使い方では、カラー別であれば1つの商品ページということでしたが、もともとskuの連番がカラーごとに付けられていたということと、縦長商品ページでカラーを選択させる構成でしたので現在試行錯誤しています。

    cart.phpの72行目を色々いじっていたのですが、私の知識とアイディア不足で解決に至らなかったので質問させて頂きました。

    私がしたこと

    1.

    usces_the_itemImage を用いる方法

    <?php usces_the_itemImage( 0, 100, 100 ); ?>

    0に入っているものを1、2などにするとサブ画像が表示されるので、skuを■■■-02のハイフンの次の数字を正規表現で抜き出して

    usces_the_itemImageの0のところに入れるというようなやり方をしたのですが、商品ページ自体では表示できたものの、カート画面では表示することができませんでした。

    2.

    メイン画像のURLを抜き出し、末尾に番号をつける

    メイン画像のURLはwp_get_attachment_image_srcで抜き出せますので、メイン画像を抜き出し、その末尾に番号(skuから正規表現で抜きだしたもの)を付けるという方法なら容易にうまくいくのですが、メイン画像・サブ画像を削除しもう一度画像をアップロードした場合、メイン画像のURLに番号が付与されてしまうため、(xxx.jpg→xxx1.jpgのように)画像を決め打ちしてしまうと画像表示がうまくいかないおそれがあるのでこれもうまくいきませんでした。

    1の場合だと、カートページはページとして扱っているためusces_the_itemImageが動かないのかな?と思っています。

    なにかうまい解決方法がある場合、ご教授願えますと嬉しいです。

    よろしくお願いいたします。


    Welcart のバージョン:1.0.6

    症状を確認したブラウザ:Firefox Google chrome

    サーバー(会社名、サービス名):coreserver

    SSLの利用: 専用SSL

    WordPress のパーマリンク設定:/◯◯◯/%postname%.html


    #63136

    nanbu
    参加者

    こんにちは。

    カートページ、内容確認ページ内の商品サムネイルを変更するためのフックが利用できると思います。

    usc-e-shop/functions/function.php のusces_get_cart_rows() 関数内に有ります。

    apply_filters('usces_filter_cart_thumbnail', $cart_thumbnail, $post_id, $pictid, $i)

    現在のバージョンでは引数としてカート情報がありませんので、カート情報を自分で取得しなくてはいけません。

    global $usces;
    $cart = $usces->cart->get_cart();

    SKUコードを取得するには、

    $sku = $cart[$i]['sku'];

    となります。

    #63137

    rakuraku2
    参加者

    お忙しいところお返事ありがとうございます。

    フックについては現在勉強中なので、templates/cart.php内の73行目に直に記入しました。

    もう少しだと思うのですが、うまくいきません。

    SKUの形式→<ここから>■■■-◯◯(色名)<ここまで>例:000-00(赤)

    SKUから末尾の番号を抜き出したいと思い、正規表現で

    $pattern = '/-([0-9]{2})(/';

    $match = array();

    // パターンにマッチした文字が $match に格納される
    preg_match($pattern, $sku, $match);

    // var_export($match);

    $number = $match[1];

    とし、

    $pictids = $this->get_pictids($itemCode);
    $image2 = wp_get_attachment_image_src( $pictids[$number], full , true );//'<img src="#" height="60" width="60" alt="" />';

    $src2 = $image2[0];

    で$numberに正規表現で抜き出した数字を入れ、画像のURLを取り出したいと思っていますが、うまくいきません。

    $numberに代わって数字、1や01、2や02を直接入れるとうまく動くのですが、正規表現で抜き出しpictidsの中に入れるとうまく動作しません。PHPが勉強不足なのを痛感しておりますが、解決策などありましたらご教授いただけますと嬉しいです。

    よろしくお願いいたします。

    #63138

    nanbu
    参加者

    $match をvar_export されていますが、値は正常でしょうか。

    $src2 = $image2[0]; の直前で、$number、$itemCode、$pictids、$image2 を全てvar_export して値がそれぞれ間違いないかを確認してみてはいかがでしょうか。どこが原因かが分かってくると思います。

    #63139

    rakuraku2
    参加者

    お忙しい中お返事ありがとうございます。

    カートに入れて色々確かめて見ました。

    カートには

    ■■■-209のsku→209-01(色)

    ■■■-210のsku→210-01(色)

    ■■■-210のsku→210-02(色)

    ■■■-209のsku→209-01(色)

    の順番に入れました。

    var_export($match);

    array ( 0 => '-01(', 1 => '01', )array ( 0 => '-01(', 1 => '01', )array ( 0 => '-02(', 1 => '02', )array ( 0 => '-02(', 1 => '02', )'

    ↑正常だと思います。

    var_export($match[1]);

    '01''01''02''02'

    ↑正常だと思います。

    var_export($number);

    '01''01''02''02'

    ↑正常だと思います。

    var_export($itemCode);

    '■■■-209''■■■-210''■■■-210''■■■-209'

    ↑アイテムコードも正常だと思います。

    var_export($pictids);

    array ( 0 => '83', 1 => '136', 2 => '137', )array ( 0 => '105', 1 => '129', 2 => '132', )array ( 0 => '105', 1 => '129', 2 => '132', )array ( 0 => '83', 1 => '136', 2 => '137', )

    ↑画像のIDもちゃんと取り出せてると思います。

    var_export($image2);

    array ( 0 => 'http://xxx/wp-includes/images/crystal/default.png', 1 => 46, 2 => 60, )array ( 0 => 'http://xxx/wp-includes/images/crystal/default.png', 1 => 46, 2 => 60, )array ( 0 => 'http://xxx/wp-includes/images/crystal/default.png', 1 => 46, 2 => 60, )array ( 0 => 'http://xxx/wp-includes/images/crystal/default.png', 1 => 46, 2 => 60, )

    ↑しかし、画像のデータ情報を抜き出すimage2はちゃんと取り出せませんでした。

    var_export($pictids[$number]);

    NULLNULLNULLNULL

    ↑$pictids[$number]がうまく働いていないのだと思います。

    var_export($pictids[1]);

    の場合だと商品画像1をしっかり取り出してくれるのですが・・・

    コードはほぼusces_the_itemImageの流用ですのでうまくいくと思ったのですが、現時点でもうまくいっておりません。

    現状フックはよくわかっていないのですが、usces_the_itemImageで

    apply_filters('usces_filter_img_alt', $alt, $post_id, $pictids[$number]);

    と、$pictids[number]が用いられていたため、

    ‘$html .= apply_filters(‘usces_filter_cart_thumbnail’, $cart_thumbnail, $post_id, $pictids, $i);’

    ‘$html .= apply_filters(‘usces_filter_cart_thumbnail’, $cart_thumbnail, $post_id, $pictids[$number], $i);’

    とかにもしてみたのですがやはり$pictids[$number]がうまく動いてくれないようです。

    もう少しだとは思うのですが、何か解決法などがあればご教授願えますと嬉しいです。

    よろしくお願いいたします。

    #63140

    nanbu
    参加者

    配列のkey として$number を使うのであれば、その値ではまずいと思います。

    $pictids[(int)$number] としてみてはどうでしょう。もしこの記述がまずいようでしたら、$number を使用する前に数値に変換するとうまく行くのではないでしょうか。

    #63141

    rakuraku2
    参加者

    nanbu様

    お忙しい所御返事ありがとうございます。

    上手く動きました。

    数値に変換しないといけなかったのですね。私の些細なミスに長い間付き合っていただき、本当に感謝しています。

    ありがとうございました。

    #63142

    9steps
    参加者

    カートページ、内容確認ページ内の商品サムネイルを変更するためのフック(usces_filter_cart_thumbnail)を利用して、ショッピングカートに入れた際にSKUコードに応じた画像を表示するようにしてみました。

    画像ファイル名は、「商品コード-SKUコード.jpg」で決め打ちにして、商品にサブ画像として登録するようにし、ファイル名が一致する画像IDのサムネールを表示するようにしてみました。

    やり方は他にもありそうですが、とりあえずご参考までに。

    /*
    
    */
    /* テーマファイル内のfunction.phpに記述 */
    /* Welcart カート サムネール画像 フィルターフック */
    /*
    */
    add_filter('usces_filter_cart_thumbnail', 'my_usces_filter_cart_thumbnail', 10, 4);

    function my_usces_filter_cart_thumbnail() {

    global $usces;
    $args = func_get_args();
    list($cart_thumbnail, $post_id, $pictid, $i) = $args;

    $itemCode = $usces->getItemCode($post_id);;
    $pictids = $usces->get_pictids($itemCode);
    $cart = $usces->cart->get_cart();
    $sku = $cart[$i]['sku'];

    $thumbnail_name = "/" . $itemCode . "-" . $sku . ".jpg$/" ;

    foreach($pictids as $key => $value) {
    $attachments = wp_get_attachment_metadata( $value );
    if ( preg_match ($thumbnail_name, $attachments[file]) ) {
    $pictid = $value;
    }
    }

    $cart_thumbnail = '<a href="' . get_permalink($post_id) . '">' .
    wp_get_attachment_image( $pictid, array(60, 60), true ) . '</a>';

    return $cart_thumbnail;
    }

    #63143

    nanbu
    参加者

    9stepsさん、情報提供ありがとうございます。

    旧Welcart(1.0)では「商品コード-SKUコード.jpg」をメディアにアップするとサブ画像として扱われてしまいますので、v1.1からの機能「ハイフン2つをサブ画像とする」を利用すると良いかと思います。「Welcartシステム設定」にて変更できます。

    #63144

    9steps
    参加者

    nanbuさま、

    いつもお世話になります。「ハイフン2つをサブ画像とする」の件、アドバイスありがとうございます。

    テストで「ハイフン2つ」つけた画像名にして、商品詳細本文の「アップロード/挿入」からアップロードしてみたところ、WP(Ver.3.3.1)の仕様なのか、ハイフン1つにファイル名が変更されてしまうようです

    例:IMG–0017.jpg をアップロード

    タイトル:IMG–0017

    ファイル名:IMG-0017.jpg

    タイトルは「ハイフン2つ」の状態になっており、問題なくサブ画像として登録されるので、実用上は特に問題はないのですが、注意していないと勘違いしそうですね。

    以上、ご報告でした。

    [attachment=6542,94]

    #63145

    nanbu
    参加者

    本当ですね!

    実際にアップロードされたファイルを見てみましたが、確かにハイフンが1つになってしまっていました。何故こんなことをするんでしょう。サーバーからファイルを復元しようとするときは面倒ですね。

    記号を変えるべきなのかもしれませんが、この仕様の変更は影響が大きいのでしばらく様子を見たいと思います。情報ありがとうございました。

11件の投稿を表示中 - 1 - 11件目 (全11件中)

このトピックに返信するにはログインが必要です。