Skip to content

Instantly share code, notes, and snippets.

@thefuxia
Forked from rmccue/plugin-file.php
Created January 17, 2012 17:32
Show Gist options
  • Save thefuxia/1627700 to your computer and use it in GitHub Desktop.
Save thefuxia/1627700 to your computer and use it in GitHub Desktop.
Improved class concept
<?php # -*- coding: utf-8 -*-
declare( encoding = 'UTF-8' );
/**
* Plugin Name: WP_Plugin class test
* Version: 2012.01.17
* Required: 3.3
* Author: Thomas Scholz
* Author URI: http://toscho.de
* License: GPL
*/
! defined( 'ABSPATH' ) and exit;
class WP_Plugin
{
public function __construct()
{
$self = new ReflectionClass( $this );
$public_methods = $self->getMethods( ReflectionMethod::IS_PUBLIC );
if ( empty ( $public_methods ) )
{
return;
}
foreach ( $public_methods as $method )
{
$params = $method->getNumberOfParameters();
if ( 0 === strpos( $method->name, 'filter_' ) )
{
// priority MUST be two numbers long, eg.: 04 or 98
$priority = (int) substr( $method->name, 7, 2 );
$name = substr( $method->name, 10 );
add_filter(
$name,
array ( $this, $method->name ),
$priority,
$params
);
}
elseif ( 0 === strpos( $method->name, 'action_' ) )
{
$priority = (int) substr( $method->name, 7, 2 );
$name = substr( $method->name, 10 );
add_action(
$name,
array ( $this, $method->name ),
$priority,
$params
);
}
}
}
}
// Here's an example of a plugin that would benefit from the above
class Some_Plugin extends WP_Plugin
{
public static function init()
{
new self;
}
// Will filter the_title
public function filter_20_the_title( $title )
{
return $title . ' 123';
}
// Will run during wp_footer
public function action_99_wp_footer()
{
echo "I'm in the footer!";
}
}
// set a predictable point for execution.
add_action( 'plugins_loaded', array ( 'Some_Plugin', 'init' ), 99 );
@thefuxia
Copy link
Author

Done. :)

@bueltge
Copy link

bueltge commented Jan 17, 2012

simple and useful

@thefuxia
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment