2

商品編集ページにカスタム フィールドを表示するコードを使用しています。このテキスト ボックスには、単一の製品ページの調理時間が表示されます。

コードは次のとおりです。

// Backend: Display additional product fields
add_action( 'woocommerce_product_options_general_product_data', 'add_time_field_general_product_data' );

function add_time_field_general_product_data() {
// Custom Time Field
woocommerce_wp_text_input( array(
    'id' => '_custom_time',
    'label' => __( 'Time for cooking', 'woocommerce' ),
));    
}

// Backend: Save the data value from the custom fields
add_action( 'woocommerce_admin_process_product_object', 'save_time_custom_fields_values' );

function save_time_custom_fields_values( $product ) {
// Save Custom Time Field
if( isset( $_POST['_custom_time'] ) ) {
    $product->update_meta_data( '_custom_time', sanitize_text_field( $_POST['_custom_time'] ) );
}
}

// Display custom fields values under item name in checkout
add_filter( 'woocommerce_checkout_cart_item_quantity', 'custom_time_field_checkout_item_name', 10, 3 );

function custom_time_field_checkout_item_name( $item_qty, $cart_item, $cart_item_key ) {
if( $value4 = $cart_item['data']->get_meta('_custom_time') ) {
    $item_qty .= '<br /><div class="my-custom-style"><strong>' . __("Time for cooking", "woocommerce") . ':</strong> ' . $value4 . ' min.</div>';
}

return $item_qty;
}

// Display custom fields values on orders and email notifications
add_filter( 'woocommerce_order_item_name', 'custom_time_field_order_item_name', 10, 2 );
function custom_time_field_order_item_name( $item_name, $item ) {
$product = $item->get_product();

if( $value4 = $product->get_meta('_custom_time') ) {
    $item_name .= '<br /><span class="my-custom-style"><strong>' . __("Time for cooking", "woocommerce") . ':</strong> ' . $value4 . ' min.</span>';
}

return $item_name;
}

このコードに基づいて次の機能を取得するにはどうすればよいですか?

たとえば、顧客がカートにいくつかの料理を追加して注文をチェックアウトしたとします。彼は、これまたはその料理を調理するのにどれくらいの時間がかかるかを見ています。

ただし、お客様が宅配便 (定額) による配送を選択した場合は、同じブロックに配送時間が表示されます。

定額 = $10

配達時間 = (注文から選択された最長の調理時間) 分。+ 45分

私が理解しているように、注文時にカスタムフィールド「_custom_time」のデータを取得する必要があります。次に、何らかの方法でこのフィールドの最大値を取得し、45 分を追加する必要があります。

私はあなたの助けを求めます!この質問に対する答えが多くの開発者にとって役立つことを願っています。

4

1 に答える 1