リスト内の各項目の配列の戻り値

gl3nnym

私はまだ関数とPHPを書くのはかなり新しいので、これが簡単なら失礼します。少し背景を説明しましょう...

WPMUDevのMarketPressを使用してeコマースサイトを構築し、選択した商品のバリエーションに応じて残りの在庫を表示する関数を作成しようとしています。

MarketPressでは、シャツ(青/黒/白)など、商品のバリエーションが複数ある場合は、3つのバリエーションを持つ1つの商品を指定します。単一の製品ページには、バリアントごとにドロップダウンボックスがあります。

私がこれまでに持っているコードは、最初の製品の在庫レベルのみを検出し、バリアントは検出しません。下記を参照してください:

    function mp_product_stock_sc( $atts ){
    global $post;
    $product_id = $post->ID;
    $stock = get_post_meta($product_id, 'mp_inventory', true);
    $high_st = 1;
    //return 'Default Stock: ' . $stock[0];

    if ($stock[0] <= $high_st AND $stock[0] > 0 ) {
        //return 'Hurry! We only have ' . $stock[0] . ' in stock!';
        return 'Hurry! Only one left in stock!';
    } elseif ($stock[0] == 0) {
        return '';
    } else {
        return 'In Stock';
    }


    return 'Stock: ' . $stock[0];
}

    add_shortcode( 'mp_product_stock', 'mp_product_stock_sc' );

[0]が明示的に定義されているため、関数が$ stock [0]の最初のバリアントを選択していることを知っています。[1]を手動で書き込むと、次のバリアントが選択されます。

私がする必要があるのは、製品バリエーションのドロップダウンリストで、各バリエーションの横に在庫があることです。例:

シャツ(ブルー)-在庫あり
シャツ(ブラック)-残り1枚だけお急ぎください!
シャツ(ホワイト)-在庫あり

値を返す方法ではなく、コードをどこに置くかを知っています。

どんなアドバイスも大歓迎です。これを書くためのもっと良い方法もおそらくあります...

ありがとう!

編集:ドロップダウンが生成されるコードの下に追加します。

//create select list if more than one variation

                    if (is_array($meta["mp_price"]) && count($meta["mp_price"]) > 1 && empty($meta["mp_file"])) {

                            $variation_select = '<select class="mp_product_variations" name="variation">';

                            foreach ($meta["mp_price"] as $key => $value) {

                                    $disabled = (in_array($key, $no_inventory)) ? ' disabled="disabled"' : '';

                                    $variation_select .= '<option value="' . $key . '"' . $disabled . '>' . esc_html($meta["mp_var_name"][$key]) . ' - ';

                                    if ($meta["mp_is_sale"] && $meta["mp_sale_price"][$key]) {

                                            $variation_select .= $mp->format_currency('', $meta["mp_sale_price"][$key]);

                                    } else {

                                            $variation_select .= $mp->format_currency('', $value);

                                    }

                                    $variation_select .= "</option>\n";

                            }

                            $variation_select .= "</select>&nbsp;\n";

                    } else {

                            $button .= '<input type="hidden" name="variation" value="0" />';

                    }
ラスクラット

この回答は、メソッドにフィードできるアイテムコードがあるという事実に基づいています。

編集:Randomizer 2つのことを行うメソッドを追加しました1)乱数を返すように設定して、$calltoactionifステートメントが機能していることを確認できます(2番目の変数Randomizerをのtrue代わりにに設定しますfalse)。2)数値が数値であることを確認し、数値である場合は返します。数値でない場合は、数値ではないことを意味する「err」を返します。

class StockCheck
        {
            public  static  function Fetch($itemcode, $high_st = 1)
                {
                    // Check your stock on this item code (I pressume this is what it's doing.
                    // If not, this is what it should to do.)
                    $stock      =   get_post_meta($itemcode, 'mp_inventory', true);
                    // Assign number. If randomizer set to true, it will just generate a random num
                    // to test the if statement below. Change to false to return true number
                    $_inStock   =   self::Randomizer($stock[0],false);

                    if($_inStock !== 'err') {
                            if($_inStock !== 0) {
                                    // If stock is less than or equal to 10
                                    if($_inStock <= 10)
                                        $calltoaction   =   'Hurry! Only '.$_inStock.' Left in Stock!';
                                    // If stock is greater than 10 but less than or equal to 20
                                    elseif($_inStock > 10 && $_inStock <= 20)
                                        $calltoaction   =   'Only a Few Left. Going fast!';
                                    // Anthing else is just in stock
                                    else
                                        $calltoaction   =   'In Stock';
                                }
                            // If zero, out of stock.
                            else
                                $calltoaction   =   'Out of Stock, Sorry!';
                        }

                    return (isset($calltoaction))? $calltoaction:'Error: Stock value not numeric';
                }

            protected static function Randomizer($value = 0, $randomizer = false)
                {
                    // If set to true, it will just generate a random number for testing purposes
                    $defVal =   ($randomizer == true)? rand(0,30):$value;
                    // If $defVal is not a numeric, return "err"
                    return (is_numeric($defVal) || $defVal == 0)? $defVal:'err'; 
                }

        }

    if(is_array($meta["mp_price"]) && count($meta["mp_price"]) > 1 && empty($meta["mp_file"])) {
            $variation_select = '<select class="mp_product_variations" name="variation">';
            foreach ($meta["mp_price"] as $key => $value) {
                    $disabled           =   (in_array($key, $no_inventory)) ? ' disabled="disabled"' : '';
                    $variation_select   .=  '<option value="' . $key . '"' . $disabled . '>' . esc_html($meta["mp_var_name"][$key]) . ' - ';
                    $variation_select   .=  ($meta["mp_is_sale"] && $meta["mp_sale_price"][$key])? $mp->format_currency('', $meta["mp_sale_price"][$key]): $mp->format_currency('', $value);
                    // This is where you would feed your item code...
                    $variation_select   .=  StockCheck::Fetch($meta["mp_itemcode"],1);
                    $variation_select   .=  "</option>\n";
                }
            $variation_select .= "</select>&nbsp;\n";
        }
    else 
        $button .= '<input type="hidden" name="variation" value="0" />';

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

