/** * Plugin Name: Custom WooCommerce Currency Switcher * Description: A floating currency switcher for WooCommerce with a pop-up selector. * Version: 1.2 * Author: Your Name * License: GPL2 */ // Enqueue CSS and JavaScript function custom_currency_switcher_assets() { wp_enqueue_style('currency-switcher-css', plugin_dir_url(__FILE__) . 'css/currency-switcher.css'); wp_enqueue_script('jquery'); wp_enqueue_script('currency-switcher-js', plugin_dir_url(__FILE__) . 'js/currency-switcher.js', array('jquery'), null, true); wp_localize_script('currency-switcher-js', 'currencySwitcherAjax', array( 'ajax_url' => admin_url('admin-ajax.php'), )); } add_action('wp_enqueue_scripts', 'custom_currency_switcher_assets'); // Ensure WooCommerce session starts properly function start_woocommerce_session() { if (!session_id()) { session_start(); } if (WC()->session) { WC()->session->set('currency', WC()->session->get('currency', 'USD')); } } add_action('init', 'start_woocommerce_session'); // Currency symbols mapping function get_currency_symbols() { return array( 'USD' => '$', 'NGN' => '₦', 'GHS' => '₵', 'ZAR' => 'R' ); } // Add currency switcher HTML (Removed from checkout page) // Add currency switcher only on specific pages function custom_currency_switcher_html() { if (is_checkout() || is_shop()) { return; // Don't show on checkout or shop page } // Check if we're on a single product page and if the product belongs to the "recipe-book" category if (is_product()) { global $post; $product = wc_get_product($post->ID); if (!$product || !has_term('recipe-book', 'product_cat', $product->get_id())) { return; // Hide switcher if not in the "recipe-book" category } } // Ensure it shows on the cart page if (is_cart() || is_product()) { $selected_currency = WC()->session->get('currency', 'USD'); $currencies = array('USD' => 'USD', 'NGN' => 'NGN', 'GHS' => 'GHS', 'ZAR' => 'ZAR'); echo '
'; echo '
Currency: ' . esc_html($selected_currency) . '
'; echo '
'; // Currency Popup echo '
'; echo ''; echo ''; echo '
'; } } add_action('wp_footer', 'custom_currency_switcher_html'); // Handle AJAX currency switching function set_currency() { if (!WC()->session) { WC()->initialize_session(); } if (isset($_POST['currency'])) { $currency = sanitize_text_field($_POST['currency']); WC()->session->set('currency', $currency); // Ensure prices update dynamically via AJAX WC()->cart->calculate_totals(); wp_send_json_success(array('currency' => $currency)); } else { wp_send_json_error(array('message' => 'Invalid request')); } wp_die(); } add_action('wp_ajax_set_currency', 'set_currency'); add_action('wp_ajax_nopriv_set_currency', 'set_currency'); // Display correct price and currency symbol function custom_currency_display_price($price, $product) { if (!WC()->session) { WC()->initialize_session(); } $selected_currency = WC()->session->get('currency', 'USD'); $currency_symbols = get_currency_symbols(); $custom_price = get_post_meta($product->get_id(), '_custom_price_' . strtolower($selected_currency), true); if (!empty($custom_price)) { $symbol = isset($currency_symbols[$selected_currency]) ? $currency_symbols[$selected_currency] : $selected_currency; return $symbol . number_format($custom_price, 2); } return $price; } add_filter('woocommerce_get_price_html', 'custom_currency_display_price', 10, 2); // Update Cart & Checkout Prices Based on Selected Currency function update_cart_totals($cart) { if (!WC()->session) { return; } $selected_currency = WC()->session->get('currency', 'USD'); $currency_symbols = get_currency_symbols(); foreach ($cart->get_cart() as $cart_item) { $product = wc_get_product($cart_item['product_id']); $custom_price = get_post_meta($product->get_id(), '_custom_price_' . strtolower($selected_currency), true); if (!empty($custom_price)) { $cart_item['data']->set_price($custom_price); } } } add_action('woocommerce_before_calculate_totals', 'update_cart_totals', 10, 1); // Ensure Checkout Uses Selected Currency and Symbol function set_currency_at_checkout($currency) { if (WC()->session) { return WC()->session->get('currency', 'USD'); } return $currency; } add_filter('woocommerce_currency', 'set_currency_at_checkout'); // Add AJAX refresh for cart page when switching currency function refresh_cart_on_currency_change() { wc_add_notice(__('Currency updated successfully.', 'woocommerce'), 'success'); wp_send_json_success(); } add_action('wp_ajax_refresh_cart', 'refresh_cart_on_currency_change'); add_action('wp_ajax_nopriv_refresh_cart', 'refresh_cart_on_currency_change'); // Add custom price fields for different currencies in the product edit page function add_custom_currency_fields() { global $post; echo '
'; $currencies = array( 'USD' => 'US Dollar', 'NGN' => 'Nigerian Naira', 'GHS' => 'Ghanaian Cedi', 'ZAR' => 'South African Rand' ); foreach ($currencies as $currency_code => $currency_label) { woocommerce_wp_text_input(array( 'id' => '_custom_price_' . strtolower($currency_code), 'label' => __('Price in ' . $currency_label, 'woocommerce'), 'desc_tip' => 'true', 'description' => __('Set a fixed price for ' . $currency_label . '.', 'woocommerce'), 'type' => 'number', 'custom_attributes' => array( 'step' => '0.01', 'min' => '0' ), )); } echo '
'; } add_action('woocommerce_product_options_pricing', 'add_custom_currency_fields'); // Save the custom prices function save_custom_currency_fields($post_id) { $currencies = array('USD', 'NGN', 'GHS', 'ZAR'); foreach ($currencies as $currency) { $field_id = '_custom_price_' . strtolower($currency); if (isset($_POST[$field_id])) { update_post_meta($post_id, $field_id, sanitize_text_field($_POST[$field_id])); } } } add_action('woocommerce_process_product_meta', 'save_custom_currency_fields'); // Handle AJAX request to fetch product price based on selected currency function get_product_price_by_currency() { if (!isset($_POST['product_id']) || !isset($_POST['currency'])) { wp_send_json_error(array('message' => 'Invalid request.')); } // Get the product ID and selected currency $product_id = intval($_POST['product_id']); $currency = sanitize_text_field($_POST['currency']); // Ensure WooCommerce session is initialized if (!WC()->session) { WC()->initialize_session(); } // Define your currency symbols mapping (you can modify it) $currency_symbols = array( 'USD' => '$', 'NGN' => '₦', 'GHS' => '₵', 'ZAR' => 'R', ); // Get the custom price for the selected currency $custom_price = get_post_meta($product_id, '_custom_price_' . strtolower($currency), true); // If custom price is not set, use the regular price if (empty($custom_price)) { $product = wc_get_product($product_id); $custom_price = $product->get_price(); } // Get the correct currency symbol $currency_symbol = isset($currency_symbols[$currency]) ? $currency_symbols[$currency] : '$'; // Return the formatted price wp_send_json_success(array( 'price' => $currency_symbol . number_format($custom_price, 2), )); } add_action('wp_ajax_get_product_price', 'get_product_price_by_currency'); add_action('wp_ajax_nopriv_get_product_price', 'get_product_price_by_currency'); Uziza Leaf Soup – Joyful-cook Skip to main content

