• Saltar a la navegación principal
  • Saltar al contenido principal

Dani Sánchez - Gestionatuweb

Desarrollador web freelance

  • Quién soy
  • ¿Eres agencia?
  • WordPress
    • Mantenimiento WordPress
    • Desarrollo WordPress
    • Soporte técnico WordPress
  • Cursos
  • Blog
  • Portfolio
  • Solicita Presupuesto

Crear entradas desde un formulario externo en WordPress (sin plugins)

El 12 de enero de 2018 por dani 18 comentarios

Aviso: Esta entrada tiene 2 o más años, es posible que el método difiera ligeramente, las capturas de pantalla no se correspondan con la versión actual o que la herramienta/complemento ya no esté disponible.
Advertencia: Esta entrada contiene códigos o snippets que podrían no funcionar correctamente en tu instalación de WordPress, o podrían ser incompatibles con tu theme o plugins activos. Úsalos bajo tu responsabilidad, preferiblemente en un entorno de desarrollo y haz siempre copias de tus archivos antes de modificarlos.

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' =&gt; wp_strip_all_tags($_POST['tituloPost']),
 'post_content' =&gt; $_POST['contenido'],
 'post_type' =&gt; 'post',
 'post_status' =&gt; 'pending',
 'post_author' =&gt; $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.

Actualización para marcar la categoría seleccionada de la entrada.

Seleccionar la categoría o categorías de destino de la entrada es algo más complejo. Primero tendríamos que añadir al formulario la lista de categorías disponibles.

foreach (get_terms('category', array('hide_empty' => false,)) as $tag){ 
    echo "<input type='checkbox' name='" . $tag->slug . "' value='" . $tag->slug . "'/> 
    <label for='".$tag->slug."'>". $tag->name . "</label><br/>"; 
}

Eso debería cargar las categorías disponibles en checkboxs. Después guardar en un array las categorías que haya marcado el usuario para la entrada:

$categorias = array(); 

foreach(get_terms('category', array('hide_empty' => false,)) as $tag){ 
    $termino_taxonomia = $tag->slug; 
    if(isset($_POST[$termino_taxonomia])){ 
        $term.$termino_taxonomia = term_exists($termino_taxonomia, 'category', 0);   
        array_push($categorias, $term.$termino_taxonomia['term_taxonomy_id']); 
    } 
} 

$categorias_marcadas = array( 'category' => $categorias );

Y añadir las categorías marcadas a la Query:

$post = array( 
    'post_title' => "Lo que sea", 
    'post_content => $_POST['contenido'], 
    'tax_input' => $categorias_marcadas, 
    'post_status' => 'pending' 
);

Y crear el post:

$the_post = wp_insert_post($post);

Se que es algo complejo, pero hay que hacer todos esos pasos para que las categorías marcadas queden registradas en el post.

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

Archivado en: Actualidad, Publicaciones, Tutoriales, WordPress Etiquetado como: colaboradores, desarrollo web, programación web, tutoriales, wordpress

Interacciones con los lectores

