Crear Plugins para WordPress

Crear Plugins para WordPress

Como cualquier CMS que se precie, WordPress ofrece a sus usuarios la posibilidad de expandir sus funciones mediante plugins. Tiene un repositorio muy amplio donde encontrar lo que necesitamos, pero, ¿Qué pasa si no lo encontramos? Que tenemos que desarrollar nosotros la funcionalidad que buscamos. Si estas en esta situación, bienvenido a la primera clase de plugins: Crear Plugins para WordPress.

Empezaremos por lo básico. Todos sabemos lo que es un plugin, pero no está de más recordar un par de cosas.

¿Por qué en un plugin?

La ventaja principal está muy clara: no se toca el sistema. ¡Tocar el sistema es pecado mortal! No, no, no debemos hacerlo salvo en casos muy concretos y específicos, en los que sepamos lo que estamos tocando. Pensad que al actualizar WordPress a una nueva versión, los cambios que hayáis hecho directamente sobre el sistema los perderéis. No, es mucho mejor crear un nuevo plugin, que permanecerá funcionando independientemente de la versión (hacia arriba) de WordPress a la que se actualice, sin perder ni una línea de código, siempre y cuando las funciones que utilices en tu plugin estén soportadas por la versión de WordPress en la que el plugin actúa. Podemos activar y desactivar un plugin con tan solo un botón en el administrador, lo cual es magnifico. Y por supuesto, un plugin bien hecho DEBE funcionar en cualquier WordPress donde se instale, siempre y cuando los requisitos de versión mínima se cumplan.

Dos plugins podrían llegar a entrar en conflicto si los nombres de funciones o variables globales que definen son iguales. Por eso es importante diferenciarnos bien a la hora de definir funciones. Ahora hablaremos de ello.

Plugins obligatorios

Existe una forma de forzar a WordPress a usar un plugin, sin pasar por el administrador de plugins ni tener que activarlo. Si creamos una carpeta en wp-content llamada mu-plugins, WordPress la reconocerá como plugins «Must Use» (debes usar). Pero sin embargo, no se comportan como los plugins normales, y no se aconseja su uso.

Plugins vs Themes

La grandísima mayoría de tutoriales sobre «como hacer algo (lo que sea) en WordPress» suelen decir esto: «¡Es muy fácil! Sólo tienes que incluir estas funciones en el archivo functions.php del theme que tengas instalado». Estamos en el mismo caso de antes, casi peor. Los Themes también se actualizan, y con esas actualizaciones se pierden los cambios que hayas hecho en el archivo «functions.php», o mañana podrias querer usar otro theme y no tendrías las funcionalidades que has programado para el anterior.

Esto no es práctico. No cuesta nada crear un plugin y copiar las funciones ahí. Y funciona todo exactamente igual que si lo hubieramos copiado en el theme. No es práctico excepto si lo que queremos es dotar a un determinado theme de una determinada función, sin importarnos que se pierda al cambiar de theme, entonces vale.

Creando un plugin

La mayoría de los plugins que creemos irán a la carpeta wp-content/plugins de nuestro sistema WordPress. Dentro de esta carpeta debemos crear una nueva, y nombrarla con una clave que referencie a nuestro plugin. Como esta es la primera clase de «Crear Plugin para WordPress» y queremos poner un tutorial sencillo, usaremos: wp-content/plugins/mi_plugin. Dentro de nuestra nueva carpeta, crearemos un primer archivo llamado mi-plugin.php

Abrimos este archivo con un editor de código PHP, y escribimos la cabecera. La cabecera son una serie de líneas que aportan información sobre el plugin a WordPress a la hora de mostrarlo en la pantalla de administración, como el nombre, la descripción, la versión, el autor, etc.

Una cabecera simple y básica podría ser como esta:

<?php
/*
Plugin Name: Mi plugin
Plugin URI: https://www.codigonexo.com/
Description: Crear Plugins para WordPress, clase I
Author: Juan Viñas
Author URI: https://www.codigonexo.com/
Version: 1.0
License: GPLv2
*/
?>

Esta cabecera es obligatoria en todos los plugins que hagamos.