Uziza Leaf Soup

Uziza Soup is a hearty, flavorful Nigerian delicacy made with a blend of proteins, uziza leaves, and rich seasonings. The distinctive taste of uziza leaves and the earthy aroma of ogiri create a dish that is both comforting and satisfying. Perfectly paired with any swallow of choice, this soup is a must-try for anyone looking to experience the depth of Nigerian cuisine.

Uziza Leaf Soup

When I first learned how to cook Uziza soup, it was during a family gathering where every dish was expected to be perfect. The rich, aromatic blend of spices and the unique flavor of uziza leaves made it an instant favorite. That day, standing over the bubbling pot, I realized just how much this dish embodies the essence of Nigerian cuisine—bold, flavorful, and deeply satisfying. Uziza soup is more than just a meal; it’s a celebration of culture and heritage.

Uziza Soup is a delicacy cherished across Nigeria, particularly in the southeastern regions. With its earthy, peppery notes and thick, luscious texture, this soup is a comforting dish perfect for special occasions or a hearty family dinner. It pairs beautifully with traditional sides like pounded yam, eba, fufu, or even plain rice.


Main Ingredients and Substitutions

  1. Goat Meat: The star protein in this dish. Goat meat offers a tender, flavorful base. You can substitute with beef or chicken if preferred. (Tip: If using tough goat meat, a pressure cooker can help speed up the cooking process.)
  2. Stockfish: Adds a deep, umami flavor. Use stockfish fillet or stockfish head, depending on availability (Alternative: Smoked fish or dry fish can be substituted for a similar smoky taste.)
  3. Cow Skin (Momo): A chewy, textural addition to the soup. If unavailable, you can skip this or use tripe as a replacement.
  4. Snails: A delicacy that elevates the dish. Clean them thoroughly before use. (Substitution: If snails are not accessible, feel free to omit them.)
  5. Uziza Leaves: The defining ingredient. Their peppery taste sets this soup apart. (Alternative: Spinach or kale can serve as substitutes, though the flavor will differ slightly.)
  6. Achi (Thickener): Gives the soup its thick, luxurious consistency. (Tip: Cocoyam or ofor can be used as an alternative if achi isn’t available.)
  7. Ogiri: Fermented oil bean seeds that add depth to the flavor. If you’re new to it, use sparingly at first to adjust to its strong aroma.
  8. Palm Oil: Essential for the vibrant color and authentic taste. (Alternative: A neutral vegetable oil can be used, but the flavor won’t be as traditional.)