インデックスによる配列リスト内の項目への値の割り当て

分類Dev

配列項目がオブジェクトの配列にリストされていない場合の戻り値

分類Dev

リスト内の各項目に変数を割り当てる[Python]

分類Dev

リスト内の各項目の「if条件」を確認する方法

分類Dev

配列内の各項目の部分文字列の確認

分類Dev

numpy配列の項目のインデックスを取得します。値はリストにあります

分類Dev

リスト内の各項目について、oracle pl / sql

分類Dev

Pug配列の最初の各項目の値を抽出する方法

分類Dev

配列リストの配列リストへの項目の追加

分類Dev

リスト内の各項目の最初の文字を印刷します

分類Dev

リスト内の各項目を評価するための最良の方法

分類Dev

配列内の各項目を個別に変換します

分類Dev

配列内の各単語の2番目の文字でリスト/配列を並べ替える方法

分類Dev

各リスト列の最後の項目の異なるスタイル

分類Dev

配列リストの項目の数を数える

分類Dev

値に基づいた配列項目のネスト

分類Dev

リスト内の各項目を値と比較し、PythonでT / Fを返します

分類Dev

最初の項目として配列内の空の値(PHP)

分類Dev

配列内の次の項目の値を変更する

分類Dev

java配列リストから別の配列リストに項目を追加

分類Dev

配列内のオブジェクトの戻り値

分類Dev

2つの配列リスト内の異なる項目の数を決定するコード

分類Dev

配列の配列リストで特定の項目を選択します

分類Dev

配列項目のリストを削除します

分類Dev

リスト内の繰り返し項目を削除する

分類Dev

リストに配列を追加し、C#でリスト内の各配列の配列の各値を出力する方法

分類Dev

配列内の項目を指定された値でシフトする

分類Dev

リストの各項目の反応カウンター

分類Dev

この配列のリストの各項目の前にドットを追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    インデックスによる配列リスト内の項目への値の割り当て

  2. 2

    配列項目がオブジェクトの配列にリストされていない場合の戻り値

  3. 3

    リスト内の各項目に変数を割り当てる[Python]

  4. 4

    リスト内の各項目の「if条件」を確認する方法

  5. 5

    配列内の各項目の部分文字列の確認

  6. 6

    numpy配列の項目のインデックスを取得します。値はリストにあります

  7. 7

    リスト内の各項目について、oracle pl / sql

  8. 8

    Pug配列の最初の各項目の値を抽出する方法

  9. 9

    配列リストの配列リストへの項目の追加

  10. 10

    リスト内の各項目の最初の文字を印刷します

  11. 11

    リスト内の各項目を評価するための最良の方法

  12. 12

    配列内の各項目を個別に変換します

  13. 13

    配列内の各単語の2番目の文字でリスト/配列を並べ替える方法

  14. 14

    各リスト列の最後の項目の異なるスタイル

  15. 15

    配列リストの項目の数を数える

  16. 16

    値に基づいた配列項目のネスト

  17. 17

    リスト内の各項目を値と比較し、PythonでT / Fを返します

  18. 18

    最初の項目として配列内の空の値(PHP)

  19. 19

    配列内の次の項目の値を変更する

  20. 20

    java配列リストから別の配列リストに項目を追加

  21. 21

    配列内のオブジェクトの戻り値

  22. 22

    2つの配列リスト内の異なる項目の数を決定するコード

  23. 23

    配列の配列リストで特定の項目を選択します

  24. 24

    配列項目のリストを削除します

  25. 25

    リスト内の繰り返し項目を削除する

  26. 26

    リストに配列を追加し、C#でリスト内の各配列の配列の各値を出力する方法

  27. 27

    配列内の項目を指定された値でシフトする

  28. 28

    リストの各項目の反応カウンター

  29. 29

    この配列のリストの各項目の前にドットを追加するにはどうすればよいですか?

ホットタグ

アーカイブ