【发布时间】:2014-12-01 05:11:34
【问题描述】:
我对编写函数和 PHP 还是很陌生,所以如果这很简单,请见谅。让我提供一点背景...
我已经使用 WPMUDev 的 MarketPress 构建了一个电子商务网站,并尝试编写一个函数,该函数将根据所选产品变体显示剩余库存。
在 MarketPress 中,如果您有多个产品变体,例如衬衫(蓝色/黑色/白色)然后您指定具有三种变体的一种产品。在单个产品页面上,每个变体都有一个下拉框。
到目前为止,我的代码只能找到初始产品的库存水平,而不是变体。请看下面:
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' );
我知道该函数正在选择 $stock[0] 中的第一个变体,因为 [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" />';
}
【问题讨论】:
-
“返回列表中每个项目的数组值” - 听起来像是函数式语言中
map之类的任务,不知道 PHP 是否有。 -
您是否有权访问下拉列表的脚本,或者该脚本在与下拉列表的生成相关的位置运行?
-
@Rasclatt 感谢您的回复。我已经添加了生成下拉菜单的代码。
-
如果我要做这样的事情,我会确保我有一个包含产品信息的查询,如果可用性在不同的位置/数组,我会确保两者都有匹配键。所以就像
$item['product']['123'] = 'Shirt (Blue)';和我的其他数组就像$status['product']['123'] = 'Unavailable';。如果您有两个比较阵列或能够制作两个,您可以这样做。另一种方法是让您的函数需要该函数返回状态的项目代码。 -
在
$meta数组中,你有没有像$meta['mp_itemcode']这样的项目代码(我不知道密钥会被调用,所以这是一个例子......)还是$key循环中的项目代码?