Si hemos seguido correctamente los pasos hasta aquí, ya debería aparecer nuestro plugin en la lista de plugins de nuestro WordPress. Eso sí, activarlo o desactivarlo no hace nada, evidentemente, puesto que no hemos programado ningún tipo de funcionalidad.

Dotando de funcionalidad al plugin

A partir de aquí, lo que queráis que vuestro plugin haga, es totalmente cosa vuestra. Depende de vuestra imaginación. Pero no basta con escribir funciones y llamarlas.

WordPress tiene una serie, o mejor dicho, una GRAN serie de «hooks«. Ya hemos hablado de ellos alguna vez, pero volveremos a explicar el concepto.

Un «Hook» o «Gancho», en WordPress, es un momento en la carga del sistema al que podemos acoplar nuestras funciones. Es decir, por ejemplo, si necesitamos añadir un menu nuevo al administrador de WordPress, programamos la función que corresponde, y después, la asociamos al hook «admin_menu», para que cuando se esté cargando el menú de administración, nuestra función se ejecute. Muy práctico, ¿Verdad?

Los hooks se llaman durante «acciones» o durante «filtros», con add_action o con add_filter. ¿Qué diferencia hay?

  • Acciones: Las acciones son aquellos ganchos que el sistema lanzará en puntos específicos durante la ejecución, o cuando eventos específicos ocurran. Tu plugin puede especificar que sus funciones sean lanzadas en estos puntos, usando la API de acciones.
  • Filtros: Los filtros son ganchos que WordPress lanza para modificar textos de varios tipos antes de añadirlos a la base de datos, o antes de mostrarlos en pantalla. Tu plugin puede especificar que sus funciones sean ejecutadas para modificar ciertos textos en esos puntos, usando la API de filtros.

En ocasiones, usar una acción o un filtro nos conducirá al mismo resultado, independientemente de lo que usemos. Por ejemplo, si quieres que tu plugin cambie un texto de un post, puedes añadir una acción al hook ‘publish_post’ (que se encargará de modificarlo cuando se guarde en la base de datos), o bien, usar un filtro en el hook ‘the_content’ (y el contenido será modificado al mostrarse en pantalla). Puedes leer más información sobre esto en el Codex.

Si no asociamos una función a un hook, esta no se ejecutará nunca, salvo que durante la ejecución normal del sistema (en un theme, o en otra parte de nuestro plugin) la llamemos directamente.

A la hora de crear funciones, debemos tener mucho cuidado. Si dos plugins implementan la misma función, la consecuencia es un error grave en el sistema que impide que este cargue. Asi pues, se recomienda encarecidamente:

  • Diferenciar nuestras funciones y variables globales correctamente, inventando algún tipo de prefijo o palabra que haga nuestro plugin único, o lo más único posible. No podemos saber, evidentemente, si otro programador en otra esquina del mundo va a implementar exactamente el mismo nombre de función, con el mismo distintivo, y se va a dar la casualidad en un tercer rincón del planeta de que un usuario instale los dos plugins en su WordPress, de acuerdo. Pero podemos intentarlo. Por ejemplo, en este caso, vamos a llamar a nuestras funciones con el prefijo «mi_plugin». Bien, es un mal ejemplo, ¿Cuántos plugins empezarán con ‘mi_plugin’? Muchísimos, fijo. Quizá podríamos darle una vuelta, que sea ‘-mip_’, ‘__miplugin_’, ‘codigonexo_mi_plugin’, o lo que se nos ocurra. Recordad que luego tenéis que usarlo, y que cuanto más largo, mas difícil de recordar y más tedioso de reescribir será.
  • Comprobad que la función no exista antes de definirla. Este paso es mucho más inteligente que el anterior (pero no lo sustituye, que conste). Si la función ya existe, directamente no se define la nuestra. Esto tampoco soluciona el problema que comentabamos antes, pero en este caso, en lugar de provocar un error en el sistema, simplemente no funcionará nuestro plugin. Podéis hacerlo así:
if(!function_exists('mi_plugin_function')){
    function mi_plugin_function(){
        // Contenido de la función
    }
}

Y luego, a la hora de hacer uso de dicha función en algún punto del plugin, comprobar si dicha función existe, pero a la inversa:

if(function_exists('mi_plugin_function')){
    mi_plugin_function();
}

