Si necesitamos de colaboradores que aporten contenidos a nuestro blog, pero no queremos que tengan acceso al Dashboard (o panel de control) de WordPress, podemos facilitarles un formulario externo para que redacten el contenido y se envié pendiente de revisión.

Para ello vamos a crear un página interna donde insertaremos un formulario en HTML y el código PHP necesario para que el contenido se envíe y se cree la entrada en el blog.

¿Te atreves? comenzamos…

Paso 1. Crear una página interna «Formulario de colaboradores»

Como si de cualquier otra página se tratase, nos dirigimos al menú Páginas y añadimos una nueva llamada por ejemplo, Formulario de colaboradores:

Paso 2. Crear un nuevo archivo page-colaboradores.php

Lo primero, nos situaremos sobre el directorio de nuestro tema principal y crearemos un nuevo archivo al que llamaremos por ejemplo «page-colaboradores.php».

Este archivo lo vamos a utilizar como plantilla (o template) para nuestro formulario, así que lo primero que vamos a incluir en el archivo es el siguiente código:

<?php
/* Template Name: Formulario Colaboradores */
?>

Ahora volvemos a la página que creamos anteriormente, recargamos y en la sección Plantilla, seleccionamos el nuevo template que acabamos de crear «Formulario colaboradores»:

Paso 3. Copiar el contenido de page.php a page-colaboradores.php

Para no trabajar sobre una página en blanco, vamos a ir al archivo page.php de nuestro tema principal, copiamos todo el código y lo pegamos en nuestro page-colaboradores.php después del código insertado en el Paso 2.

Así trabajaremos sobre la estructura de nuestro tema principal (con su cabecera, menús, pié de página…) y nuestro formulario se integrará perfectamente con el diseño general.

Paso 4. Eliminar el Loop de WordPress

Este paso es opcional, pero podemos prescindir de código que no vamos a usar. El Loop de WordPress se encarga de obtener el contenido de la base de datos correspondiente a la página o entrada en la que nos encontremos. Como en este ejercicio no vamos a cargar ningún contenido de la base de datos, si no que insertaremos el formulario manualmente, podemos eliminar todo el código del Loop de WordPress.

Normalmente el Loop de WordPress comenzará con:

while ( have_posts() ) : the_post();

y termina con:

endwhile;

Paso 5. Crear el formulario en HTML (y algo de PHP)

Añadimos el código HTML para el formulario compuesto por un campo de texto para insertar el título de la entrada y el editor de WordPress para añadir el contenido, sin olvidar el botón submit para enviar el formulario.

<form name="contenidoColaboradores" id="contenidoColaboradores" method="post">
<p>
    <input type="text" name="tituloPost" placeholder="Escribe aquí el título de la entrada"/>
</p>

<p>
<?php
wp_editor(
 $post_obj->post_content,
 'userpostcontent',
 array('textarea_name' => 'contenido')
); 
?>
</p>

<p>
<input type="submit" value="Enviar Post"/>
</p>

<?php wp_nonce_field('contenidoColaboradores'); ?>
</form>

La función wp_nonce_field() añade seguridad al formulario, evitando que la información llegue desde un formulario ajeno al sitio web.

Nuestro formulario quedará de esta forma:

Paso 6. Procesar los datos del formulario y crear la entrada

$mi_entrada = array(
 'post_title' => wp_strip_all_tags($_POST['tituloPost']),
 'post_content' => $_POST['contenido'],
 'post_type' => 'post',
 'post_status' => 'pending',
 'post_author' => $user_id,
);

$nuevo_post = wp_insert_post($mi_entrada);

Por último, enviamos una entrada de prueba y esta quedará registrada como Pendiente de revisión:

Debemos tener en cuenta que cualquier persona que acceda a la URL del formulario, podrá enviarnos entradas. Ya depende de nosotros cómo gestionamos la página del formulario, si la restringimos únicamente a usuarios registrados, o con determinado rol, o impedimos el acceso por contraseña, etc.

Pero el sistema de roles y restricciones de páginas los veremos en otros posts.

Espero que os haya resultado de utilidad y hasta el próximo post! 😉