Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I added a new menu item for my plugin like this:

add_menu_page(
  'Control Panel',
  'My Plugin',
  'manage_options',
  'control-panel',
  array($this, 'control_panel_page'),
  plugins_url('/images/menu_icon.png', __FILE__)
);

public function control_panel_page() {
  // My HTML goes here
}

However, I feel uncomfortable with the fact that all my HTML resides in PHP function (control_panel_page).

Is there an option/hack to point to HTML file rather than PHP function?

share|improve this question
3  
in your public function just php include() the html file.... –  Barry Carlyon Aug 9 '12 at 12:23

2 Answers 2

up vote 2 down vote accepted

From the codex page:

$menu_slug (string) (required) The slug name to refer to this menu by (should be unique for this menu). Prior to Version 3.0 this was called the file (or handle) parameter. If the function parameter is omitted, the menu_slug should be the PHP file that handles the display of the menu page content. Default: None

share|improve this answer
    
This leaves us with an incorrect path - mysite.com/wp-admin/included_file.php –  BenRacicot Feb 21 at 19:28

You can use the file_get_contents() function to load a file into a string and write it's contents.

It doesn't exactly replaces the function with the file, but if your point in question is to have separate PHP file for the plugin logic, and another for the "HTML" page, than this should help.

The following code is enough to response the content of a "HTML" or any other text file rather than echoing from the PHP code. Plugin consists of two files:

  • file.php
  • hello.html

file.php

<?php
/*
Plugin Name: HTML Include Plugin
Version: 1.0
*/

if(is_admin())
{
    // register menu item
    add_action('admin_menu', 'admin_menu_item');    
}

function admin_menu_item()
{
    // add menu item
    add_menu_page('HTML Include Plugin', 'HTML Include Plugin', 'manage_options', 'html-include-plugin', 'admin_page');
}

function admin_page()
{
    // write the contents of the HTML file
    $file = file_get_contents('hello.html', FILE_USE_INCLUDE_PATH);
    if($file == false)
    {
        echo 'file not found';
    }
    else
    {
        echo $file;
    }
}

?>

hello.html

<h1>Title</h1>
<p>
    This is a sample HTML content, but this can be any kind of text file...
</p>
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.