Agregar elementos de tipo de entrada personalizada desde el frontend

3 nov 2012, 06:41:47
Vistas: 32.2K
Votos: 5

Estoy tratando de averiguar cómo hacer que mi sitio web de WordPress pueda agregar elementos de portfolio desde el frontend. Plugins como WP-User-Frontend permiten publicar desde el frontend pero solo funcionan con entradas de blog.

¿Hay alguna manera o algún plugin similar a wp-user-frontend pero que permita agregar elementos de tipos de entrada personalizados?

0
Todas las respuestas a la pregunta 3
3
12

Si estás dispuesto a pagar por ello, el plugin Gravity Forms te permite crear formularios que se mapean con tus Tipos de Entradas Personalizadas (incluso con entradas y páginas regulares) así como con tus campos personalizados.

Para aquellos que no lo estén y estén dispuestos a arremangarse, puedes crear un formulario en el front-end que publique datos en cualquier tipo de entrada que elijas de manera bastante sencilla.

Aquí tienes un ejemplo básico:

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

//almacenamos nuestras variables POST en variables para su uso posterior
//este sería un buen momento para hacer alguna comprobación/validación básica de errores
//para asegurarnos de que los datos para estos valores han sido establecidos
$title     = $_POST['title'];
$content   = $_POST['content'];
$post_type = 'my_custom_post';
$custom_field_1 = $_POST['custom_1'];
$custom_field_2 = $_POST['custom_2'];    

//el array de argumentos para ser insertados con wp_insert_post
$new_post = array(
'post_title'    => $title,
'post_content'  => $content,
'post_status'   => 'publish',          
'post_type'     => $post_type 
);

//insertamos la entrada en la base de datos pasando $new_post a wp_insert_post
//almacenamos nuestro ID de entrada en una variable $pid
$pid = wp_insert_post($new_post);

//ahora usamos $pid (ID de entrada) para ayudar a añadir nuestros metadatos
add_post_meta($pid, 'meta_key', $custom_field_1, true);
add_post_meta($pid, 'meta_key', $custom_field_2, true);

}

Tu formulario HTML se vería algo similar a:

<form method="post" name="front_end" action="" >
<input type="text" name="title" value="Mi Título de Entrada" />
<input type="text" name="content" value="Mi Contenido de Entrada" />
<input type="text" name="custom_1" value="Contenido del Campo Personalizado 1" />
<input type="text" name="custom_2" value="Contenido del Campo Personalizado 2" />
<button type="button">Enviar</button>
<input type="hidden" name="action" value="my_post_type" />
</form>

Puedes colocar todo esto en tu archivo de plantilla del tema. Normalmente, yo iría un paso más allá y ejecutaría la lógica de procesamiento (PHP) desde una función dentro de mi functions.php enganchada a una acción, pero también funcionará desde un archivo de plantilla del tema.

Este es solo un ejemplo básico y carece de cualquier comprobación y validación de errores seria. Sin embargo, te proporciona el marco esencial para lo que necesitas para publicar desde el front-end a tus tipos de entrada en el back-end.

También hay numerosos tutoriales que amplían este tema en WPSE, si realizas una búsqueda encontrarás una gran cantidad de información.

3 nov 2012 08:23:20
Comentarios

¿Y qué hay de los archivos adjuntos en campos meta?

Gacek Gacek
12 jun 2015 16:38:35

@Gacek ¿lograste resolver lo de los archivos adjuntos?

User User
31 oct 2017 06:52:26

no, la verdad es que no.

Gacek Gacek
31 oct 2017 12:03:40
1
<?php 

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

//almacenamos nuestras variables POST en variables para uso posterior
//este sería un buen momento para hacer alguna validación básica
//para asegurarnos que los datos para estos valores han sido establecidos
$title     = $_POST['title'];
$content   = $_POST['content'];
$tags   = $_POST['tag'];
$custom_field = $_POST['custom_1']; 
$post_type = 'frontpost';


//el array de argumentos a insertar con wp_insert_post
$new_post = array(
'post_title'    => $title,
'post_content'  => $content,
'tags_input'  => $tags,
'post_status'   => 'publish',
'post_category' => array('0',$_POST['cat']),          
'post_type'     => $post_type 
);

//insertamos el post en la base de datos pasando $new_post a wp_insert_post
//almacenamos nuestro ID de post en una variable $pid
//usamos $pid (id del post) para ayudar a añadir nuestros metadatos
 $pid=wp_insert_post($new_post);

