Publicaciones Anónimas en WordPress - Cómo Crear un Formulario de Contribución

2 feb 2011, 01:05:54
Vistas: 834
Votos: 1

Esta es una republicación de una pregunta hecha en stackoverflow, y fue referida a este sitio:

Mi cliente quiere crear un formulario en su nuevo sitio de WordPress que, al ser llenado y enviado, se envíe a su cola de posts de administración para aprobar y, si lo aprueba, se publique en su sitio en la sección "blog" (que en realidad es un conjunto de tablaturas de guitarra). El formulario sería personalizado y tendría campos personalizados. A continuación está el formulario, pero en el diseño antiguo antes de que le hiciera una actualización.

Entonces, ¿qué tan difícil sería esto? Él no lo quiere en el panel de administración de WP, que es donde comencé a hacerlo, sino externamente en una página como /contribuir

Formulario de contribución para tablaturas de guitarra

0
Todas las respuestas a la pregunta 2
5

Puedes usar plugins para publicar desde el front-end:

O puedes crear el formulario tú mismo

    <!-- Formulario de Nueva Publicación -->
<div id="postbox">
<form id="new_post" name="new_post" method="post" action="">
<p><label for="title">Título</label><br />
<input type="text" id="title" value="" tabindex="1" size="20" name="title" />
</p>
<p><label for="description">Descripción</label><br />
<textarea id="description" tabindex="3" name="description" cols="50" rows="6"></textarea>
</p>
<p><?php wp_dropdown_categories( 'show_option_none=Categoría&tab_index=4&taxonomy=category' ); ?></p>
<p><label for="post_tags">Etiquetas</label>
<input type="text" value="" tabindex="5" size="16" name="post_tags" id="post_tags" /></p>
<p align="right"><input type="submit" value="Publicar" tabindex="6" id="submit" name="submit" /></p>
<input type="hidden" name="action" value="new_post" />
<?php wp_nonce_field( 'new-post' ); ?>
</form>
</div>
<!--// Formulario de Nueva Publicación -->

y procesarlo

   if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) &&  ($_POST['action']== 'new_post')) {

    if (isset ($_POST['title'])) {
        $title =  $_POST['title'];
    } else {
        echo 'Por favor ingresa un título';
    }
    if (isset ($_POST['description'])) {
        $description = $_POST['description'];
    } else {
        echo 'Por favor ingresa el contenido';
    }
    $tags = $_POST['post_tags'];

    $new_post = array(
        'post_title'    => $title,
        'post_content'  => $description,
        'post_category' => $_POST['cat'],  
        'tags_input'    => $tags,
        'post_status'   => 'draft'
    );
    wp_insert_post($new_post);  

}

Y asegúrate de verificar el nonce y la sanitización de los campos del formulario.

ACTUALIZACIÓN

Según tu código en gist y comentario, cambia tu función a esto:

 if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && ($_POST['action']== 'new_post')) {
        $has_errors = false;
        if (isset ($_POST['title'])) {
            $title = $_POST['title'];
        } else {
            echo 'Por favor ingresa un título';
            $has_errors = true;
        }
        if (isset ($_POST['performer'])) {
            $performer = $_POST['preformer'];
        } else {
            echo 'Por favor ingresa un intérprete';
            $has_errors = true;
        }
        if (isset ($_POST['composer'])) {
          $composer = $_POST['composer'];
        } else {
            echo 'Por favor ingresa un compositor';
            $has_errors = true;
        }
        if (isset ($_POST['tablature'])) {
            $tablature = $_POST['tablature'];
        } else {
            echo 'Por favor ingresa el contenido';
            $has_errors = true;
        }
        $tags = $_POST['post_tags'];
        if (!$has_errors){
        //guardar <title>  por: <preformer>
        $title .= " por: " .$performer;

        //guardar Compuesto por: <composer> Interpretado por: <performer> <tablature>
        $content = "<h4>Compuesto por: ". $composer."</h4><br/><h4>Interpretado por: ".$performer."</h4><br/>".$tablature;

        $new_post = array(
            'post_title' => $title,
            'post_content' => $content,
            'post_category' => $_POST['cat'],
            'tags_input' => $tags,
            'post_status' => 'draft'
        );
        $pid = wp_insert_post($new_post);


        //guardar email y submitente como meta post en campos personalizados
        update_post_meta($pid, 'submiter_email', urldecode($_POST['email']));
        update_post_meta($pid, 'submiter_name', urldecode($_POST['submitter']));
    }
}
2 feb 2011 09:46:19
Comentarios

No soy programador de PHP, ni pretendo serlo, pero esto es lo que se me ocurrió: https://gist.github.com/810767. La idea es que la salida sea "<título de la canción> por <intérprete>" en el título, y "<h4>Compuesto por: <compositor></h4><br/><h4>Interpretado por: <intérprete></h4><br/><descripción>" en el área de contenido. Este código creó un nuevo borrador de publicación, pero ese borrador estaba vacío, excepto por el título. Creo que estoy cerca, pero no del todo. ¡Muchas gracias por esta respuesta, definitivamente me ha puesto en el camino correcto!

Unfortunately Unfortunately
4 feb 2011 05:18:43

no estás guardando ninguno de los campos en tu nueva publicación.

Bainternet Bainternet
4 feb 2011 11:24:10

He actualizado la respuesta

Bainternet Bainternet
4 feb 2011 11:38:00

¡Gracias nuevamente por tu ayuda! Esto es en lo que estoy en este momento, y está casi terminado, pero estoy atascado en tres cosas. Las categorías no se publican, el título se publica como <título> por: <título> en lugar de <título> por: <intérprete>, y el título parece aparecer inicialmente en el listado de publicaciones, pero cuando hago clic en el título para ir a la página de edición de la publicación, la barra del título está vacía? https://gist.github.com/35ad2c03a340bb324109

Unfortunately Unfortunately
5 feb 2011 06:09:25

Entonces, además de que el campo del título aparece vacío al entrar en la página de 'editar publicación', el enlace permanente SÍ tiene el título de la canción en forma de enlace permanente. Extraño. Parece que también el formulario está mostrando "Interpretado por: <título de la canción>". ¡Realmente aprecio tu ayuda!

Unfortunately Unfortunately
5 feb 2011 06:57:18
2

No lo he verificado, pero este plugin probablemente te muestre cómo abordarlo. Aquí hay otro, o podrías crear un usuario especial llamado 'anónimo' y darle permisos de 'autor'. Probablemente quieras tener cuidado al darles permisos de edición o eliminación.

2 feb 2011 03:12:42
Comentarios

Anteriormente había estado intentando hacer que esto funcionara con TDOMF, pero el 'formulario hackeado' era demasiado complicado para mí. Si no logro escribir esto por mi cuenta (con lo cual me refiero, con la ayuda de personas como tú), ¡le daré una oportunidad a la publicación anónima! ¡Gracias!

Unfortunately Unfortunately
4 feb 2011 06:15:44

Actualicé el código

Bainternet Bainternet
5 feb 2011 11:40:16