How to Make Uziza Soup

Step 1: Prepare the Proteins

  1. Wash the goat meat, stockfish, cow skin (momo), and snails thoroughly.
  2. In a pot, combine the proteins and season with seasoning cubes, salt, and yellow pepper. Stir well to coat.
  3. Cover the pot and steam cook on low heat for 15 minutes without adding water. This helps the proteins absorb the seasonings fully.

Step 2: Prep Additional Ingredients

  1. Grind crayfish, ogiri, and yellow pepper into a fine or roughly smooth paste. Set aside.
  2. Wash and thinly slice the uziza leaves. This ensures they cook quickly and release their flavor into the soup.

Step 3: Build the Soup

  1. After 15 minutes of steaming the proteins, add water to the pot and continue cooking until the snails are done. Remove the snails to avoid overcooking.
  2. Add dry fish to the pot along with additional water if needed. Cook until the meat is tender.

Step 4: Add Flavors and Thicken

  1. Stir in the ground crayfish, pepper, and ogiri. Pour in the palm oil and add more water as needed for your desired consistency.
  2. Dissolve the achi in a small bowl of water to prevent lumps. Gradually add the achi mixture to the soup, stirring continuously.

Step 5: Simmer and Finish

  1. Allow the soup to come to a boil, then reduce to a simmer for 10 minutes. Stir occasionally to prevent burning.
  2. Add the uziza leaves and return the snails to the pot. Simmer for another 7-8 minutes until the leaves are tender and flavors meld together.

How to Serve Uziza Soup

Uziza soup is best enjoyed with:

  • Pounded Yam: A classic pairing for its smooth, starchy texture.
  • Eba or Fufu: Perfect for scooping up every drop of soup.
  • Boiled Rice: A lighter option that still satisfies.

Tips for the Perfect Uziza Soup

  • Steam First: Steam cooking the proteins allows them to absorb the spices before adding water.
  • Prevent Overcooking: Remove snails once they’re tender to maintain their texture.
  • Avoid Lumps: Always dissolve achi or any thickener in water before adding it to the soup.
  • Keep it Fresh: Add uziza leaves towards the end to preserve their flavor and nutritional value.

FAQ: Uziza Soup

Q: Can I use frozen vegetables for Uziza soup?
A: Yes! Frozen uziza leaves or spinach work well. Just thaw and drain excess water before adding.

Q: Is there a vegetarian version of Uziza soup?
A: Absolutely! Replace the meats with mushrooms or plant-based protein, and skip the snails.

Q: How long does Uziza soup last?
A: Stored in an airtight container, it lasts up to 3–4 days in the fridge or 3 months in the freezer.

Uziza Leaf Soup

Uziza Soup is a hearty, flavorful Nigerian delicacy made with a blend of proteins, uziza leaves, and rich seasonings. The distinctive taste of uziza leaves and the earthy aroma of ogiri create a dish that is both comforting and satisfying. Perfectly paired with any swallow of choice, this soup is a must-try for anyone looking to experience the depth of Nigerian cuisine.

  • Prep Time: 20 mins
  • Cook Time: 50 mins
  • Marinate: None
  • Serving Size: 6 People
Pin

Ingredients

For the Uziza Soup

Instructions

  1. Prepare Proteins: In a pot, add washed goat meat, stockfish fillet (or stockfish head), cow skin (momo), and snails. Season with seasoning cubes, salt, and yellow pepper. Stir well to combine.
  2. Steam Cook: Cover the pot and allow the meat to steam cook for 15 minutes without adding water.
  3. Prepare Additional Ingredients: Grind crayfish, ogiri (fermented oil bean seeds), and pepper until smooth or roughly smooth.
  4. Continue Cooking: After 15 minutes, check on the pot. Add water to the pot with the proteins and continue cooking until the snails are done.
  5. Prepare Uziza Leaves: Pick uziza leaves, wash them thoroughly, and slice them as thinly as possible.
  6. Cooking Process: Remove the snails when done to prevent overcooking. Add dry fish to the pot along with more water if needed. Cook until the meat is almost done.
  7. Add Flavors and Thickener: Stir in the ground crayfish, pepper, and ogiri. Pour in palm oil and add more water as necessary for the desired soup consistency.
  8. Use Achi as Thickener: Dissolve achi (thickener) in water separately to avoid lumps. Gradually add the dissolved achi mixture to the soup, stirring continuously.
  9. Boil and Simmer: Stir well and cover the pot. Allow the soup to come to a boil and simmer for 10 minutes on high heat.
  10. Final Touches and Serving: Stir in the sliced uziza leaves. Cook for an additional 7-8 minutes until the uziza leaves are tender and flavors have melded. Remove from heat and serve hot.
Instagram Icon

Did you make this recipe? Tag or mention @joyfulcook_. I would love to hear from you!

Recipe Video

What do you think?

Rate this recipe

Average Rating: 0 / 5

Leave a Reply

Your email address will not be published. Required fields are marked *