你對這個問題有點含糊不清,因爲改變價格的HTML並不會真正改變產品價格本身。
- 你需要添加自定義的輸入框,需要刻
- 然後您就需要連接到車,這個自定義字段的值追加到產品中的文字
- 你需要通過計算產品一旦添加到購物車後有多少字符來計算總價格
- 然後您需要將自定義字段掛接到訂單數據,以便日後可以查看
這裏是如何完成所有這些...
首先讓我們添加文本輸入:
function add_engrave_text_field() {
echo '<table class="variations" cellspacing="0">
<tbody>
<tr>
<td class="label"><label>Engrave Text</label></td>
<td class="value">
<label><input type="text" name="engrave_text" placeholder="Engrave Text" /> £2 per letter</label>
</td>
</tr>
</tbody>
</table>';
}
add_action('woocommerce_before_add_to_cart_button', 'add_engrave_text_field');
然後,我們把這段車秩序,一旦用戶點擊「添加到購物車」按鈕:
function save_engrave_text($cart_item_data, $product_id) {
if(isset($_POST['engrave_text']) && !empty($_POST['engrave_text'])) {
$cart_item_data[ "engrave_text" ] = esc_attr($_POST['engrave_text']);
}
return $cart_item_data;
}
add_filter('woocommerce_add_cart_item_data', 'save_engrave_text', 99, 2);
然後我們計算多少會在總成本與需要被刻文:
function calculate_engrave_text_fee($cart_object) {
foreach ($cart_object->cart_contents as $key => $value) {
if(isset($value["engrave_text"])) {
// Get how many characters there are
$chars = strlen($value["engrave_text"]);
// Calculate the character count by 2 (£2)
$engrave_text_fee = $chars * 2;
$orgPrice = floatval($value['data']->price);
$value['data']->set_price($orgPrice + $engrave_text_fee);
}
}
}
add_action('woocommerce_before_calculate_totals', 'calculate_engrave_text_fee', 99);
(可選)可以使每個產品車/結帳的雕刻文字:
function render_meta_on_cart_and_checkout($cart_data, $cart_item = null) {
$meta_items = array();
/* Woo 2.4.2 updates */
if(!empty($cart_data)) {
$meta_items = $cart_data;
}
if(isset($cart_item["engrave_text"])) {
$meta_items[] = array("name" => "Engrave Text", "value" => $cart_item["engrave_text"]);
}
return $meta_items;
}
add_filter('woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 99, 2);
最後一點,你需要添加以下,使雕刻的文字出現在電子郵件,訂單等
function engrave_text_order_meta_handler($item_id, $values, $cart_item_key) {
if(isset($values["engrave_text"])) {
wc_add_order_item_meta($item_id, "Engrave Text", $values["engrave_text"]);
}
}
add_action('woocommerce_add_order_item_meta', 'engrave_text_order_meta_handler', 99, 3);
這是從我的舊項目中複製並修改以適應您自己的需求,所以未經充分測試。調試應該相當簡單,因爲WooCommerce上的文檔非常豐富。
感謝您的洞察。我已經創建了一個自定義輸入字段,輸出插入的字母數量。也就是說,我把自己的所有努力都取消了並實施了你的努力。插入自定義文本字段時,它不會影響價格本身。還有什麼我需要包括? – Craig
我已經更新'calculate_engrave_text_fee'方法,使它能夠與WC的最新版本一起工作,並且現在它全部在我的末端工作(自己測試) – adamj
感謝您的進一步修改。不幸的是,它仍然無法在網站上運行。我停用了我擁有的幾個插件,只留下了WooCommerce Plugin Active,但沒有成功。我也檢查過,以確保我擁有最新版本的WooCommerce。你能看到有任何其他問題可能會阻止這些代碼的工作嗎? – Craig