错误404 WP Ajax请求

I was working on creating a WP plugin that will load other plugins only on specific URL. These plugins are deactivate in WP admin plugins, and are only loaded when a specific page is accessed.

Within my plugin's Class construct function:

$uri = $_SERVER['REQUEST_URI'];
$exp = explode('/', $uri);

$uri = $exp[2];
$options = get_option( $this->plugin_name );
$key = array_search( '/'.$uri.'/', array_column($options, 'url') );

$plugin_dir = $options[$key]['plugin']; // this prints plugin file directory ex. /MyPlugin/myplugin.php

include( WP_PLUGIN_DIR  . $plugin_dir);

Above code loads the plugin on specific URL/page. Meaning the variable $plugin_dir grabbed the correct directory. BUT, problem occur when there's an AJAX request from that plugin. Ex. when i try to delete an item using ajax request, it returns Error 404 Bad request.

Weird part is, almost same code above, but this time, i manually assign the plugin directory to a variable: ex.

$uri = $_SERVER['REQUEST_URI'];
$exp = explode('/', $uri);

$uri = $exp[2];
$options = get_option( $this->plugin_name );
$key = array_search( '/'.$uri.'/', array_column($options, 'url') );

$plugin_dir = '/MyPlugin/myplugin.php'; // manually place the plugin file dir
//same output as $plugin_dir = $options[$key]['plugin'];

include( WP_PLUGIN_DIR  . $plugin_dir);

But this time, plugin works really well. No Ajax bad request error.

What could be the possible explanation for this? Is there any solution about this issue, so that i can dynamically get the plugin file directory from wp options based on the Request URI.


Also, another issue. Instead of REQUEST URI, i wanted to get the POST/PAGE ID instead, but everything returns NULL/empty. Still inside the construct function, i tried different approach to get the page ID:

global $post;
var_dump($post->ID); //returns NULL

global $wp_query;
var_dump($wp_query->post->ID); //returns NULL

echo get_the_ID(); //returns empty/NULL

Is there a way how to properly get the POST/PAGE details, or even just the ID?

Thank you.