Skip to content

Developers Guide ​

This section contains technical documentation for developers who want to extend or integrate with Virtual Files plugin.


Technical Architecture ​

Virtual Files is built with modern WordPress development best practices:

  • MVC Architecture: Clean separation between controllers and views
  • PSR-4 Autoloading: Modern PHP autoloading via Composer
  • Trait-Based Design: Modular functionality using PHP traits
  • Security-First Approach: Nonce verification, input sanitization
  • Performance Optimized: Transient caching for Pro users

Plugin Constants ​

ConstantValueDescription
INTENTDEEP_VF_PLUGIN_ROOT/path/to/plugins/intentdeep-virtual-files-freemius/Plugin root directory path

Post Type & Meta Keys ​

Custom Post Type ​

Post Type Name: idep_virtual_file

Post Status:

  • publish = Active (file is publicly accessible)
  • draft = Inactive (file returns 404)

Available Meta Keys ​

Meta KeyTypeDescriptionExample
_vf_filenameStringFull filename with path and extensionrobots.txt, .well-known/security.txt
_vf_contentLong TextFile contentUser-agent: *\nDisallow: /
_vf_mime_typeStringMIME type for HTTP headerstext/plain, application/json
_vf_statusStringFile statusactive, inactive
_vf_modifiedTimestampLast modified time2026-01-01 12:00:00
_vf_access_countInteger (Pro)Total access count42
_vf_analytics_dailyArray (Pro)Daily view statistics{"2026-01-01": 10, "2026-01-02": 15}

Hooks & Filters ​

intentdeep_vf_allowed_extensions ​

Modify the list of allowed file extensions.

Parameters:

  • $extensions (array) - Array of allowed file extensions

Usage Example:

php
add_filter('intentdeep_vf_allowed_extensions', function($extensions) {
    // Add custom extension to allowed list
    $extensions[] = 'custom';

    return $extensions;
});

Default Extensions:

  • Free users: txt, md, json
  • Pro users: txt, md, json, jsonld, xml, rss, csv, yml, log

Programmatic File Creation ​

Create virtual files programmatically using WordPress functions:

php
// Create a virtual file programmatically
$file_id = wp_insert_post([
    'post_type' => 'idep_virtual_file',
    'post_title' => 'My Virtual File',
    'post_status' => 'publish'  // 'publish' = Active, 'draft' = Inactive
]);

// Add file metadata
if ($file_id) {
    // 1. Set the full filename (extension is required)
    update_post_meta($file_id, '_vf_filename', 'robots.txt');

    // 2. Set MIME type (optional, but recommended)
    update_post_meta($file_id, '_vf_mime_type', 'text/plain');

    // 3. Set the content
    update_post_meta($file_id, '_vf_content', "User-agent: *\nDisallow: /wp-admin/\n");

    // 4. Set status to active
    update_post_meta($file_id, '_vf_status', 'active');
}

Example with Nested Path ​

php
// Create a file in nested directory
$file_id = wp_insert_post([
    'post_type' => 'idep_virtual_file',
    'post_title' => 'Security TXT',
    'post_status' => 'publish'
]);

if ($file_id) {
    update_post_meta($file_id, '_vf_filename', '.well-known/security.txt');
    update_post_meta($file_id, '_vf_mime_type', 'text/plain');
    update_post_meta($file_id, '_vf_content', 'Contact: security@example.com');
    update_post_meta($file_id, '_vf_status', 'active');

    // Flush rewrite rules to make file accessible
    flush_rewrite_rules();
}

Querying Virtual Files ​

php
// Get all active virtual files
$files = get_posts([
    'post_type' => 'idep_virtual_file',
    'post_status' => 'publish',
    'numberposts' => -1,
    'orderby' => 'modified',
    'order' => 'DESC'
]);

// Get file metadata
foreach ($files as $file) {
    $filename = get_post_meta($file->ID, '_vf_filename', true);
    $content = get_post_meta($file->ID, '_vf_content', true);
    $mime_type = get_post_meta($file->ID, '_vf_mime_type', true);
}

Need More Developer Tools? ​

The Virtual Files plugin is actively being developed. More hooks, filters, and developer tools may be added in future versions based on community feedback and developer needs.

Suggest a Hook or Filter: If you need a specific hook or filter that isn't currently available, please:

  1. Open an issue on the GitHub repository
  2. Or contact the development team through the support page

We'll consider adding it in a future update if there's sufficient community demand.


Last Updated: January 11, 2026 Plugin Version: 1.0.0

Virtual Files - Better WordPress SEO Through Smart Virtual File Management