Usando uma class de plugin dentro de um modelo

Estou escrevendo um plugin para enviar um convite para um amigo que abre um formulário quando um clique é clicado. Eu encapsulei todas as funções na class, seguindo o código fornecido no plugin Report Broken Video por @toscho. O código relevante está abaixo:

/* Plugin Name: Send Invitation Plugin URI: http://w3boutique.net Description: Emails a the link of the current page to a friend Author: Nandakumar Chandrasekhar Version: 0.1 Author URI: http://w3boutique.net/about-nanda.html License: GPL2 */ // include() or require() any necessary files here // Settings and/or Configuration Details go here define('SEND_INVITATION_MIN_WORDPRESS_VERSION', '3.1.1'); define('SEND_INVITATION_PLUGIN_URL', plugins_url('', __FILE__)); add_action( 'init', array( 'SendInvitation', 'nc_sendinvitation_init' ) ); class SendInvitation { protected $nonce_name = 'nc_sendinvitation'; protected $post_url = ''; public static function nc_sendinvitation_init() { new self; } public function __construct() { add_action( 'init', array(&$this, 'nc_sendinvitation_head' )); add_action( 'init', array(&$this, 'nc_sendinvitation_check_wordpress_version' )); add_action( 'init', array(&$this, 'nc_sendinvitation_form_action' )); //$this->post_url = $this->nc_sendinvitation_get_post_url(); } public function nc_sendinvitation_head() { wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'send_invitation_js', plugins_url( 'js/send-invitation.js', __FILE__ ), array( 'jquery' ) ); wp_enqueue_style( 'send_invitation_css', plugins_url( 'css/send-invitation.css', __FILE__ ) ); } public function nc_sendinvitation_check_wordpress_version() { global $wp_version; $exit_msg = 'Send Invitation requires version ' . SEND_INVITATION_MIN_WORDPRESS_VERSION . 'or newer Please update!'; if ( version_compare( $wp_version, SEND_INVITATION_MIN_WORDPRESS_VERSION, 'nc_sendinvitation_get_form(); } else if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) { $action = $this->nc_sendinvitation_handle_submit(); } return $action; } public function nc_sendinvitation_get_form() { // Start the output buffer, prevents content being output directly into // script, instead it is stored in a buffer which can then be flushed // to allow the include file to be stored in a variable // See http://www.codingforums.com/showthread.php?t=124537 ob_start(); include('send-invitation-form.php'); $send_invitation_link = ob_get_clean(); return $send_invitation_link; } public function nc_sendinvitation_handle_submit() { if ( isset( $_POST['form_type'] ) && ( $_POST['form_type'] == 'nc_sendinvitation' ) ) { $to = 'navanitachora@gamil.com'; $subject = 'Invitation to SwanLotus'; $message = 'Navanitachora invites you to take a look at this link'; wp_mail($to, $subject, $message); $result = 'Email was sent successfully'; } else { $result = $this->nc_sendinvitation_get_form(); } return $result; } public function nc_sendinvitation_get_post_url() { global $post; $blog_id = get_option('page_for_posts'); $post_id = ''; if (is_home($blog_id)) { $post_id = $blog_id; } else { $post_id = $post->ID; } return get_permalink($post_id); } } /* End of File */ ?> 

Não estou com a perda de como usar essa class no meu modelo para que eu possa exibir o formulário. Eu sei que preciso instanciar a class, mas não sei onde colocar o código e como acessar o object para que eu possa usá-lo no meu modelo. Tenho conhecimento do OOP, mas não o usei nesse contexto antes e preciso de um pouco de instrução passo a passo.

Muito Obrigado.

Solutions Collecting From Web of "Usando uma class de plugin dentro de um modelo"

A melhor maneira de usar sua class sem saber o object é uma ação . Você registra a ação antes que os arquivos do tema para apresentação sejam carregados, o WordPress irá lidar com o resto.

Código de amostra:

 < ?php # -*- coding: utf-8 -*- /** * Plugin Name: Plugin Action Demo */ add_action( 'init', array ( 'Plugin_Action_Demo', 'init' ) ); class Plugin_Action_Demo { /** * Creates a new instance. * * @wp-hook init * @see __construct() * @return void */ public static function init() { new self; } /** * Register the action. May do more magic things. */ public function __construct() { add_action( 'plugin_action_demo', array ( $this, 'print_foo' ), 10, 1 ); } /** * Prints 'foo' multiple $times. * * Usage: * do_action( 'plugin_action_demo', 50 ); * * @wp-hook plugin_action_demo * @param int $times * @return void */ public function print_foo( $times = 1 ) { print str_repeat( ' foo ', (int) $times ); } } 

Agora você pode chamar do_action( 'plugin_action_demo', 50 ); em algum lugar do seu tema ou em outro plugin, e você não precisa mais se preocupar com o funcionamento interno da class.

Se você desativar o plugin ainda está seguro: WordPress simplesmente ignora ações desconhecidas e do_action() não prejudicará. Além disso, outros plugins podem remover ou replace a ação, então você construiu uma mini API agradável com um add_action() .

Você também pode criar um singleton:

 < ?php # -*- coding: utf-8 -*- /** * Plugin Name: Plugin Singleton Demo */ class Plugin_Singleton_Demo { protected static $instance = NULL; /** * Creates a new instance if there isn't one. * * @wp-hook init * @return object */ public static function get_instance() { NULL === self::$instance and self::$instance = new self; return self::$instance; } /** * Not accessible from the outside. */ protected function __construct() {} /** * Prints 'foo' multiple $times. * * @param int $times * @return void */ public function print_foo( $times = 1 ) { echo str_repeat( ' foo ', (int) $times ); } } 

Agora print_foo() é acessível por:

 Plugin_Singleton_Demo::get_instance()->print_foo(); 

Eu não recomendo o padrão Singleton. Tem algumas desvantagens graves .