Crear un panel de administración para un plugin | Adrenalina

Crear un panel de administración para un plugin

Publicado Por | 27 marzo , 2014 | Blog Adrenalina, Desarrollo Web | No Comments
admin

Cualquier plugin WordPress requiere de una interacción con el usuario que lo configura, esta interacción debe realizarse en el escritorio de administración del site. Construir un panel de administración del plugin en el escritorio de nuestro WordPress no es una tarea complicada, y dado que un usuario no deberia necesitar conocimientos de programación para configurar su site, todos los plugins deberían tener uno. En este post hablaremos de como crearlo.

Como guardar las variables

Uno de los primeros problemas que encontraremos construyendo nuestro panel de administración será donde guardar las variables. Por suerte, WordPress nos ofrece un sistema muy sencillo para hacerlo.

Lo primero que podemos hacer es asignar un nombre único para nuestras opciones de administración.

class MiPlugin {
var $adminOptions = "MiPluginAdminOptions";
function MiPlugin() { //constructor
}
}

Definir los valores por defecto

Vamos a necesitar dónde inicializar las opciones de administración, principalmente para cuando un usuario active por primera vez el plugin, debemos tener cuidado con los valores que ya hubiera antes de la activación para poder respetarlos si nuestro plugin ya habia sido activado y configurado.

//Returns an array of admin options
function getAdminOptions() {
$adminOptions = array('show_header' => 'true','add_content' => 'true',
'comment_author' => 'true','content' => '');
$options = get_option($this->adminOptionsName);
if (!empty($options)) {
foreach ($options as $key => $option) $adminOptions[$key] = $option;
}
update_option($this->adminOptionsName,$adminOptions);
return $adminOptions;
}

Con esta función conseguimos:

– Assignar valores por defecto a nuestras opciones
– Cargamos opciones de la bd que ya existieran
– Las opciones se almacenan en la bd
– Las opciones se devuelven para usarlas

Inicializar el plugin

La función getAdminOptions puede ser usada también en la instalación del plugin para generar los valores default, mediante la función init() que se llama en la activación del plugin.

function init() {
$this->getAdminOptions();
}
add_action('activate_miplugin/miplugin.php',  array(&$dl_miplugin, 'init'));

En el action hacemos:

– que la función se ejecute al inicializar el plugin
– le damos el path al parchivo php principal del plugin
– pasamos por referencia la variable dl_miplugin

de esta manera llamaremos el init() siempre que el plugin sea activado.

 

Como funciona el panel de administración

Para confeccionar tu panel de adminstración hay varios factores a tener en cuenta:

– comprobar si se ha hecho un submit antes
– mostrar notificaciones
– mostrar el panel de administración

Para mostrar el panel de administración, crearemos una función, por ejemplo printAdminPage.

Primero comprobamos si se ha hecho un submit antes.

function printAdminPage() {
$options = $this->getAdminOptions();
if(isset($_POST['update_miPluginSettings'])) {
if (isset($_POST['miPluginHeader'])) {
$options['show_header']    =$_POST['miPluginHeader'];
}
if (isset($_POST['miPluginAddContent'])){
$options['add_content'] =$_POST['miPluginAddContent'];
}
        if (isset($_POST['miPluginAuthor'])) {
              $options['comment_author']    =$_POST['miPluginAuthor'];
         }
         if (isset($_POST['miPluginContent'])) {
              $options['content'] = apply_filters('content_save_pre', $_POST['miPluginContent']);
update_option($this->adminOptionsName,$options);
}
?>
<div><p><strong><?php _e("Settings Updated.","miPlugin");?></strong></p></div>
<?php
}
}

La primera variable comprobada es update_miPluginSettings, que asignamos al button submit, si esta variable no tiene valor asumimos que no se ha hecho submit.

Fijaos en el uso de apply_filters antes de guardar en la bd, para que tenga un formato correcto.

El siguiente codigo generara el formulario visible para el usuario, lo he resumido a un solo campo para mostrarlo como ejemplo.

<div>
<form method="post" action="<?php echo $_SERVER["REQUEST_URI"]; ?>">
<h3><?php _e(‘Allow Comment Code in the Header?’,’miplugin’); ?></h3>
<p>
<label for="miPluginHeader_yes">
<input type="radio"id="miPluginHeader_yes" name="miPluginHeader" value="true" 
<?php 
if($options['show_header'] == "true") { 
_e('checked="checked"',"miPlugin"); 
}
?> /> Yes</label> 
<label for="miPluginHeader_no">
<input type="radio"id="miPluginHeader_no" name="miPluginHeader" value="false" 
<?php 
if($options['show_header'] == "false") { 
_e('checked="checked"',"miPlugin"); 
}
?> /> No</label> 
</p> 
<input type="submit" name="update_miPluginSettings" value="
<?php 
_e('Update Settings', 'miPlugin') 
?>" />
</form>
</div> 
<?php }//End function printAdminPage()

Instalando el panel de administración en el escritorio de WordPress

Para que el panel se pueda visualizar deberemos añadirlo como página de opciones al escritorio de WordPress.

//Initialize the admin panel
if (!function_exists("miPlugin_ap")) { 
function miPlugin_ap() { 
global $dl_miPlugin; 
if (function_exists('add_options_page')) { 
add_options_page('Mi plugin', 'Mi plugin', 9, basename(__FILE__), 
array(&$dl_miPlugin,'printAdminPage')); 
} 
} 
}

Una acción debe ser creada para llamar la función de instalación.

add_action('admin_menu', 'miPlugin_ap');

Con estas funciones podremos definir el panel de administración de nuestro plugin y usar las opciones en el funcionamiento de nuestro plugin.

Autor: Lluis Torns

Estudiamos y analizamos su negocio en profundidad, definimos objetivos y planteamos la estrategia de marketing más adecuada centrándonos en conseguir cada uno de los objetivos propuestos. Solicita Presupuesto Ahora

Uso de cookies

En este sitio web utilizamos cookies propias y de terceros para mejorar nuestros servicios, para que usted tenga la mejor experiencia de usuario y analizar su visita. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.