How to make Http Request to a php file present in plugin directory of wordpress

Here is a quick and dirty plugin that shows you how to achieve this (adapt this example to your own architecture and needs):

<?php 
/*
Plugin Name: Custom rewrite rule test
*/

add_action(
    'plugins_loaded', 
    array(Registration::get_instance(), 'setup')
);

class Registration {

    protected static $instance = NULL;

    public function __construct() {}

    public static function get_instance() {
        NULL === self::$instance and self::$instance = new self;
        return self::$instance;
    }    

    public function setup() {

        add_action('init', array($this, 'rewrite_rules'));
        add_filter('query_vars', array($this, 'query_vars'), 10, 1);
        add_action('parse_request', array($this, 'parse_request'), 10, 1);

        register_activation_hook(__FILE__, array($this, 'flush_rules' ));

    }

    public function rewrite_rules(){
        add_rewrite_rule('registration/?$', 'index.php?registration=true', 'top');
    }

    public function flush_rules(){
        $this->rewrite_rules();
        flush_rewrite_rules();
    }

    public function query_vars($vars){
        $vars[] = 'registration';
        return $vars;
    }

    public function parse_request($wp){
        if ( array_key_exists( 'registration', $wp->query_vars ) ){
            include plugin_dir_path(__FILE__) . 'registration.php';
            exit();
        }
    }

}
  • register your custom rewrite rule “registration” using add_rewrite_rule()
  • add a custom query variable “registration”
  • parse the request, check for “registration” query variable, if exists, include a registration.php file

The advantage of adding an internal WordPress rewrite rule isntead of an external one is that the WordPress environment will be available to you in your registration.php file, so for example if you need to modify or retrieve data from the database you can.

Example inside your registration.php file:

<?php 

global $wp, $wpdb;

//get query variable: index.php?registration=true
var_dump($wp->query_vars['registration']); //true

//check if user is logged in
if ( is_user_logged_in() ) {
  //use $wpdb to get results from database etc
}

//do your registration business logic here etc