Por otro lado, también debemos saber que WordPress cuenta con funciones para (casi) todo en el sistema. ¿Quieres añadir un menu? add_menu_page. ¿Quieres enviar un email? wp_mail. ¿Quieres obtener el título de un post? get_the_title. ¿Te has inventado un nuevo shortcode? add_shortcode. Así que cuando se nos ocurra algo para hacer en el sistema, recordad estos consejos antes de empezar a programar:

  • Probablemente, a alguien se le ha ocurrido antes que a ti. Y esto no es malo, al contrario: alguien se ha partido la cabeza para conseguirlo, y por lo general, la solución suele estar en Internet más o menos escondida.
  • Si Google es el mejor amigo de un desarrollador, el Codex de WordPress es el segundo mejor amigo de un desarrollador de WordPress (el primero sigue siendo Google). No solo por ser la documentación oficial de WordPress para desarrolladores, si no porque además sus foros son ricos en preguntas raras de narices, que en muchos casos o bien nos aclararán la duda, o bien nos pondrán en la pista. Imprescindible saber inglés, aunque eso es algo que se aplica a toda nuestra profesión, no debería ser un grave problema…
  • Otro gran sitio donde mirar es Stack Overflow, aunque, por lo general, cuando buscas en Google, es de los primeros sitios que sale con respuestas y suele ser más efectivo.
  • No tengas miedo a preguntar.
  • Si ninguno de estos consejos realmente ha dado solución a tu problema o te lo ha puesto un poco más fácil, recuerda que nada es imposible. Intenta simplificar el problema, dividirlo en partes, y busca soluciones a cada parte. No te atasques, no te centres en un asunto al que no le ves solución salvo que no tengas alternativa. Si puedes pasar a otra tarea más sencilla donde despejarte, cuando vuelvas quizá lo veas todo mas claro. Y sobre todo, nunca te desanimes.

Ahora vamos a desarrollar un pequeño ejemplo consistente en un submenú dentro del menú «Ajustes» y una página donde poder guardar opciones directamente en la base de datos de WordPress.

El menú

Como ya hemos dicho, WordPress tiene funciones para todo lo «típico» que los plugins hacen. Añadir un submenú a la sección Ajustes entra dentro de lo normal, así que WordPress lo contempla, y podemos hacerlo tal que así:

function miplugin_menu_opciones(){
    add_options_page('Título de la pagina','Título del menu','read','miplugin-ops','miplugin_pagina_de_opciones');
}

Aunque aquí utilizamos la función «add_options_page«, en realidad esta llama a la función genérica de creación de submenús, «add_submenu_page«, solo que no tienes que preocuparte por especificar de dónde cuelga este submenú. Los cinco parámetros son: el título de la página (el que aparece arriba del navegador y en la pestaña), el título que aparecerá en el submenú, el permiso mínimo que debe tener el usuario para ver este submenú (‘read’ es de los más bajos, estaría abierto a todos los usuarios con acceso a wp-admin), un slug único para este menú, y la llamada a la función que se ejecutará cuando pulsemos en este menú.

¡Ojo! Si en tu plugin quieres crear un tipo personalizado, no es necesario que crees un menú específico para él ya que se creará automáticamente el menú, el submenú de listado de entradas y el submenú de crear nueva entrada. Si quieres añadir mas cosas (opciones, otras páginas), sí debes crear submenús (salvo para taxonomías, estas también crean sus propios menús donde corresponde).

¿No funciona? Evidentemente, ¿Qué hemos dicho acerca de los hooks? Añadid esta línea justo debajo de la función.

add_action('admin_menu','miplugin_menu_opciones');

add_action añade, en el momento en que ocurre ‘admin_menu’, la ejecución de la función ‘miplugin_menu_opciones’, es decir, la que pone el submenú en su sitio.

La página de funciones

Al añadir el submenú hemos especificado un parámetro como ‘miplugin_pagina_de_opciones’. Esta es la función que se ejecutará al acceder a nuestro submenú. Así que vamos a definirla; en realidad, esta función lo que va a hacer es mostrar un formulario HTML…

function miplugin_pagina_de_opciones(){
    ?>
    <div class='wrap'><h2>Opciones de mi sitio</h2></div>

    <form method='post'>
        <input type='hidden' name='action' value='salvaropciones'>
        <table>
            <tr>
                <td>
                    <label for='telefono'>Telefono</label>
                </td>
                <td>
                    <input type='text' name='telefono' id='telefono' >
                </td>
            </tr>
            <tr>
                <td>
                    <label for='direccion'>Dirección</label>
                </td>
                <td>
                    <input type='text' name='direccion' id='direccion' >
                </td>
            </tr>
            <tr>
                <td>
                    <label for='email'>Email</label>
                </td>
                <td>
                    <input type='text' name='email' id='email' >
                </td>
            </tr>
            <tr>
                <td colspan='2'>
                    <input type='submit' value='Enviar'>
                </td>
            </tr>
        </table>
    </form>
    <?php
}

Formulario HTML que, dicho sea de paso, carece de funcionalidad. Si pulsamos en Enviar no pasa nada. Retoquemoslo un poco.

function miplugin_pagina_de_opciones(){

    echo("<div class='wrap'><h2>Opciones de mi sitio</h2></div>");

    if(isset($_POST['action']) && $_POST['action'] == "salvaropciones"){
        update_option('miplugin_telefono',$_POST['telefono']);
        update_option('miplugin_direccion',$_POST['direccion']);
        update_option('miplugin_email',$_POST['email']);
        echo("<div class='updated message' style='padding: 10px'>Opciones guardadas.</div>");
    }

    ?>

    <form method='post'>
        <input type='hidden' name='action' value='salvaropciones'>
        <table>
            <tr>
                <td>
                    <label for='telefono'>Telefono</label>
                </td>
                <td>
                    <input type='text' name='telefono' id='telefono' value='<?=get_option('miplugin_telefono')?>'>
                </td>
            </tr>
            <tr>
                <td>
                    <label for='direccion'>Dirección</label>
                </td>
                <td>
                    <input type='text' name='direccion' id='direccion' value='<?=get_option('miplugin_direccion')?>'>
                </td>
            </tr>
            <tr>
                <td>
                    <label for='email'>Email</label>
                </td>
                <td>
                    <input type='text' name='email' id='email' value='<?=get_option('miplugin_email')?>'>
                </td>
            </tr>
            <tr>
                <td colspan='2'>
                    <input type='submit' value='Enviar'>
                </td>
            </tr>
        </table>
    </form>

    <?php
}

Ahora sí. Esta es una forma sencilla de hacerlo sin calentarnos mucho la cabeza. Detectará por $_POST si entran nuevos datos. Si es asi, actualizamos las opciones con update_option. Además, los campos se rellenan con get_option si la opción existe y tiene un valor no nulo. Y en cualquier parte de nuestra web podemos recuperar estos valores con la misma función, get_option, pues hemos establecido opciones globales al sistema.

(Nota: los validadores y las comprobaciones de errores son cosa vuestra. La función update_option devuelve true o false dependiendo de si los datos se han salvado o no).

¿Qué os parece vuestro primer plugin? Así a lo tonto, ahora tenéis un plugin muy útil para guardar información como número de telefono, dirección, email, etc. que luego querráis recuperar, por ejemplo, en vuestro theme, y no tener que modificar el theme si os mudáis, si cambiáis de email o de teléfono… Sólo modificar la información del plugin.

Próximamente, en esta serie de clases sobre Crear Plugins Para WordPress, aprenderemos lo básico acerca de la traducción en un plugin, algunos truquillos más sobre hooks, ejemplos y casos prácticos útiles, y cómo subir nuestro plugin al repositorio oficial de WordPress.

«Hoy en día la mayoría del software existe no para resolver un
problema, sino para actuar de interfaz con otro software.»

– I. O. Angell

¿Te ha gustado el artículo?
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (4 votos, promedio: 4,75 sobre 5)
Loading...

Suscríbete. Déjanos tu email y recibe contenido genial cada mes


Artículo escrito por

¡Exprésate! Dejanos tu comentario

Tu dirección de correo electrónico no será publicada.

36 Comentarios

Domingo Utrera

Es lo que estaba buscando hermano muchas gracias

Juan Carlos Lopez Escalona

