अपने प्रश्न के 2 भाग के लिए: यदि आप केवल सरल उत्पाद प्रकार उपयोग कर रहे हैं (विविधताओं के बिना) तो आप उत्पाद डेटा पृष्ठ पर कस्टम कीमत फ़ील्ड जोड़ने और woocommerce_get_price_html का उपयोग कर मूल्य फ़िल्टर कर सकते हैं।
add_filter('woocommerce_get_price_html','so24863612_custom_price');
function so24863612_custom_price(){
global $post;
$_postID = $post->ID;
$product = get_product($_postID);
$UK_price = get_post_meta($_postID, '_UK_price', true); //loads custom meta data
$return_price = $product->get_regular_price(); //default to regular price
if (!empty($UK_price)) {
$return_price = $UK_price;
}
return $return_price;
}
आप बना सकते हैं और इस तरह से उत्पाद पृष्ठ पर कस्टम फ़ील्ड बचा सकते हैं:
//Display custom fields on product data page in admin
add_action('woocommerce_product_options_general_product_data', 'so24963039_display_custom_general_tab_fields');
function so24963039_display_custom_general_tab_fields() {
global $woocommerce, $post;
$UK_price = get_post_meta($post->ID, '_UK_price', true);
woocommerce_wp_text_input(
array(
'id' => '_UK_price',
'label' => __('UK Price (£)', 'woocommerce'),
'value' => $UK_price,
'desc_tip' => 'false'
)
);
}
//Save custom fields to access via get_post_meta
add_action('woocommerce_process_product_meta', 'so24963039_save_custom_general_tab_fields');
function so24963039_save_custom_general_tab_fields ($post_id) {
$woocommerce_UK_price = $_POST['_UK_price'];
if(!empty($woocommerce_UK_price))
update_post_meta($post_id, '_UK_price', esc_attr($woocommerce_UK_price));
}
----------------- Variations- के साथ उत्पादों के लिए ---------------------------
चेतावनी: परिवर्तनीय उत्पाद अधिक जटिल हैं और मैं इस जवाब में लगभग आत्मविश्वास नहीं हूं क्योंकि मैं उपरोक्त सरल उत्पादों के साथ हूं, लेकिन यहां मेरी वर्तमान समझ किसी भी तरह से है। मेरे पास कुछ मिनी-कार्ट डिस्प्ले समस्याएं थीं जिन्हें मुझे इस विधि का उपयोग करते समय चारों ओर हैक करना था (जिसे मैं अंत में समझाऊंगा), लेकिन कुल मिलाकर मिनी-कार्ट और नियमित कार्ट दोनों में गणना की जाती है।
add_action('woocommerce_product_after_variable_attributes', 'so24963039_variable_fields', 10, 2); //Display Fields
function so24963039_variable_fields($loop, $variation_data) {
echo '<tr><td>';
woocommerce_wp_text_input(
array(
'id' => '_variant_UK_price['.$loop.']',
'label' => __('UK Price (£)', 'woocommerce'),
'desc_tip' => 'false',
'value' => $variation_data['_variant_UK_price'][0]
)
);
echo '</td></tr>';
}
हम भी उन्हें गतिशील रूप से जोड़ने के लिए जब भी उपयोगकर्ता संपादित करें उत्पाद पृष्ठ पर नए संस्करण कहते हैं की जरूरत है::
पहले हम मौजूदा उत्पादों की भिन्नता टैब पर प्रत्येक संस्करण के लिए नए क्षेत्रों को जोड़ना चाहते हैं
add_action('woocommerce_product_after_variable_attributes_js', 'so24963039_variable_fields_js'); //JS to add fields for dynamically added new variations
function so24963039_variable_fields_js(){ //add fields to new variations that get added
echo '<tr><td>';
woocommerce_wp_text_input(
array(
'id' => '_variant_UK_price[ + loop + ]',
'label' => __('UK Price (£)', 'woocommerce'),
'desc_tip' => 'false',
'value' => $variation_data['_variant_UK_price'][0]
)
);
echo '</td></tr>';
}
फिर हम भिन्नता मेटा डेटा में कस्टम फ़ील्ड में परिवर्तन सहेजने:
add_action('woocommerce_process_product_meta_variable', 'so24963039_save_variable_fields', 10, 1); //Save variation fields
function so24963039_save_variable_fields($post_id) {
if (isset($_POST['variable_sku'])) {
$variable_sku = $_POST['variable_sku'];
$variable_post_id = $_POST['variable_post_id'];
// Variant Tier 1 Price
$_variant_UK_price = $_POST['_variant_UK_price'];
for ($i = 0; $i < sizeof($variable_sku); $i++) {
$variation_id = (int) $variable_post_id[$i];
if (isset($_variant_UK_price[$i])) {
update_post_meta($variation_id, '_variant_UK_price', stripslashes($_variant_UK_price[$i]));
}
}
}
}
अब हम हमारे कस्टम भिन्नता मेटा डेटा है, हम इसे कस्टम कीमत मॉड्यूल में तो जैसे पहुँच सकते हैं:
add_filter('woocommerce_get_price_html','so24863612_custom_price');
function so24863612_custom_price(){
global $post;
$_postID = $post->ID;
$product = get_product($_postID);
$product_type = $product->product_type;
$UK_price = get_post_meta($_postID, '_UK_price', true); //covers simple products
if($product_type == 'variation'){ //override with variant prices
$UK_price = get_post_meta($_postID, '_variant_$UK_price', true);
}
$return_price = $product->get_regular_price(); //default to regular price
if (!empty($UK_price)) {
$return_price = $UK_price;
}
return $return_price;
}
अब, मुझे विश्वास है कि हिस्सा मिनी गाड़ी प्रदर्शन के लिए छोड़कर काम कर सब कुछ होना चाहिए। किसी कारण से ऐसा लगता है कि मैं मिनी कार्ट में ठीक से प्रदर्शित करने के लिए मजबूर करने के लिए विविधता मेटा डेटा तक पहुंच कैसे प्राप्त कर सकता हूं - जैसे मुझे पता चला कि मिनी-कार्ट डिस्प्ले जेनरेट किया जा रहा था लेकिन मुझे परेशानी हो रही थी कस्टम वैरिएबल तक पहुंचने के लिए सही संदर्भ पथ प्राप्त करना, इसलिए मैंने इसे टेम्पलेट-टैग.एचपी में करने के लिए समाप्त कर दिया और कस्टम मूल्यों की एक सरणी को मेरे कस्टम मूल्य फ़ंक्शन में वैकल्पिक पैरामीटर पर पास कर दिया। हमें चीजों को कैसे करना चाहिए, इस बारे में बहुत गलत लगता है, लेकिन यह काम पूरा हो जाता है। मैं समस्या के इस हिस्से के 'सही' समाधान सुनने के लिए बहुत खुले हैं।
टेम्पलेट tags.php में:
<div class="small-7 large-7 columns"><?php
$product_title = $_product->get_title();
echo '<a class="cart_list_product_title" href="'.get_permalink($cart_item['product_id']).'">' . apply_filters('woocommerce_cart_widget_product_title', $product_title, $_product) . '</a>';
echo '<div class="cart_list_product_price">';
//original line: echo woocommerce_price($_product->get_price());
/*Custom Price Override Block*/
$_productID = $_product->id;
$product_type = $_product->product_type;
if($product_type == 'variation') {
$custom_field_data = $_product->product_custom_fields;
$regular_price = $custom_field_data['_regular_price'];
$custom_UK_price = $custom_field_data['_variant_UK_price'];
$custom_variant_prices = [$regular_price[0], $custom_UK_price[0]];
echo so24863612_get_custom_price($_productID, $custom_variant_prices);
} else {
echo so24863612_get_custom_price($_productID);
}
/*End Custom Price Override Block*/
echo ' /</div>';
echo '<div class="cart_list_product_quantity">'.__('Quantity', 'woocommerce').': '.$cart_item['quantity'].'</div>';
?></div>
कृपया जवाब –