Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Example class showing how to use the filters provided by the Aelia Currency
- * Switcher to implement a callback for the conversion of prices for custom
- * products.
- *
- * @author Aelia <support@aelia.co>
- * @link https://aelia.co
- */
- class Currency_Switcher_Integration_Example {
- public function __construct() {
- $this->set_hooks();
- }
- /**
- * Sets the hooks required by the class.
- */
- protected function set_hooks() {
- add_filter('wc_aelia_currencyswitcher_product_convert_callback', array($this, 'wc_aelia_currencyswitcher_product_convert_callback'), 10, 2);
- }
- /**
- * Converts the prices of a subscription product to the specified currency.
- *
- * @param WC_Product_MyCustomProduct product A custom product.
- * @param string currency A currency code.
- * @return WC_Product_MyCustomProduct The product with converted prices.
- */
- public function convert_my_custom_product_prices($product, $currency) {
- /* Here you can perform any currency related operation you need. For example,
- * if your product prices were loaded in base currency, this is the perfect
- * place to replace them with the ones in the correct currency.
- *
- * If you designed your product class with built-in multi-currency support,
- * and it automatically loads its prices in the appropriate currency, you
- * won't have to do anything here. You will still need this callback, though,
- * so that the Currency Switcher will know that someone "took care" of the
- * custom product types, and no warnings will be raised.
- */
- return $product;
- }
- /**
- * Intercepts the product conversion callbacks used by the Currency Switcher, adding
- * new ones to handle custom products.
- *
- * @param callable $callback The original callback passed to the hook.
- * @param WC_Product The product to examine.
- * @return callable
- */
- public function wc_aelia_currencyswitcher_product_convert_callback($callback, $product) {
- // This array maps a list of classes to a callback key. If your plugin uses
- // namespaced classes, or if you are planning to introduce namespaced classes
- // in the future, you can specify both the simple and the namespaced class
- // name, as in the example below
- $method_keys = array(
- // If the product class is "WC_Product_MyCustomProduct", we will use our
- // convert_my_custom_product_prices method to load its currency-specific
- // prices, or to invoke the conversion
- 'WC_Product_MyCustomProduct' => 'convert_my_custom_product_prices',
- // Namespaced class
- '\My\Namespaced\Class\WC_Product_MyCustomProduct' => 'convert_my_custom_product_prices',
- );
- // Determine the conversion method to use. We add a safeguard check, in case
- // we specify the wrong callback, so that the site won't crash if the method
- // doesn't exist
- if(!empty($method_keys[get_class($product)])) {
- // Get the callback method from the map, depending on the class
- $callback_method = $method_keys[get_class($product)];
- // If we have the method we specified in the map, replace the original
- // callback with our own
- if(method_exists($this, $callback_method)) {
- $callback = array($this, $callback_method);
- }
- }
- return $callback;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement