shatner_label = get_option('shatner_label', "Name your own price"); wp_enqueue_script('shatner', plugins_url('/shatner.js',__FILE__), array('jquery') ); if ( is_admin() ){ // admin actions $this->init_form_fields(); add_action( 'admin_menu', array($this, 'add_shatner_menu' )); add_action( 'admin_init', array($this, 'admin_init' )); add_action('woocommerce_before_calculate_totals', array($this, 'add_custom_price' )); add_action('woocommerce_product_options_pricing', array($this, 'add_donation_radio')); add_action('save_post', array($this, 'set_named_price')); } else { if(get_option('use_shatner_templates', 1 ) == 1) { add_filter('woocommerce_locate_template', array($this, 'template_override'),10,3); add_filter('woocommerce_loop_add_to_cart_link', array($this, 'remove_link'),10); } add_action('woocommerce_product_options_pricing', array($this, 'add_donation_radio')); add_action('save_post', array($this, 'set_named_price')); add_action('woocommerce_add_to_cart', array($this, 'add_to_cart_hook')); add_action('woocommerce_before_calculate_totals', array($this, 'add_custom_price' )); add_action('init', array($this, 'init_css')); } } public function remove_link($link) { global $post; $post = get_post_meta($post->ID, '_own_price', true); if ($post === 'yes') return ''; return $link; } public function add_shatner_menu() { add_options_page( 'Shatner Plugin Settings', 'Shatner Settings', 'manage_options', 'shatner_plugin', array($this, 'shatner_plugin_settings_page') ); } public function shatner_plugin_settings_page() { include(sprintf("%s/templates/settings.php", dirname(__FILE__))); } /** * hook into WP's admin_init action hook */ public function admin_init() { // add your settings section add_settings_section( 'wp_plugin_template-section_shatner', 'Shatner Plugin Template Settings', array($this, 'settings_section_shatner_plugin_template'), 'wp_plugin_template_shatner' ); foreach($this->form_fields as $setting) { // register your plugin's settings register_setting('wp_plugin_template-group-shatner', $setting['title']); // add your setting's fields add_settings_field( $setting['title'], $setting['description'], array(&$this, 'settings_field_input_'. $setting['type']), 'wp_plugin_template_shatner', 'wp_plugin_template-section_shatner', array( 'field' => $setting['title'] ) ); } } // END public static function activate public function init_form_fields() { $this->form_fields = array( array( 'type' => 'text', 'title' => __('shatner_label', 'woothemes'), 'description' => __('Shatner Label', 'woothemes'), 'default' => __('Name your own price', 'woothemes') ), array( 'type' => 'radio_button', 'title' => __('use_shatner_templates', 'woothemes'), 'description' => __('Shatner Templates override pricing, disable if you want to customize using your theme', 'woothemes'), 'default' => __('1', 'woothemes') ) ); } public function settings_section_shatner_plugin_template() { // Think of this as help text for the section. echo 'These settings set values for Shatner'; } /** * This function provides text inputs for settings fields */ public function settings_field_input_text($args) { // Get the field name from the $args array $field = $args['field']; // Get the value of this setting $value = get_option($field); // echo a proper input type="text" echo sprintf('', $field, $field, $value); } // END public function settings_field_input_text($args) /** * This function provides text inputs for settings fields */ public function settings_field_input_radio_button($args) { // Get the field name from the $args array $field = $args['field']; // Get the value of this setting $value = get_option($field); $html = ' '; $html .= '
'; $html .= ' '; $html .= ' '; echo $html; } // END public function settings_field_input_radio($args) public function template_override($template, $template_name, $template_path ) { // Modification: Get the template from this plugin, if it exists $plugin_path = untrailingslashit( plugin_dir_path( __FILE__ ) ). '/templates/'; if ( file_exists( $plugin_path . $template_name ) ) { $template = $plugin_path . $template_name; return $template; } return $template; } public function init_css() { wp_register_style('donation_css', plugins_url('custom_styles.css',__FILE__ ), false, '1.0.1', 'all'); wp_enqueue_style( 'donation_css' ); } public function add_to_cart_hook($key) { global $woocommerce; foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { if(!get_post_meta($values['product_id'], '_own_price', true ) || get_post_meta($values['product_id'], '_own_price', true ) === 'no') { $values['data']->set_price($_POST['price']); continue; } $thousands_sep = wp_specialchars_decode( stripslashes( get_option( 'woocommerce_price_thousand_sep' ) ), ENT_QUOTES ); $decimal_sep = stripslashes( get_option( 'woocommerce_price_decimal_sep' ) ); $_POST['price'] = str_replace($thousands_sep, '', $_POST['price']); $_POST['price'] = str_replace($decimal_sep, '.', $_POST['price']); $_POST['price'] = woocommerce_format_total($_POST['price']); error_log(var_export($_POST,1)); if($cart_item_key == $key) { $values['data']->set_price($_POST['price']); $woocommerce->session->__set($key .'_named_price', $_POST['price']); } } return $key; } public function set_named_price($post) { if($_POST['_own_price']){ if(!get_post_meta($_POST['post_ID'], '_own_price', true )){ add_post_meta($_POST['post_ID'], '_own_price', $_POST['_own_price']); } else { update_post_meta($_POST['post_ID'], '_own_price', $_POST['_own_price']); } } if($_POST['_own_price_enforce_minimum']){ if(!get_post_meta($_POST['post_ID'], '_own_price_enforce_minimum', true )){ add_post_meta($_POST['post_ID'], '_own_price_enforce_minimum', $_POST['_own_price_enforce_minimum']); } else { update_post_meta($_POST['post_ID'], '_own_price_enforce_minimum', $_POST['_own_price_enforce_minimum']); } } } public function add_donation_radio($content) { global $post; woocommerce_wp_radio(array( 'id' => '_own_price', 'class' => 'wc_own_price short', 'label' => __( 'Name your own price', 'woocommerce' ), 'options' => array( 'yes' => 'yes', 'no' => 'no', ) ) ); woocommerce_wp_radio(array( 'id' => '_own_price_enforce_minimum', 'class' => 'wc_own_price_e short', 'label' => __( 'Enforce minimum price (Regular Price)', 'woocommerce' ), 'options' => array( 'yes' => 'yes', 'no' => 'no', ) ) ); } public function add_custom_price( $cart_object ) { global $woocommerce; foreach ( $cart_object->cart_contents as $key => $value ) { if(!get_post_meta($value['product_id'], '_own_price', true ) || get_post_meta($value['product_id'], '_own_price', true ) === 'no') { continue; } $named_price = $woocommerce->session->__get($key .'_named_price'); if($named_price) { $value['data']->price = $named_price; } } } } new SV_WC_Donation(); Hotels | The Holiday Company

The big fat Indian wedding in Muscat

For the last few months the team at THC has been very busy planning the logistics for a destination wedding in Muscat, Oman. A few months ago we also wrote about Muscat being awarded the second best city to visit in the world in 2012 by Lonely Planet.

We worked day-in and day-out to make the wedding experience, the travel and stay for 500 plus wedding guests as comfortable as possible. From coordinating visas, rooming and flight requirements; crafting all communication going out to the guests including managing the wedding Instagram page; to the working with the gracious and kind team at the Ritz Carlton Al Bustan Palace property; to managing the hospitality desk for the wedding. The overall experience was just magnificent and we enjoyed every minute of it!

Read More


Hotel Review: Courtyard House, Kanha National Park

Kanha National Park is known for its Tiger spotting; hundreds of people flock to this park every year from across India and overseas in the hope to see a Tiger. My suggestion, visit this park for reasons beyond the king of the jungle. This jungle can also make for a memorable holiday if you are looking for some peace and quality time with family and friends.

While planning our accommodation in Kanha, we decided to stay away from the popular hotels mentioned online and chose to stay at a boutique hotel called Courtyard House. A quaint house with its exterior walls painted a warm yellow,  it is perched on a slight height and can be spotted from a mile away. Literally, off the beaten track the house is situated in the buffer zone of the Kanha Tiger Reserve and the view of the jungle from the house extends as far as the eyes can see.

Read More


Hotel Review: Forsyth Lodge, Satpura National Park

A last minute booking, we arrived at Forsyth Lodge for a night but ended up extending  our stay by another. As one enters the premise, it is clear that the lodge is built and put together by a team of people who are passionate about the wilderness and the environment. An eco-friendly lodge, Forsyth is set within 44 acres of rehabilitated jungle on the edge of Satpura National Park; this was the first property to also be constructed near the park.

Read More


Hotel review: Deo Bagh Neemrana, Gwalior

A seven hour drive from New Delhi (via the Yamuna Expressway), Gwalior city is typically not known a holiday destination, unless of course you are travelling to Orchaa, Khajuraho, Shivpuri or even Bhandhavgarh Tiger Reserve.

Since we were on a two week road trip through Madhya Pradesh, Gwalior was a good option for us to take our first overnight stop between Delhi and Orchaa.  We had pre-booked a room in Deo Bagh Neemrana,  a heritage property located amidst two 17th and 18th century Maratha temples a hathi khana for elephants, stables and two cenotaphs.

Read More