Hola buenos días amigo, muy bueno tu tutorial, muchas gracias por tu tiempo y dedicación al crearlo, me ha sido muy util, quería hacerte 2 preguntas a ver si me puedes ayudar: Estoy creando un plugin propio y entre todas la funciones que tiene mi plugin una es agregar al menu principal un nuevo item con un  sub menu a 3 paginas, por ejemplo si mi menu principal contiene los item | Inicio | Quienes Somos | Blog | Contactos | Al activar mi plugin se agrega un item nuevo con 3 opciones  y el nuevo menu queda: | Inicio | Quienes Somos | Blog | Contactos | Item_Nuevo | -> Opcion 1 -> Opcion 2 -> Opcion 3 Pue bien hasta aca todo lo puedo hacer perfecto, ahora bien ya que la funcion de cada una de las opciones 1 2 y 3 estan definidas, quisiera crear dichas paginas automaticamente al activar el plugin de manera que el usuario no tenga que hacerlo manualmente y crear una a una los 3 nuevos enlaces. Mi primera pregunta es existe algun hook o algun mecanimo que me cree dichas paginas directamente desde mi plugin, algo asi como MI_HOOK($LINK, $TITLE, $CONTENT) , o como pudiese hacerlo, supongo que si debe de existir por que e visto plugins que agregan paginas propias al instalarse pero no consigo la documentación necasaria para hacerlo. Pregunta 2 Una parte importante de mi plugin es agregar una tabla nueva a la base de datos de wordpres, por lo que le he agregado a mi plugin la funcionalidad de que al desactivarse el plugin dicha tabla se elimine de manera que pueda quedar lo mas limpio posible el wp del usuario, pero esto lo esta realizando automaticamente al desactivarse, lo que quiere decir que si por error el usuario desactiva el plugin perdera toda la informacion de la tabla, mi pregunta es como pudiese enviarle al usuario un alert o un mensaje donde se le pregunte al usuario si desea eliminar la tabla o no? De ante mano nuevamente muchisimas gracias por tu tiempo y dedicación, un saludo y que pases un buen día.

david escobedo

Hola, he realizado un pequeño plugin de prueba, pero sucede que me carga primero lo que hace el plugin y luego el resto del contenido que tiene la pagina a pesar de poner así: dave dave dave [add_inside_category] sale primero lo que ejecuta el plugin y luego : dave dave dave Por fa cualquier ayuda

javier

gracias por compartir esta gran entrada

Marcos Llumiquinga

buenos dias hermano, estoy viendo su informacion y me parece muy buena, voy a implementarla y le vuelvo a comentar pero lo que me parecio interesante es como puede mostrar los codigos php en su pagina. podria ayudarme con eso? tengo una pagina de prueba, solo para ejercicios de la universidad y me gustaria mostrar mis codigo como usted lo hace, podria ayudarme? me he guiado de esta pagina http://www.adictosaltrabajo.com/tutoriales/syntaxhighlighter/ pero no he podido lograrlo

Gemma

Hola, estoy haciendo un plugin de WordPress de un motor de reservas. El problema lo tengo es que primero lo he programado a parte y ahora lo quiero incluir en el plugin. Ya he creado un menú personalizado a la izquierda. El problema lo tengo que nada más empezar el plugin, cuando quiero seleccionar el hotel a elegir, esto es un formulario que lo envio a una pagina php concreta. Cuando se envia el formulario, llega a esa página pero entonces ya no sale el dashboard de WordPress. Yo quiero ir de página en página (ya que tengo varios formularios) pero que se quede el panel de control a la izquierda todo el rato. He intentado con include y require dentro de funciones, pero entonces me dan errores la base de datos. Gracias, Gemma

Fito

Muchas gracias, ¡¡justo lo que estaba buscando!!

Valeron

Gracias por el tutorial, ha sido de gran ayuda.

mikey

Gracias por la informacion, es muy util para empezar a ingresar un codigo automatica a traves de un plugin, me suscribo.

Tatiana

Excelente articulo, gracias.

cuidadoconeltecho

Hola, estoy haciendo un plugin y me gustaría saber si sabes algo de como se hace para que tenga actualizaciones sin subirlo a wordpress. Muchas gracias y muy buen blog.

Antonio

Hola, esta genial tu aporte para empezar con plug-ins. Yo quiero hacer uno que me implemente una seccion nueva. O sea que cuando entre en una seccion de la web quiero que salte mi plugin y haga lo que sea. ¿Como puedo hacer para que el plugin salte al acceder a una seccion? ¿ y como debo crear esa seccion? Mil gracias. Un saludo