//usamos $pid (id del post) para ayudar a añadir nuestros metadatos
add_post_meta($pid, 'cust_key', $custom_field);


}
?>

    <div class="front-form col-sm-6">
        <form method="post" name="front_end" action="" >
            <input type="text" name="title" placeholder="Título del FrontPost" required />
             <textarea  name="content" placeholder="Contenido del FrontPost" rows="5" ></textarea>
            <input type="text" name="tag" placeholder="Etiquetas del FrontPost" />
            <input type="text" name="custom_1" placeholder="Contenido del Campo Personalizado" />


            <span><?php wp_dropdown_categories( 'tab_index=10&taxonomy=category&hide_empty=0' ); ?></span>
            <button type="submit">Enviar</button>
            <input type="hidden" name="action" value="front_post" />
        </form>
    </div>

¡Prueba esto, te ayudará! Aakib :)

4 ene 2017 12:22:58
Comentarios

Por favor, [edita] tu respuesta y agrega una explicación: ¿por qué eso podría resolver el problema?

fuxia fuxia
4 ene 2017 13:06:42
0

insertar post

    add_action('init', function() {
        if (isset($_POST['submit'])) {
            if (!is_user_logged_in()) {
                echo 'Debes estar conectado para enviar un post.';
                return;
            }
    
            $title = sanitize_text_field($_POST['name']);
            $description = sanitize_textarea_field($_POST['description']);
            $create_post = array(
                'post_status' => 'publish',
                'post_type' => 'user', // Asegúrate de que el tipo de post 'user' esté registrado
                'post_title' => $title,
                'post_content' => $description,
            );
    
            $post_id = wp_insert_post($create_post);
            if(isset($_FILES['fileToUpload']) && !empty($_FILES['fileToUpload']['name'])){
                require_once( ABSPATH . 'wp-admin/includes/image.php' );
                require_once( ABSPATH . 'wp-admin/includes/file.php' );
                require_once( ABSPATH . 'wp-admin/includes/media.php' );

                $attachement_id = media_handle_upload('fileToUpload',$post_id);
                if(is_wp_error($attachement_id)){
                    echo '¡Error al subir el archivo!';
                }else{
                    set_post_thumbnail($post_id,$attachement_id);
                }
            }
            return  $post_id ? 'Post creado exitosamente' : 'Error al crear el post';
            if ($post_id) {
                $state = sanitize_text_field($_POST['state']);
                $country = sanitize_text_field($_POST['country']);
                $pincode = sanitize_text_field($_POST['pincode']);
                $college = sanitize_text_field($_POST['college']);
    
                update_post_meta($post_id, 'state', $state);
                update_post_meta($post_id, 'country', $country);
                update_post_meta($post_id, 'pincode', $pincode);
                update_post_meta($post_id, 'college', $college);
    
                echo '¡Post creado exitosamente!';
            } else {
                echo 'Error al crear el post.';
            }
        }
        
    });

aquí la parte HTML

<style cdn>
<div class="container">
    <form action="" method="post" enctype="multipart/form-data">
        <input type="hidden" name="post_id" value="<?php  echo $post_idd ?>"
        <div class="row mt-3">
            <div class="col-sm-6">
                <label>Nombre</label>
                <input type="text" name="name" class="form-control" value="<?php echo isset($user_name) ? $user_name : ''; ?>">
            </div>
            <div class="col-sm-6">
            <label>Descripción</label>
                <input type ="text" name= "description" class="form-control" value="<?php echo isset($user_description) ? $user_description : ''; ?>">
            </div>
        </div>
        <div class="row mt-3">
            <div class="col-sm-12">
            <label> Seleccionar imagen para subir </label>
           <input type="file" name="fileToUpload" id="fileToUpload" class="form-control" value=" <?php echo isset($image) ? $image : ''; ?>">
            </div>
        </div>
        <div class="row mt-3">
            <div class="col-sm-4">
            <label>Estado</label>
                <input type ="text" name= "state" class="form-control" value="<?php  echo isset($state) ? $state : ''; ?>">
                </div>

                <div class="col-sm-4">
                    <label>País</label>
                <input type ="text" name= "country" class="form-control" value="<?php echo isset($country) ? $country : ''; ?>">
                </div>

                <div class="col-sm-4">
                <label>Código postal</label>
                <input type ="text" name= "pincode" class="form-control" value="<?php echo isset($pincode) ? $pincode : '' ?>">
            </div>
        </div>
        <div class="row mt-3">
            <div class="col-sm-12">
            <label>Nombre de la universidad </label>
                <input type ="text" name= "college" class="form-control" value="<?php echo isset($college) ? $college : ''; ?>">
            </div>
        </div>
        <?php if( isset($_GET['post_id']) && $_GET['post_id']!=""){?>
            <div class="row mb-5 mt-3">
            <div class="col-sm-12">
            <input type="submit" name="update" value="actualizar" class="btn btn-primary">
            </div>
            <?php } else {
            ?>
        </div>
        <div class="row mb-5 mt-3">
            <div class="col-sm-12">
            <input type="submit" name="submit" value="enviar" class="btn btn-primary">
            </div>
        </div>
        <?php  }
        ?>
    </form>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
5 dic 2024 18:29:49