How to create a “GST Calculator” plugin in WordPress

<?php
/*
 * Plugin Name: GST Calculator
 * Plugin URI:  https://example.com/gst-calculator
 * Description: A simple plugin that allows users to calculate GST amounts and total prices.
 * Version:     1.0
 * Author:      Your Name
 * Author URI:  https://example.com
 * License:     GPL2
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: gst-calculator
 */

// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) exit;

/**
 * Register the GST Calculator widget.
 */
function gst_calculator_register_widget() {
	register_widget( 'GST_Calculator_Widget' );
}
add_action( 'widgets_init', 'gst_calculator_register_widget' );

/**
 * GST Calculator widget class.
 */
class GST_Calculator_Widget extends WP_Widget {

	/**
	 * Widget constructor.
	 */
	public function __construct() {
		parent::__construct(
			'gst_calculator_widget',
			__( 'GST Calculator', 'gst-calculator' ),
			array(
				'classname'   => 'gst-calculator',
				'description' => __( 'A widget that allows users to calculate GST amounts and total prices.', 'gst-calculator' )
			)
		);
	}

	/**
	 * Widget form.
	 *
	 * @param array $instance
	 * @return void
	 */
	public function form( $instance ) {
		$defaults = array(
			'title' => __( 'GST Calculator', 'gst-calculator' )
		);
		$instance = wp_parse_args( (array) $instance, $defaults );
		$title = $instance['title'];
		?>
		<p>
			<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'gst-calculator' ); ?></label>
			<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
		</p>
		<?php
	}

	/**
	 * Update widget.
	 *
	 * @param array $new_instance
	 * @param array $old_instance
	 * @return array
	 */
	public function update( $new_instance, $old_instance ) {
		$instance = array();
		$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
		return $instance;
	/**
	 * Widget content.
	 *
	 * @param array $args
	 * @param array $instance
	 * @return void
	 */
	public function widget( $args, $instance ) {
		echo $args['before_widget'];
		if ( ! empty( $instance['title'] ) ) {
			echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
		}
		?>
		<form method="post" action="<?php the_permalink(); ?>">
			<p>
				<label for="gst-calculator-price"><?php _e( 'Price:', 'gst-calculator' ); ?></label>
				<input id="gst-calculator-price" name="gst-calculator-price" type="text">
			</p>
			<p>
				<label for="gst-calculator-rate"><?php _e( 'GST Rate (%):', 'gst-calculator' ); ?></label>
				<input id="gst-calculator-rate" name="gst-calculator-rate" type="text">
			</p>
			<p>
				<input type="submit" value="<?php _e( 'Calculate', 'gst-calculator' ); ?>">
			</p>
		</form>
		<?php
		if ( isset( $_POST['gst-calculator-price'], $_POST['gst-calculator-rate'] ) ) {
			$price = floatval( $_POST['gst-calculator-price'] );
			$rate = floatval( $_POST['gst-calculator-rate'] );
			$gst = $price * $rate / 100;
			$total = $price + $gst;
			?>
			<p>
				<?php printf( __( 'GST Amount: %s', 'gst-calculator' ), $gst ); ?><br>
				<?php printf( __( 'Total Price: %s', 'gst-calculator' ), $total ); ?>
			</p>
			<?php
		}
		echo $args['after_widget'];
	}

}

This code creates a widget that displays a form with fields for the price and GST rate, and a button to calculate the GST amount and total price. When the form is submitted, the widget displays the calculated GST amount and total price.