[解決済み] 在庫ステータスの条件分岐「在庫僅少」が反映されない。

フォーラム 使い方全般 [解決済み] 在庫ステータスの条件分岐「在庫僅少」が反映されない。

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

    いつもお世話になっております。

    在庫ステータスで条件分岐を使ったカスタマイズをしていて気付いたのですが、

    0から4まであるステータスの中で、

    「1:在庫僅少」

    のみ反映されません。

    「1の場合は●●、2の場合は▲▲、それ以外は■■」

    といったコードを書いた場合、

    1:在庫僅少を選択時は、■■が表示されます。

    1以外を選択した時は全て正常に反映されております。

    お手数をおかけ致しますが、一度ご確認いただければ幸いです。

    【Welcart 1.1.2を使用】

    [余談]

    開発フォーラムの自分の書き込みに返信がついた時に、メールでお知らせがくるようになると助かります。

    #64155
    nanbu
    キーマスター

    こんにちは。

    > 「1の場合は●●、2の場合は▲▲、それ以外は■■」

    > といったコードを書いた場合、

    どのようなコードですか?

    Welcartのバージョンはいくつですか?

    > 開発フォーラムの自分の書き込みに返信がついた時に、メールでお知らせがくるようになると助かります。

    何かプラグインがあるといいのですが・・・。

    #64156
    you
    参加者

    >nanbuさま

    お世話になっております。

    記入したコードは試した以下の通りです。

    (welcart1.1.2/wordpress3.3.1)

    welcartは1.1.2をバージョンアップではなく新規で導入しました。

    ■welcart_default/wc_templates/wc_item_single.php

    <?php if(usces_sku_num() === 1) : usces_have_skus(); ?>
    <!--1SKU-->

    の以下に

    <?php if( !usces_have_zaiko() ) : ?>
    <?php $status = usces_get_itemZaiko( 'id' ); ?>
    <?php if( 0 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス0', 'usces')); ?>
    <?php endif; ?>
    <?php if( 1 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス1', 'usces')); ?>
    <?php endif; ?>
    <?php if( 2 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス2', 'usces')); ?>
    <?php endif; ?>
    <?php if( 3 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス3', 'usces')); ?>
    <?php endif; ?>
    <?php if( 4 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス4', 'usces')); ?>
    <?php endif; ?>
    <?php else : ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータスなし', 'usces')); ?>
    <?php endif; ?>

    こうすると、「在庫あり/在庫僅少」を選択時には、「ステータスなし」が表示されました。

    ステータス2、3,4については各々が表示されました。

    上記のコードとは別ですが、<?php if( !usces_have_zaiko() ) : ?>の中にさらに<?php if( !usces_have_zaiko() ) : ?>を使用して条件分岐していたりするのですが、もしかしてこれも良くないのでしょうか・・・?

    購入ができるステータスとできないステータス、といった二つのくくりで動きに違いが出ていると思います。

    >何かプラグインがあるといいのですが・・・。

    なるほど。

    了解しました(^^;

    #64157
    nanbu
    キーマスター

    usces_have_zaiko()は在庫があるかどうかを返していますので、!usces_have_zaiko()の中では在庫がない時のステータス、elseでは在庫がある時のステータスを表示させると良いかと思います。

    このようになります。

    <?php $status = usces_get_itemZaiko( 'id' ); ?>
    <?php if( !usces_have_zaiko() ) : ?>
    <?php if( 2 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス2', 'usces')); ?>
    <?php endif; ?>
    <?php if( 3 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス3', 'usces')); ?>
    <?php endif; ?>
    <?php if( 4 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス4', 'usces')); ?>
    <?php endif; ?>
    <?php else : ?>
    <?php if( 0 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス0', 'usces')); ?>
    <?php endif; ?>
    <?php if( 1 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス1', 'usces')); ?>
    <?php endif; ?>
    <?php endif; ?>

    これを見ていただきますとわかります通り、usces_have_zaiko()の条件分岐を行う必要がございません。

    そこでこのようになります。

    <?php $status = usces_get_itemZaiko( 'id' ); ?>
    <?php if( 0 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス0', 'usces')); ?>
    <?php endif; ?>
    <?php if( 1 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス1', 'usces')); ?>
    <?php endif; ?>
    <?php if( 2 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス2', 'usces')); ?>
    <?php endif; ?>
    <?php if( 3 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス3', 'usces')); ?>
    <?php endif; ?>
    <?php if( 4 === $status ): ?>
    <?php echo apply_filters('usces_filters_single_sku_zaiko_message', __('ステータス4', 'usces')); ?>
    <?php endif; ?>

    更に、フックを使う必要がなければこのように書くこともできます。

    <?php
    $status = usces_get_itemZaiko( 'id' );
    if( 0 === $status ):
    echo 'ステータス0';
    elseif( 1 === $status ):
    echo 'ステータス1';
    elseif( 2 === $status ):
    echo 'ステータス2';
    elseif( 3 === $status ):
    echo 'ステータス3';
    elseif( 4 === $status ):
    echo 'ステータス4';
    endif;
    ?>

    また、この出力は、ステータス名を変えなければこのテンプレートタグと同じです。

    <?php echo usces_get_itemZaiko( 'name' ); ?>

    #64158
    you
    参加者

    >nanbuさま

    根本的に使い方を間違っていたようで、お恥ずかしい限りです。

    すみません。

    上記に書いていた「上記のコードとは別ですが・・・」の件でも、elseの使い方を正常に使って試した結果、思ったように表示されたので本当に助かりました。

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

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