Ricardo

Excelente, muy bien explicado, Gracias.

Alonso Castro

hola, saben de algun plugin de reproductor de audio para mp3 para wordpress que funcione en la versión 3.6.1 y ademas reúna las características del plugin audio player, esto quiere decir sencillo, practico y profesional a la vez, pero que funcione ademas en dispositivos moviles como ipad, tablet, smartphones, etc. gracias por su ayuda pronta

Alonso Castro

hola, saben de algun plugin de reproductor de audio para mp3 para wordpress que funcione en la versión 3.6.1 y ademas reúna las características del plugin audio player, esto quiere decir sencillo, practico y profesional a la vez, pero que funcione ademas en dispositivos moviles como ipad, tablet, smartphones, etc. gracias por su ayuda pronta que funcione para dispositivos mobiles

Ulises

Gracias por los aportes que haces son geniales, tengo una duda puedo agregar cualquier código html o php en el plugin, mi pregunta es como le hago para crear un submenú, es decir, cuando seleccione el plugin aparezcan otras opciones abajo de el, esto me seria de gran utilidad, de antemano gracias por la ayuda, saludos!

Rubén Muñoz Autor

¿Qué CMS estás utilizando? ¿Es programación a medida?

mario

Hola; Una pregunta... Estoy intentando hacer una web para venta de fotos y me encuentro con un problema. Subo una foto de 12mb por ejemplo y cuando la tengo que descargar me la descarga en el maximo tamaño pero reducida (es decir, de apenas 1.2 mb. Quero aclarar que es una pagina web de venta de foto tipo Fotolia.com Abajo le dejo el link para que me entienda mejor de lo que estoy hablando... http://www.fotolia.com/id/40033682 Y cuando sube la foto (por ejemplo una es de 12mb y otra de 5mb, que me salga a la venta con las medidas que le corresponderia -automaticamente. ?¿?¿Por que??¿ Ahora subo las fotos y para todas las fotos me indica para la venta las mismas medidas (y no deberia ser asi), cada foto le corresponde unas medidas estrictamente para ella. Abao le eslico mejor: Esta foto no tiene las mismas dimenciones que la de abajo...GRACIAS http://www.fotolia.com/id/40033682 Standard XS 424 x 283 (0.1 MP) 20 credits Standard S 849 x 566 (0.5 MP) 50 credits Standard M 1688 x 1125 (1.9 MP) 150 credits Standard L 2356 x 1570 (3.7 MP) 320 credits Standard XL 3421 x 2280 (7.8 MP) 450 credits Standard XXL 5441 x 3627 (19.7 MP) 500 credits Extended X 5441 x 3627 (19.7 MP) 555 credits   http://www.fotolia.com/id/43366830 Standard XS 404 x 297 (0.1 MP) 19 credits Standard S 808 x 594 (0.5 MP) 49 credits Standard M 1608 x 1182 (1.9 MP) 229 credits Standard L 2244 x 1649 (3.7 MP) 339 credits Standard XL 3649 x 2682 (9.8 MP) 399 credits Extended X 3649 x 2682 (9.8 MP) 800 credits

herz

excelente me gusta mucho fantastico

Juan Viñas

Posiblemente encuentres útil jugar con condicionales y estas dos funciones: - is_singular( 'post_type' ) : Esta función comprueba si estamos viendo (en el front-end) una entrada simple del tipo 'post_type'. - is_post_type_archive( 'post_type' ) : Esta función comprueba si viendo en el front-end el archivo del tipo 'post_type'. Juega con estos condicionales para que tus funciones se ejecuten cuando tu quieras.

Gerardo

tengo otra inquietud, como podría llamar el plugins solo cuando este dentro de una categoría en especifico, por ejemplo: solo en la categoría de concurso y no en la de noticias o el resto.

Gerardo

desde acá. http://docs.jquery.com/Plugins/validation. funciona a la perfección

Juan Viñas

¿Con jQuery? ¿De qué librería se trata?

Gerardo

lo solucione con una librería de jquery. gracias

Juan Viñas

¡Eso es más complicado! Que va, en realidad no tanto. Te costará mucho menos si lo haces con Ajax, creo. Teniendo nuestro tipo personalizado para los contactos creado, podrías hacer que, por Ajax, se envíen todos los datos (con Javascript controlarías que los datos estén todos rellenos o no), y luego hacer un wp_insert_post. Con esto rellenas los datos básicos (titulo, contenido, etc), y nos devolverá una id. El resto de datos los insertas con add_post_meta o con update_post_meta, la id que nos ha devuelto wp_insert_post y los datos que quieres insertar. Una linea para cada inserción. Investiga el Codex, creo que con lo que te he dicho deberias poder hacerlo fácilmente. ¡Un saludo!

Gerardo

estoy creando un plugin basado en tu ejemplo, pero el funcionamiento es inverso, lo visitantes al sitio rellenan los campos y los visualizo en el administrador, la pregunta es como puedo validar los datos ingresados al enviar el formulario. la idea es que rellenen todos los datos y si falta uno no envíe el formulario y que muestre un mensaje avisando que falta el campo xx. gracias por el aporte.

Juan Viñas

Depende de cómo los quieras guardar. Quiero decir, si quieres aprovechar las tablas de la base de datos de WordPress, investiga usar la variable global $wpdb. Si no, ya tienes que configurar a mano la conexión con otra base de datos. También depende de la forma en que quieras guardar los datos. Quizá son datos relacionados con un post (guardalos con update_post_meta), o con la web en global (guardalos con update_option) o son tipos completos y necesitas guardarlos como tal (usando wp_insert_post).

Gerardo

Excelente, Una pregunta: como puedo guardar estos datos en una tabla de la base de datos? Gracias por el aporte.

JC

Muchisimas gracias Juan por tu pronta respuesta!! Es justo lo que necesitaba! Me estaba volviendo loco con lo de poner un "if" con el checked... una locura. Pero gracias a ti ya está todo hecho!! Muchas gracias de nuevo!! Un saludo!!

Juan Viñas

Es simple, pero a la vez un poco tedioso, jeje :) Un radio button comparte el atributo name con el resto de sus radio buttons asociados, y se diferencian principalmente en el value, que será distinto. Así que si tenemos: <input type='radio' name='radios' value='1'> <input type='radio' name='radios' value='2'> El resultado nos vendrá por $_POST['radios'] (o por $_GET, dependiendo del sistema que uses). Ese valor, lo guardamos con update_option( 'miplugin_radios', $_POST['radios'] ), o como lo hayas llamado. Hasta aquí, todo bien, ¿Verdad? Vamos a lo tedioso: un radio button seleccionado tiene una propiedad más, "checked". Así que tenemos que comprobar que si el valor que tenemos almacenado es el mismo que el valor del input, escribimos la palabra checked. Algo así: <input type='radio' name='radios' value='1' <?= ( get_option('radios') == '1' ? "checked" : "" ) ?> > <input type='radio' name='radios' value='2' <?= ( get_option('radios') == '2' ? "checked" : "" ) ?> > (Lo que estoy haciendo, por si alguno no lo entiende, es la forma abreviada de un if, es decir, ( condicion ? si es true hago esto : si es false hago esto ), dentro de las <?= ?> que es lo mismo que escribir <?php echo ?>) De esta forma, tu radio button tendrá sentido :)

JC

A mi me surge una duda. Yo aparte de guardar campos de texto, tengo un radio button, y a la hora de guardarlo todo va bien. El problema surge cuando quiero recuperar el valor esa variable y que aparezca marcada cuando vuelva a la página. ¿Cómo se haría? Gracias de antemano! Y gracias de nuevo por el excelente trabajo!! ;)

Juan Viñas

¡De nada! :) Me gustaría preguntaros algo, ¿Hay algún tema en particular del que os gustaría que hablase o hiciese un tutorial, así en términos generales? ¡Un saludo!

angel

Excelente para mi, no sabia nada, Mil Gracias

Mauricio

Muy buna la explicación, muchas gracias por compartir. A la espera de seguir aprendiendo. Saludos y que sigan los éxitos.

Juan Viñas

¡De nada! Me alegro de que te haya sido de utilidad :)

Daniel Arango

Gracias por el tutorial, muy bueno :)