Comentarios

  1. cristina dice

    2 de mayo de 2021 a las 12:56

    Hola Dani!, veo que eres un experto en el tema, por lo que me atrevó a dejarte una inquietud que tiene que con formularios pero más a nivel usuario.
    Si tengo incrustado formulario de google como puedo enviarle los datos de sesion para poder identificar y analizar las respuestas en sheets de esos usuarios.

    Responder
  2. raul barroso dice

    14 de septiembre de 2020 a las 12:46

    Saludos,Gracias por tu aporte, he segudio los pasos que explica y todo me sale bien, el unico detalle es que los checkbox me aparecen con la casilla desactivada. que deberia hacer para solucionarlo?

    Responder
  3. Eddy dice

    31 de agosto de 2020 a las 14:48

    Saludos
    Mi pregunta es como le pongo un campo de autor para los usuarios que no están registrado en mi wordpress en el formulario para colaboradores por favor?

    Responder
  4. Pame dice

    1 de julio de 2020 a las 21:16

    Una pregunta, si lo quiero aplicar a que quede pero con un post de ortafolio, cómo cambio el código? Gracias.

    Responder
  5. diana ruiz dice

    10 de junio de 2020 a las 02:20

    una pregunta si una persona quiero poner el url de un video o de un popcast que codigo puedo usar y donde debería ponerlo este es el codgio pero esoty enredada de como ponerlo apra que quede dentro del contenido que estoy creando

    Enter your video or audio embed code.

    Responder
  6. Eduardo Soto dice

    22 de mayo de 2020 a las 15:29

    Hola agradezco mucho tu publicación, he seguido los pasos y he podido realizar el formulario pero estoy intentando que el colaborador seleccione la categoría de la publicación, más no he podido. Podrías, o alguien en el foro señalar por que no me ha resultado:

    Llena este formulario para publicar un aviso de ocación en cualquiera de nuestras categorías. Todo lo que publiques aparecerá en nuestros Avisos de Ocación Publica gratis lo que gustes en cualquiera de nuestras categorías.

    Título de tu Aviso

    Contenido Principal

    Categoría de tu aviso

    Elegir la categoría
    Bolsa de Trabajo
    Oferta Inmobiliaria
    Salud y Belleza
    Servicios
    Vehiculos
    Otros y Varios

    Comparte en este espacio todo lo que quieras que aparezca dentro de tu anuncio
    post_content,
    ‘userpostcontent’,
    array(‘textarea_name’ => ‘contenido’)
    );
    ?>

    wp_strip_all_tags($_POST[‘tituloPost’]),
    ‘post_excerpt’=> wp_strip_all_tags($_POST[‘postexcerpt’]),
    ‘post_content’ => wp_strip_all_tags($_POST[‘contenido’]),
    ‘post_category’ => array(‘cat’),
    ‘post_type’ => ‘post’,
    ‘post_status’ => ‘pending’,
    ‘post_author’ => $user_id,
    );

    $nuevo_post = wp_insert_post($mi_entrada);
    echo «» . $txt1 . «»;
    ?>

    ?>

    Intenté además que una vez lleno te lleve a un mensaje «Entrada pendiente de validación»

    ¿Cómo podría hacerlo?

    Responder
    • Daniel, Gestionatuweb.net dice

      22 de mayo de 2020 a las 18:16

      Hola, he añadido al final del post cómo se haría para agregar la categoría a la entrada, ya que no me dejaba poner el código correctamente en los comentarios. Es algo más complejo, pero espero que te sirva.

      Responder
  7. Hèctor Alejandro dice

    25 de abril de 2020 a las 02:52

    Saludos y gracias por el tutorial
    Solo una pregunta. ¿En donde va el còdigo del paso 5 y 6?

    Responder
    • Daniel, Gestionatuweb.net dice

      25 de abril de 2020 a las 11:01

      Hola Héctor, el código iría en el archivo page-colaboradores.php, el template que se crea para la página de colaboradores. Un saludo.

      Responder
  8. alvin luperon dice

    22 de octubre de 2019 a las 16:41

    Hola mi amigo buen ejemplo, tengo una duda, si quiero cargar una imagen desde un formulario externo a wordpress, como lo realizo, por si tienes un ejemplo se te agradecerá.

    Responder
  9. Daniel, Gestionatuweb.net dice

    19 de octubre de 2019 a las 08:06

    Hola Jorge, utiliza Advanced Custom Fields para crear los campos de lugar y url, y al disparar las entradas al frontend llámalos con la función the_field().

    Investiga sobre esto, ya que exactamente no se decirte sin tener delante el proyecto.

    Saludos.

    Responder
  10. Jorge Luis Schmukler dice

    18 de octubre de 2019 a las 20:00

    Hola Daniel, muchas gracias, una consulta, estoy utilizando DIVI, cargo un formulario de Post mediante buddyForms, estas se transforman en entradas. Luego en la pagina principal agregué el modulo de blog de DIVI y aparecen la imagen-Titulo-Descripcion de cada una de las entradas.
    Hasta ahí funciona todo.
    Ahora quiero que ademas de la descripcion me visualicen 2 campos mas (lugar y URL del evento).
    Las preguntas son:
    1. Es posible agregar esos campos ?
    2. Se puede modificar el modulo blog ?
    Muchas gracias y Saludos.

    Responder
  11. jorge rodríguez dice

    15 de julio de 2019 a las 15:04

    Yo tengo una duda, y es que estoy intentando hacer que esos post pertenezcan a una categoría en concreto, esto lo intento hacer metiendo la opcon «post_category => ‘categoría'» al array de mi entrada quedando así
    $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,
    ‘post_category’ => ‘privado’,
    );
    Pero no me lo añade a la categoría que he puesto, como se haría?

    gracias de antemano

    Responder
    • Daniel, Gestionatuweb.net dice

      17 de julio de 2019 a las 20:25

      Hola Jorge, creo que el problema es que a ‘post_category’ le pasas el nombre de la categoría y hay que pasar el ID.

      Si te fijas en el codex de WordPress, indica que el post_category tiene que recibir el ID de la categoría.

      https://developer.wordpress.org/reference/functions/wp_insert_post/

      Un saludo y espero te sirva.

      Responder
  12. Manuel Mtz dice

    29 de agosto de 2018 a las 20:51

    Hola, todo ha funcionado de maravilla, solo quisiera saber como podría incluirse la imagen destacada del post desde un archivo que se suba en la fomra de contacto.

    Saludos.

    Responder
    • Daniel, Gestionatuweb.net dice

      28 de octubre de 2019 a las 08:25

      Hola Manuel, cargar una imagen es algo más complejo, hay que preparar el fomulario para ello y luego procesar (generalmente con PHP), dónde se va a guardar la imagen.

      No he investigado cómo implemetarlo en WordPress, me lo apunto para futuros tutoriales, aunque si ya lo has averiguado y quieres compartirlo, se agradece 🙂 Saludos.

      Responder
  13. Hernan Torres dice

    10 de mayo de 2018 a las 16:50

    Una pregunta, estoy usando wordpress 4.9.5. al incluir el codigo tal com usted lo muestra me sale un error y no se que es.

    Notice: Undefined index: tituloPost in C:\wamp64\www\vidas_con_proposito-WPF\wp-content\themes\vidas_con_proposito-B4\page-colaboradores.php on line 39

    Notice: Undefined index: contenido in C:\wamp64\www\vidas_con_proposito-WPF\wp-content\themes\vidas_con_proposito-B4\page-colaboradores.php on line 40

    Notice: Undefined variable: user_id in C:\wamp64\www\vidas_con_proposito-WPF\wp-content\themes\vidas_con_proposito-B4\page-colaboradores.php on line 43

    Tengo incluido el codigo como usted lo expresa

    Responder
    • Daniel, Gestionatuweb.net dice

      10 de mayo de 2018 a las 17:07

      Hola Hernán Torres, realmente no es un error, es un aviso que se dispara porque la misma página donde está el formulario es la que lo procesa, entonces cuando se carga una página que esperaba ciertas variables y se las encuentra vacías, da esa advertencia. Pero no es un error. Si no quieres que aparezcan estas advertencias puedes desactivarlas en el display_errors de tu archivo php.ini, o en la variable WP_DEBUG, cambiándola a false en tu wp-config.php. Un saludo.

      Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad

