I'm looking for a way to pass a class method to a call-back function parameter.
I usually use create_function()
as follows but I've heard it is slow and makes it difficult to debug.
add_action('init', create_function('', '$o = new AdminPageClass;'));
class AdminPageClass {
function __construct() {
add_action('admin_menu', array(&$this, 'admin_menu'));
}
function admin_menu() {
add_options_page(
'Sample Admin Page Class',
'Sample Admin Page Class',
'manage_options',
'sample_admin-page_class',
array(&$this, 'admin_page'));
}
function admin_page() {
?>
<div class="wrap">
<h1>Hi there</h1>
<p>Hello World!</p>
</div>
<?php
}
}
Of course, it can be done with an extra function like this; however, I'd like to do it without it if possible.
add_action('init', 'load_admin_page_class');
function load_admin_page_class() {
$o = new AdminPageClass;
}
Also, instantiating the class object prior to it makes it possible but it creates an extra line as well.
$o = new AdminPageClass;
add_action('admin_menu', array(&$o, 'admin_menu'));
class AdminPageClass {
function admin_menu() {
add_options_page(
'Sample Admin Page Class',
'Sample Admin Page Class',
'manage_options',
'sample_admin-page_class',
array(&$this, 'admin_page'));
}
function admin_page() {
?>
<div class="wrap">
<h1>Hi there</h1>
<p>Hello World!</p>
</div>
<?php
}
}
I always define classes in separate files so I prefer the first method which reduces lines in the main plugin file. But as mentioned, use of create_function()
should be avoided.
I appreciate your information.
I found that there was no need to create a static method at all.
add_action('admin_menu', array(new AdminPageClass, "admin_menu"));
class AdminPageClass {
function admin_menu() {
add_options_page(
'Sample Admin Page Class',
'Sample Admin Page Class',
'manage_options',
'sample_admin_page_class',
array(&$this, 'admin_page'));
}
function admin_page() {
?>
<div class="wrap">
<h1>Hi there</h1>
<p>Hello World!</p>
</div>
<?php
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With