私はまだ関数と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> \n";
} else {
$button .= '<input type="hidden" name="variation" value="0" />';
}
この回答は、メソッドにフィードできるアイテムコードがあるという事実に基づいています。
編集:Randomizer
2つのことを行うメソッドを追加しました。1)乱数を返すように設定して、$calltoaction
ifステートメントが機能していることを確認できます(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> \n";
}
else
$button .= '<input type="hidden" name="variation" value="0" />';
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加