Hosting recomendado

Raiola Networks

Autor

Dani Sánchez
Dani Sánchez
@danisanchez82

Entradas recientes

  • Optimizar el archivo de configuración de WordPress (wp-config.php)
  • ¿Qué plugins tengo instalados en mi web en 2022?
  • Tu alojamiento web no es compatible con la rotación de imágenes. [Solución]
  • Instalar LAMP en Manjaro (Linux, Apache, MySQL y PHP)
  • Instalar LAMP (Linux, Apache, MySQL y PHP) en Fedora 34

Comentarios recientes

  1. Armando en Instalar LAMP (Linux, Apache, MySQL y PHP) en Fedora 34
  2. Vito en Configurar en español los campos tipo fecha (date) en Ninja Forms
  3. Manel en Calcular rutas con OpenStreetMap partiendo de la geolocalización del usuario
  4. Leo en Modificar textos predefinidos de WordPress sin editar la traducción
  5. Alejo en Instalar LAMP en Manjaro (Linux, Apache, MySQL y PHP)

Categorías

  • Actualidad
  • Afiliación AliExpress
  • Agent Press Pro
  • Bettaso Web Restaurantes
  • Cursos
  • Destacado
  • Divi
  • Drupal
  • Elementor
  • Genesis
  • Iniciación a PHP
  • Joomla!
  • Linux
  • Publicaciones
  • Tutoriales
  • WooCommerce
  • WordPress

Divi 20% descuento

Hosting Recomendado

Raiola Networks
Banner

Sitios web corporativos, blogs y tiendas online cuidando hasta el mínimo detalle

Si deseas proponerme un proyecto web ponte en contacto conmigo.

Contacto

Gestionatuweb © 2022 · Desarrollado con Genesis · Acceder
Política de privacidad · Política de cookies

En Gestionatuweb.net utilizamos cookies técnicas para el correcto funcionamiento del sitio. Además, utilizamos cookies para obtener datos estadísticos sobre el uso de la web, con el fin de mejorar la experiencia de navegación y conocer qué contenidos son los más consultados. Otras cookies son usadas para servicios adicionales, como conexión con redes sociales, marketing o mostrar publicidad acorde a tus gustos. Puedes desactivar todas las cookies (excepto las técnicas) pulsando en Rechazar, o elegir qué cookies admites y cuales no en el botón de Preferencias. Más información sobre las cookies que utilizamos en nuestra: Política de cookies.

Gestor de cookies:  GDPR Cookie Compliance
Resumen de uso de cookies

En Gestionatuweb.net utilizamos cookies técnicas para el correcto funcionamiento del sitio. Además, utilizamos cookies para obtener datos estadísticos sobre el uso de la web, con el fin de mejorar la experiencia de navegación y conocer qué contenidos son los más consultados. Otras cookies son usadas para servicios adicionales, como conexión con redes sociales, marketing o mostrar publicidad acorde con tus intereses. Puedes desactivar todas las cookies (excepto las técnicas) pulsando en Rechazar, o elegir qué cookies admites y cuales no en el botón de Preferencias.

Cookies técnicas (necesarias)

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies. Estas cookies son:

  • moove_gdpr_popup: Comprueba si debe mostrar o no el aviso de cookies (si ya ha sido aceptado o rechazado no se vuelve a mostrar mientras persista esta cookie). Expira en 1 año.
  • cpnb_cookiesSettings: Comprueba qué categorías de cookies se aceptan o rechazan (por ejemplo, cookies analíticas, cookies de publicidad dirigida, etc.). Expira en 1 año.
  • _GRECAPTCHA: Esta web utiliza el servicio reCAPTCHA para fortalecer la seguridad en los formularios y evitar el envío masivo de SPAM. reCAPTCHA utiliza esta cookie necesaria para realizar su análisis de riesgo. Expira en 6 meses.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de analítica

Utilizamos Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares. Dejando estas cookies activas nos permite mejorar nuestra web.

  • _ga: Analítica de Google. Se usa para distinguir a los usuarios. Expira en 2 años.
  • _gid: Se usa para distinguir a los usuarios. Expira en 24 horas.
  • _gat: Se usa para limitar el porcentaje de solicitudes. Expira en 1 minuto.

¡Por favor, activa primero las cookies estrictamente necesarias para que podamos guardar tus preferencias!

Cookies de publicidad

Utilizamos Google Adsense para mostrar publicidad en los artículos del blog acordes a tus intereses. Esta publicidad nos ayuda al mantenimiento del sitio web y del tiempo dedicado a la redacción del blog.

  • _gads: Publicidad de Google Adsense. Proporciona la publicación de anuncios de interés para el usuario. Expira en 13 meses.

¡Por favor, activa primero las cookies estrictamente necesarias para que podamos guardar tus preferencias!

Política de cookies

Más información sobre nuestra política de cookies